是否可以在登录前发送颜色代码转义序列?

是否可以在登录前发送颜色代码转义序列?

我正在尝试对控制台进行着色,并且在 root 中取得了以下成功.bash_profile

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

问题是,这显然只会在 root 用户第一次登录时启动。有没有办法mingetty自动设置正确的控制台颜色?建议的解决方案应该适用于 RHEL6 和 RHEL7(即 systemd),因为我的大多数系统都是如此。请注意,这是关于对常规控制台进行着色,而不是对终端仿真器或 SSH 进行着色(前者不相关,我同意后者被视为用户配置问题)。

答案1

你可以把文字按照评论中的建议将字符转义为/etc/issue(红帽有时会这样做)。经过快速测试,这可行,但只能为文本。背景是无色的。在 vi 中,文本可能看起来像

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

结果是这样的:

CentOS 7 控制台窗口的屏幕截图

如果清除屏幕,则颜色会填充窗口,例如,

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

其中^[是 ASCIIescape字符,在 vi 中使用controlV后跟转义字符插入。

修改/etc/issue是比较安全的,只要ssh出错时可以进机修复即可。 mingetty在登录之前打印该文件;ssh不去那里。

但是,您可能也想以/etc/motd相同的方式进行修改(毕竟,也被打印)。但这带来了一个问题。在你的脚本中,一旦你替换\e文字ASCII 转义字符

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

你会得到

escape]P7000000
escape]P0F0F0F0

转义序列标准 (ECMA-48) 规定,escape]开始一个操作系统命令这将以字符串终止符。 Linux 控制台的实现中没有。当尝试/etc/motd使用 .ssh 来打印那些不正确终止的转义序列时,您可能会因与 ssh 连接而出现有趣的(令人困惑的)终端锁定xterm。资源中有一个解决方法(至少对于 xterm)brokenLinuxOSC

进一步阅读:

相关内容