Linux

ssh 從 Windows PuTTY 到 Linux 時的奇怪設置區域設置行為

  • March 11, 2019

拜託,

自從我半年前安裝伺服器以來,有人可以解釋一下這個奇怪的與語言環境相關的警告,這讓我很惱火。它是“無法將 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 之外的所有變數都已設置 - 這正常嗎?

  1. LC_CTYPE 具有奇怪的“連接”值

  2. 除 LC_CTYPE 外,所有值都有引號

  3. 警告類似但也抱怨 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 終端)

有任何想法嗎?

登錄後顯示 LC_CTYPE: cannot change locale 警告的 PuTTY

登錄後在 Git Bash 中的 ssh 顯示 LC_CTYPE: cannot change locale 警告

解開,謎底結束。問題出在文件中/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_*

引用自:https://serverfault.com/questions/956564