要在 Linux 上启用串行控制台,可以使用getty
(最常见的是它的变体agetty
)。该二进制文件将初始化TERM变量的值作为参数。
在 Debian 上,使用 Sys V init,默认值为 vt100。使用 systemd,默认值曾经是vt102,现在是vt220。
在玩了一点 QEMU 虚拟机和virt-viewer
命令virsh console
之后,我注意到了一些事情:
- 使用vt100,
ls --color
显示颜色,但vim
语法高亮不起作用 - 使用vt102或vt220,它们都不显示颜色
- 仅将TERM变量设置为linux,同时
ls
使用vim
颜色
所以我猜想独立于实际的“颜色支持”,每个应用程序都会查看TERM变量并采取相应的行动,这将解释上面提到的差异。
阅读Serial Console HOWTO后,我了解到TERM变量的值应取决于将连接到串行端口的物理终端的实际型号,具体取决于其功能。
请注意,根据Lennart Poettering 的博客,TERM应该设置为linux,只有真正的虚拟终端(而不是串行终端)。另一方面,Arch Linux 的 Wiki似乎并不介意(请参阅/etc/inittab
它建议的行)。
所以我的问题是:
在一般情况下,如果TERM变量在连接到功能较弱的终端(如 DEC VT100、VT102 或 VT220)或某些 RS-232 软件终端仿真器(如或)的控制台上设置为linux会发生什么?minicom
termite
更实际地(在我的特定情况下),是否可以在 QEMU VM 上的“虚拟”串行控制台中将TERM变量设置为linux,我将通过virt-viewer
或连接到该控制台virsh console
?
该
TERM
设置告诉应用程序与之通信的终端具有哪些功能,以及如何利用这些功能(通常通过像 ncurses 这样的库)。用简单的英语:它告诉它应该发送什么控制序列(转义序列)以在屏幕上移动光标、更改文本颜色、如何擦除屏幕区域、功能键传输什么序列等。可能缺少这些功能,例如颜色支持。今天使用的大多数终端类型都与“玻璃 ttys”的“祖父”DEC VT100 有关。这就是为什么终端类型大多是可互换的,因此设置错误的类型通常会导致大部分工作设置,但会出现一些故障。
那么,要回答“我应该使用哪个”和“如果我使用错误的设置会发生什么”的问题呢?某些控制序列可能不匹配,即程序发送的光标移动序列与终端仿真器期望的不同。或者缺少颜色支持。(顺便说一句。原来的 VT100 肯定不支持颜色...)正确的设置应该由终端仿真器文档提供,但是尝试看看哪种设置效果最好并没有什么坏处。如果它适合您,可以使用“linux”。