Ssh

以 UTF-8 SSH 到 FreeBSD

  • December 2, 2018

我正在嘗試使用 Mintty 從我的 Windows 機器 ssh 到 FreeBSD-11.2-Release,但是當我將 LC_ALL 設置為 en_US.UTF-8 並嘗試輸入/粘貼非 ASCII 字元時,連接已關閉。

我正在使用 Cygwin,也嘗試過 Qterminal 和 Terminator。

FreeBSD 在 11.2-Release 版本中是否存在 UTF-8 字元問題?或者這只是 Windows 特定的(我的意思是 macOS 或 Linux 使用者對此沒有問題)?

注意:我沒有在 FreeBSD 機器上安裝任何視窗系統。

您要求設置LC_ALL,但我不確定您是否正確執行。FreeBSD 手冊: 22.2實際上涵蓋了所有內容。使用本地化

我強烈建議您使用“登錄類方法”(login.conf)而不是“Shell 啟動文件方法”(.profile),因為它在系統和 shell 之間更加一致。

當人們說他們修改了與語言相關的設置時,他們經常忘記兩件事:

  1. 更改/etc/login.conf(系統範圍)或~/.login.conf(使用者)時,您需要執行cap_mkdb才能產生任何效果!
  2. 並且在測試時記得開始一個新的會話!

首先是通過執行命令 locale 來驗證您的設置。在一個普通的 FreeBSD 系統上,它會告訴你這個:

$ locale
LANG=
LC_CTYPE="C"
LC_COLLATE="C"
LC_TIME="C"
LC_NUMERIC="C"
LC_MONETARY="C"
LC_MESSAGES="C"
LC_ALL=

使用這些設置,您將在最常見的終端上遇到 Unicode 問題。我正在使用 PuTTY,但無法將以下測試粘貼到終端中:

ÆØÅ жз ઑ ᱵ

這是因為 FreeBSD 的預設設置是不使用 unicode。此答案已針對 11.2 進行了測試,但將來從 13 起,預設值為“C.UTF8”,無需更改。但是,在原版安裝中,您可以通過將使用者設置為使用“俄語”來進行非常快速的檢查。原因是俄語是開箱即用的唯一語言(在 中/etc/login.conf),它使用的是 unicode。

pw usermod johndoe -L russian

現在使用“johndoe”帳戶(無論您的使用者名為什麼)登錄到一個**新會話。**您現在可以將 unicode(來自上面的測試)粘貼到 shell 中。驗證如何使用locale

$ locale
LANG=ru_RU.UTF-8
LC_CTYPE="ru_RU.UTF-8"
LC_COLLATE="ru_RU.UTF-8"
LC_TIME="ru_RU.UTF-8"
LC_NUMERIC="ru_RU.UTF-8"
LC_MONETARY="ru_RU.UTF-8"
LC_MESSAGES="ru_RU.UTF-8"
LC_ALL=

正如我現在已經驗證了基本的 unicode 確實有效 - 然後我可以開始根據自己的喜好進行設置。由於我是丹麥人,我將執行以下簡單步驟:

1.添加語言設置

對於我需要的每種語言,我將添加一個部分/etc/login.conf

danish|Danish Users Accounts:\
       :charset=UTF-8:\
       :lang=da_DK.UTF-8:\
       :tc=default:

2.更新數據庫

每當您編輯源 login.conf 時,都需要更新數據庫。

cap_mkdb /etc/login.conf

3.設置使用者語言

我通常pw用來管理我的使用者。現在我只需要在創建或修改使用者時指定語言。

pw useradd janedoe -L danish

**提示:**我個人的偏好是不要更改系統範圍的“預設”,而是保持預設。然後我為系統帳戶設置語言,例如“postgres”。如果您的語言設置未涵蓋系統帳戶所需的非常具體的設置,那麼我將為該帳戶創建一個單獨的“語言”(登錄類)/etc/login.conf。這使事情保持整潔。

**提示2:**上面顯示瞭如何根據使用者設置類。如果您想要係統範圍的更改,您可以更改 login.conf 中的“預設”類。

**PuTTY 提示:**您的終端自然也需要支持 UTF-8。在 PuTTY 中,這是在設置中:Window ⮕ Translation。我的設置為“UTF-8”。如果您在 CJK 區域,您可能需要選中“Treat CJK ambiguous characters as wide”。西里爾文使用者通常喜歡“Caps Lock 充當西里爾文開關”。

引用自:https://unix.stackexchange.com/questions/484832