適合串列控制台的 TERM 變數值
要在 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”。