ssh 從 Windows PuTTY 到 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)
當我使用
ssh
來自 Git Bash 的命令時也會發生同樣的情況。當我使用 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 之外的所有變數都已設置 - 這正常嗎?
LC_CTYPE 具有奇怪的“連接”值
除 LC_CTYPE 外,所有值都有引號
警告類似但也抱怨 LC_ALL
我試圖通過
~/.profile
在伺服器端編輯來修復它,方法是附加:export LANG=en_GB.UTF-8 export LC_ALL=en_GB.UTF-8
現在,重新登錄後,區域設置似乎顯示了合理的值,並且沒有來自 locale 命令的警告:
$ 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 終端)
有任何想法嗎?
解開,謎底結束。問題出在文件中
/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 論壇上得到了很好的幫助。
(我無法評論。)
Linux 中的 /etc/ssh/sshd_config 是以下行嗎?
AcceptEnv LANG LC_*