如何让CentOS 7中的控制台支持中文?
我使用了 localectl 命令。以下是结果:
System Locale: LANG=zh_CN.UTF-8
VC Keymap: cn
X11 Layout: cn
这些套装是针对中国人的。但有些文件夹和文件在使用ls命令列出文件夹和文件时却显示为“■■■■”。
答案1
你所看到的
Linux 内核中内置了一个终端仿真器程序。它并不表现为具有打开文件句柄的正在运行的进程。它位于帧缓冲区和输入事件子系统之上,它使用内部内核接口来访问。它向应用程序模式系统呈现为一系列内核虚拟终端设备,/dev/tty1
等等;下面的伪文件/sys
显示活动的 KVT 编号;以及一系列CGA风格的视频缓冲设备/dev/vcsa1
等等。这就是你所雇用的。
该终端仿真器是一个内核模式系统,受到相当严格的资源限制。因此,从历史上看,它从未支持需要大量(内核地址空间)内存的大型字符集。这就是为什么它对这些字符进行“希腊化”。
解决这个问题的方法显然是将终端模拟器移出内核模式。这已被讨论多年。大约十年前我写了一份关于它的白皮书。
当然,您无疑听说过许多 X Window 系统终端仿真程序已经做了。它们是普通的应用程序模式程序,将其字形呈现到由 X 服务器显示的 X 窗口中,并且可以处理大型字符集。所以你在那些终端模拟器中使用中文不会有任何问题。
用户空间虚拟终端
有还然而,终端仿真器程序不使用 X 服务器进行 I/O,而是分层在帧缓冲区和输入事件子系统的(外部)API 之上。它们直接使用帧缓冲区和输入事件子系统,就像内核内置的终端仿真器程序一样,但它们也只是普通的应用程序模式程序,不依赖于内核,因此不受内核的约束。有了这些,你还可以显示中文。确实,其中有几个用户空间虚拟终端程序将其作为一个备受推崇的功能。
他们包括:
- 中康— 用于处理 CJK I/O 的用户空间虚拟终端。它的特殊优势在于处理 ISO 2022 非 UTF 编码;它的特别弱点是 UTF 编码。
- FB术语— 一个用户空间虚拟终端,已经产生了多个分支,包括联合术语。它有一堆CJK输入法插件。
- bogl-bterm — 一个用户空间虚拟终端,已产生诸如尼特姆。
- 中的和
console-terminal-emulator
工具console-fb-realizer
开胃菜— 旨在复制 Linux 和 FreeBSD/PC-BSD 内核虚拟终端的用户空间虚拟终端。根据设计,它不依赖于 X 库。同样按照设计,它只支持 UTF;没有 ISO 2022。(在撰写本答案时)它在 CJK 输入法上仍然非常弱。 - 公里斯康— 与系统紧密相连的用户空间虚拟终端
logind
systemd 中的服务器及其“席位”的概念。
字体
然后你需要中文字体。这有点复杂。
其中一些用户空间虚拟终端程序利用 X 库进行字体处理、键盘映射、CJK 输入法等。它们不是 X 客户端,但它们具有 X 库的依赖项。所以你可以使用 X 字体。
其他人另有安排。
bogl-bterm
有自己特殊的字体格式。一种是使用该工具将 BDF 字体转换为 BOGL 字体bdftobogl
。- nosh
console-fb-realizer
工具使用与新的 FreeBSD 10.1 内核虚拟终端子系统确实如此,因此分享了 FreeBSD 字体操作工具vtfontcvt
用于转换 BDF 字体。我自己使用一些 CJK 字体完成了此操作,并在 nosh 用户空间虚拟终端中显示了一些中文手册页(来自 Debian)。
进一步阅读
答案2
Linux控制台本身不支持显示中文,但是您可以运行一些替代控制台(例如kmscon)来显示中文而无需启动X。
答案3
使用 localectl 命令进行设置。下面是一个例子
localectl status # to display locale settings localectl set-locale LANG=en_GB.utf8 # to set the Language localectl list-locales # to lists locales locale list-keymaps # list keyboard mappings locale set-keymap uk # sets the key map