无法永久更改16.04服务器上的语言环境


9

我已经安装了新的Ubuntu 16.04服务器,但是当我尝试永久更改语言环境设置时,它会失败并恢复为POSIX语言环境。

键入会locale产生以下结果:

LANG=
LANGUAGE=
LC_CTYPE="POSIX"
LC_NUMERIC="POSIX"
LC_TIME="POSIX"
LC_COLLATE="POSIX"
LC_MONETARY="POSIX"
LC_MESSAGES="POSIX"
LC_PAPER="POSIX"
LC_NAME="POSIX"
LC_ADDRESS="POSIX"
LC_TELEPHONE="POSIX"
LC_MEASUREMENT="POSIX"
LC_IDENTIFICATION="POSIX"
LC_ALL=

据我所知,这意味着根本没有设置语言环境,因为文档指出POSIX是“ 后备ASCII编码,与C相同 ”。

为了确保语言环境de_AT.utf8en_US.utf8存在我的系统上,我跑了locale -a,这产生了:

C
C.UTF-8
POSIX
de_AT.utf8
en_AG
en_AG.utf8
en_AU.utf8
en_BW.utf8
en_CA.utf8
en_DK.utf8
en_GB.utf8
en_HK.utf8
en_IE.utf8
en_IN
en_IN.utf8
en_NG
en_NG.utf8
en_NZ.utf8
en_PH.utf8
en_SG.utf8
en_US.utf8
en_ZA.utf8
en_ZM
en_ZM.utf8
en_ZW.utf8

请注意与的不一致之处C.UTF-8,但是de_AT.utf8更让我担心的是,POSIX是第三项,而在不同的工作系统上,它是最后一项。

为了将语言更改为en_US.utf8,我输入了sudo update-locale LANG=en_US.utf8。该locale命令仍显示POSIX语言环境。注销并重新登录后,locale仍显示POSIX语言环境。重新启动后,locale仍显示POSIX语言环境。

但是,当我键入时export LANG=en_US.utf8,它会暂时起作用,但只能直到注销。因此,我可以肯定,语言环境是正确生成的。

我没主意。我尝试重新生成所有语言环境,但看起来好像/etc/default/locale只是被忽略了。

为了完整起见,/etc/default/locale仅包含以下行LANG=en_US.utf8

UPDATE://我尝试运行sudo localectl set-locale LANG=en_US.UTF-8,并且localectl还向我展示了它设置了语言环境,但是即使重新启动后,locale仍然显示POSIX,并且非ASCII字符仍然无法正确呈现。


1
/etc/default/locale由PAM读取。您是否可能禁用了PAM?
Gunnar Hjalmarsson '16

您尝试过以下systemd方法localectl set-locale LANG=C.UTF-8吗?
EdiD

@GunnarHjalmarsson我不会知道。我该如何检查?
MechMK1

@EdiD我尝试过,重新启动但没有任何变化
MechMK1 '16

不确定。PAM应该在全新安装中启用,并且如果您未在中进行任何更改/etc/pam.d,则应该可以使用。但就目前而言,您可能需要创建/etc/profile.d/mylocalesetting.sh并添加该行export LANG=en_US.UTF-8
Gunnar Hjalmarsson,

Answers:


10

我最终要做的是结合了以上技术

我先做了

dpkg-reconfigure locales

然后选择了英语utf8,然后:

localedef -i en_US -c -f UTF-8 en_US.UTF-8

还编辑了 / etc / default / locale ,如下所示:

LANG=en_US.UTF-8
LC_ALL=en_US.UTF-8
LANGUAGE=en_US.UTF-8

重启后,当我输入语言环境时,它看起来像这样:

LANG=en_US.UTF-8
LANGUAGE=en_US.UTF-8
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=en_US.UTF-8

再也没有警告...


8

正如Gunnar Hjalmarsson在评论中提到的,答案的确与PAM有关。通过禁用了PAM sshd_config,尽管老实说我自己不记得这样做。

总结一下:如果/etc/default/locale似乎被忽略,请检查是否启用了PAM。


6

运行以下命令:

locale-gen en_US.UTF-8
dpkg-reconfigure locale
dpkg-reconfigure keyboard-configuration
localedef -i en_US -c -f UTF-8 en_US.UTF-8
reboot
locale

没用 locale仍然显示所有内容的POSIX
MechMK1'5

我认为您已经是运行这些命令的根?我并不想冒犯,只是想确定一下。
Videonauth

嗯,当然咯。没有错误消息或类似内容。
MechMK1'5

1
您的意思是语言环境吗?
realtebo '16

我正在执行此操作,似乎是“ dpkg-reconfigure语言环境”,然后一切正常。
雨果

0

在部署一些新的16.04.5 VM时,我遇到了这个确切的问题,但使用xrdp了SSH。我通过添加以下内容来解决此问题/etc/pam.d/common-session

session required        pam_env.so readenv=1 user_readenv=1 envfile=/etc/default/locale

如果您对登录方法中的其他语言和区域性敏感,则可以将其放在/etc/pam.d/xrdp-sesman(或另一个PAM配置文件)中。这可能就是为什么默认情况下它不存在的原因?默认情况下,在新安装的VM上,这是以下PAM配置:

cron,lightdm *,login,polkit-1,sshd,su和sudo。

希望使用SSH以外的登录方法,可以帮助解决此问题的人。

有没有人知道PAM配置/修改common- *的最佳实践?如果有更好的方法可以解决这个问题,那就更好了。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.