CentOS 7 如何讓控制台支持中文?
如何讓 CentOS 7 中的控制台支持中文?
我使用了 localectl 命令。結果如下:
System Locale: LANG=zh_CN.UTF-8 VC Keymap: cn X11 Layout: cn
套裝是中國人的。但有些文件夾和文件在使用 ls 命令列出文件夾和文件時會顯示“■■■■”。
你所看到的
Linux核心中內置了一個終端仿真器程序。它不會表現為具有打開文件句柄的正在執行的程序。它位於幀緩衝區和輸入事件子系統之上,它使用內部核心介面進行訪問。它以一系列核心虛擬終端設備的形式呈現給應用模式系統,
/dev/tty1
等等;/sys
顯示活動 KVT 編號的偽文件;以及一系列 CGA 風格的影片緩衝設備,/dev/vcsa1
等等。這就是你所僱用的。這個終端仿真器是一個核心模式系統,受到相當嚴重的資源限制。因此,從歷史上看,它從未支持需要大量(核心地址空間)記憶體的大型字元集。這就是為什麼它是“希臘化”這些字元的原因。
對此的解決方案顯然是將終端仿真器移出核心模式。這已經討論了多年。大約十年前,我寫了一篇關於它的白皮書。
當然,您肯定聽說過的許多 X Window System 終端仿真器程序已經可以使用了。它們是普通的應用程序模式程序,將它們的字形渲染到由 X 伺服器顯示的 X 視窗中,並且它們可以處理大型字元集。所以你在那些終端模擬器中對中文沒有問題。
使用者空間虛擬終端
然而,也有終端仿真程序不使用 X 伺服器進行 I/O,而是在幀緩衝區和輸入事件子系統的(外部)API 之上分層。直接使用幀緩衝區和輸入事件子系統,就像核心內置終端仿真程序一樣,但它們也只是普通的應用程序模式程序,不受核心約束,因此不受核心約束。有了這些,你也可以顯示中文。事實上,這些使用者空間虛擬終端程序中的一些都將其作為吹捧的功能。
它們包括:
- zhcon — 一個用於處理 CJK I/O 的使用者空間虛擬終端。它的特殊優勢在於處理 ISO 2022 非 UTF 編碼;它的特別弱點是 UTF 編碼。
- fbterm — 一個使用者空間虛擬終端,產生了包括jfbterm在內的多個分支。它有一堆 CJK 輸入法外掛。
- bogl-bterm — 一個使用者空間虛擬終端,它產生了諸如niterm 之類的分支。
- nosh中的
console-terminal-emulator
和console-fb-realizer
工具——一個使用者空間虛擬終端,旨在複製 Linux 和 FreeBSD/PC-BSD 核心虛擬終端。按照設計,它不依賴於 X 庫。同樣按照設計,它只執行 UTF;沒有 ISO 2022。它(在撰寫此答案時)在 CJK 輸入法上仍然非常薄弱。- kmscon — 一個使用者空間虛擬終端,與
logind
systemd 中的伺服器及其“席位”概念密切相關。字型
然後你需要中文字型。這有點複雜。
其中一些使用者空間虛擬終端程序利用 X 庫進行字型處理、鍵盤映射、CJK 輸入法等。它們不是 X 客戶端,但它們具有來自 X 庫的依賴項。所以你對它們使用 X 字型。
其他人做其他安排。
bogl-bterm
有自己獨特的字型格式。使用該bdftobogl
工具將 BDF 字型轉換為 BOGL 字型。- nosh工具使用與新的 FreeBSD 10.1 核心虛擬終端子系統
console-fb-realizer
相同的“vt”字型,因此共享用於轉換 BDF 字型的 FreeBSD 字型操作工具。vtfontcvt
我自己用一些 CJK 字型完成了這項工作,並在 nosh 使用者空間虛擬終端中顯示了一些中文手冊頁(來自 Debian)。進一步閱讀