我有一个 Debian 6(64 位)VPS,我似乎无法设置区域设置环境变量 LANG 和 LC_*。 (以下所有内容均为根)。
vps:~# locale -a
C
POSIX
en_US.utf8
nl_NL.utf8
vps:~# 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=
vps:~# cat /etc/default/locale
# File generated by update-locale
LANG=en_US.UTF-8
LC_CTYPE=en_US.UTF-8
LC_COLLATE=POSIX
这应该覆盖通过我的 SSH 客户端提供的区域设置,但默认区域设置不起作用。
.profile、.bashrc、/etc/environment 和 /etc/profile 不包含任何区域设置。我还没有找到这些环境变量的来源任何其他位置。
me:~# grep "LANG" ~/.profile ~/.bashrc /etc/environment /etc/profile
me:~# grep "LC_" ~/.profile ~/.bashrc /etc/environment /etc/profile
me:~#
我的 SSH 客户端设置也没有生效,而在其他 VPS 上却有效。在本地,我的 /etc/ssh/ssh_config 中有:
SendEnv LANG LC_*
在 VPS 上,/etc/ssh/sshd_config 包含:
# Allow client to pass locale environment variables
AcceptEnv LANG LC_*
我不确定变量是否需要生效,但我的 VPS 的 /etc/pam.d/login 包含:
# locale variables are also kept into /etc/default/locale in etch
# reading this file *in addition to /etc/environment* does not hurt
session required pam_env.so readenv=1 envfile=/etc/default/locale
/etc/pam.d/sshd 包含:
# Read environment variables from /etc/environment and
# /etc/security/pam_env.conf.
auth required pam_env.so # [1]
# In Debian 4.0 (etch), locale-related environment variables were moved to
# /etc/default/locale, so read that as well.
auth required pam_env.so envfile=/etc/default/locale
(我的/etc/security/pam_env.conf
仅包含注释选项)
因此,似乎有些东西不允许我的 /etc/default/locale 或我的 SSH 客户端的区域设置生效,因此它默认为 POSIX(或者某些东西显式强制使用 POSIX)。有什么线索可能会干扰吗?或者如何找出它是什么?
我可以export LC_CTYPE=en_US.UTF-8
在我的 .bashrc 中执行其他操作,这确实有效。然而,我试图理解这种行为,它与我正在使用的其他 Debian(6 或 7)安装上的行为不同。
编辑:更多细节:
- 我重启了系统,没有效果;
- /etc/ssh/sshd_config 有
UsePAM yes
; - 我也尝试过
en_US.utf8
在 中使用作为替代名称/etc/default/locale
。
答案1
您应该验证 sshd 配置文件中的 [PermitUserEnvironment] 也设置为 yes。我不知道默认值是什么。