从 Windows PuTTY ssh 到 Linux 时设置语言环境的行为很奇怪

从 Windows PuTTY ssh 到 Linux 时设置语言环境的行为很奇怪

请问,
有人能解释一下这个奇怪的与语言环境相关的警告吗?自从我半年前安装服务器以来,它就一直困扰着我。它是“无法将 LC_CTYPE 设置为默认语言环境”的变体,这似乎是一个非常常见的问题,但我的问题有点奇怪,与我之前发现的任何报告的情况都不匹配。

当我使用 Windows 上的 PuTTY 登录到我的 Linux 服务器后,立即打印此警告。

-bash: warning: setlocale: LC_CTYPE: cannot change locale (en_GB.UTF-8,LANG=en_US.UTF-8): No such file or directory
-bash: warning: setlocale: LC_CTYPE: cannot change locale (en_GB.UTF-8,LANG=en_US.UTF-8)

当我使用 Git Bash 中的命令时也会发生同样的情况ssh。当我使用 VNC 登录并在 KDE 中打开 Konsole 时,Bash 打开时没有任何这些警告。

我的情况的独特之处在于它尝试设置 LC_CTYPE: 的值en_GB.UTF-8,LANG=en_US.UTF-8。它看起来像两个连接的字符串。这是怎么发生的!?

这是服务器端的原始输出

$ locale
locale: Cannot set LC_CTYPE to default locale: No such file or directory
locale: Cannot set LC_ALL to default locale: No such file or directory
LANG=en_GB.UTF-8
LC_CTYPE=en_GB.UTF-8,LANG=en_US.UTF-8
LC_NUMERIC="en_GB.UTF-8"
LC_TIME="en_GB.UTF-8"
LC_COLLATE="en_GB.UTF-8"
...
LC_IDENTIFICATION="en_GB.UTF-8"
LC_ALL=

请注意:
1) 除 LC_ALL 外,所有变量均已设置 - 这是正常的吗?
2) LC_CTYPE 具有奇怪的“连接”值
3) 除 LC_CTYPE 外,所有值均带有引号
4) 警告类似,但也抱怨 LC_ALL

我尝试通过~/.profile在服务器端编辑来修复此问题,方法是附加以下内容:

export LANG=en_GB.UTF-8
export LC_ALL=en_GB.UTF-8

现在,重新登录后,语言环境似乎显示合理的值,并且没有来自语言环境命令的警告:

$ locale
LANG=en_GB.UTF-8
LC_CTYPE="en_GB.UTF-8"
LC_NUMERIC="en_GB.UTF-8"
LC_TIME="en_GB.UTF-8"
LC_COLLATE="en_GB.UTF-8"
...
LC_IDENTIFICATION="en_GB.UTF-8"
LC_ALL=en_GB.UTF-8

我是否应该担心某些值周围没有引号?

但是登录警告仍然存在,仍然en_GB.UTF8,LANG=en_US.UTF-8从某处拉取:

-bash: warning: setlocale: LC_CTYPE: cannot change locale (en_GB.UTF8,LANG=en_US.UTF-8): No such file or directory
-bash: warning: setlocale: LC_CTYPE: cannot change locale (en_GB.UTF8,LANG=en_US.UTF-8)

Linux 服务器:“openSUSE Leap 15.0”
Windows 客户端 1:PuTTY 0.70
Windows 客户端 2:Git Bash 2.21.0 (MinTTY 终端)

有任何想法吗?

PuTTY 登录后立即显示 LC_CTYPE:无法更改语言环境警告
登录后立即在 Git Bash 中 ssh 显示 LC_CTYPE:无法更改语言环境警告

答案1

解决了,谜团解开了。问题出在文件中/etc/locale.conf。它只有一行奇怪的代码:

LC_CTYPE=en_GB.UTF-8,LANG=en_US.UTF-8

当我将其改为:

LC_CTYPE=en_GB.UTF-8
LANG=en_US.UTF-8

..警告消失了!

看起来像是 openSUSE 错误;很可能是某个系统升级搞砸了这个文件,将行尾变成了逗号。我得到了很好的帮助openSUSE 论坛

答案2

(我无法发表评论。)

Linux 中的 /etc/ssh/sshd_config 是否有下面一行?

AcceptEnv LANG LC_*

相关内容