Linux

是否可以在登錄前發送顏色程式碼轉義序列?

  • July 6, 2016

我正在嘗試為控制台著色,並且在 root 的以下內容中取得了成功.bash_profile

echo -en "\e]P7000000"
echo -en "\e]P0F0F0F0"
clear

問題是,這顯然只會在 root 使用者第一次登錄時啟動。有沒有辦法mingetty自動設置正確的控制台顏色?建議的解決方案應該適用於 RHEL6 和 RHEL7(即 systemd),因為這就是我的大多數係統。請注意,這是關於為正常控制台著色,而不是終端仿真器或 SSH(前者不相關,我同意後者被視為使用者配置問題)。

您可以按照評論中的建議將文字轉義字元放入/etc/issue(R​​ed Hat 有時會這樣做)。在快速測試中,這是可行的,但只會為text 著色。背景是無色的。在 vi 中,文本可能看起來像

^[]P7000000^[]P0F0F0F0\S
Kernel \r on an \m

結果是這樣的:

CentOS 7 控制台視窗截圖

如果您清除螢幕,則顏色會填充視窗,例如,

^[]P7000000^[]P0F0F0F0^[[2J\S
Kernel \r on an \m

其中^[是 ASCIIescape字元,在 vi 中使用control``V後跟轉義字元插入。

修改/etc/issue是比較安全的,只要ssh在出錯的時候能進機器修就好了。 mingetty在登錄前列印該文件;ssh不去那裡。

但是,您可能也想以/etc/motd相同的方式進行修改(畢竟,也是列印出來的)。但這會帶來一個問題。在您的腳本中,一旦您替換\e文字ASCII 轉義字元

echo -en "\e]P7000000"
echo -en "\e]P0F0F0F0"

你會得到

escape``]P7000000

escape``]P0F0F0F0

轉義序列的標準 (ECMA-48) 表示escape``]作業系統命令開頭,並以字元串 terminator 結尾。Linux 控制台的實現中沒有。當您嘗試/etc/motd使用那些不正確終止的轉義序列使用xterm. 資源中有一個解決方法(至少對於 xterm)brokenLinuxOSC

進一步閱讀:

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