无法永久更改 16.04 服务器上的区域设置

无法永久更改 16.04 服务器上的区域设置

我已经设置了一个全新的 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

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

答案1

我最终做的是上述技术的组合

我已经做了

dpkg-reconfigure locales

并选择英语,utf8,然后:

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

也编辑 /etc/默认/区域设置 看起来像:

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

并且不再有警告...

答案2

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

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

答案3

运行以下命令:

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

答案4

在部署一些新的 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-* 的最佳实践吗?如果有更好的方法来实现这一点,那就最好把它记下来。

相关内容