cacamailg Asked: 2025-04-14 03:32:44 +0800 CST2025-04-14 03:32:44 +0800 CST 2025-04-14 03:32:44 +0800 CST rxvt-unicode 和 xterm 在 journalctl 中显示不同的黄色 772 最近,我发现一件奇怪的事情。如果我运行(左)和(右)sudo journalctl -f -u ModemManager中的命令,黄色的警告信息并没有出现。rxvt-unicodextermrxvt-unicode 两个终端都有TERM=xterm-256color,而且我只在黄色中注意到了这个问题,因为两个终端上都出现了红色。 我尝试了不同的转义序列,但无法检测到问题。 colors 1 个回答 Voted Best Answer Stéphane Chazelas 2025-04-14T13:24:51+08:002025-04-14T13:24:51+08:00 这看起来是较新版本中出现的问题,systemd该提交首次包含在版本 257 中。 journalctl对转义序列进行硬编码来设置颜色,而不是查询 terminfo 数据库,并且在提交中,他们改变了: #define ANSI_HIGHLIGHT_KHAKI3 "\x1B[0;1;38;5;185m" 这与 xterm 和 rxvt 的 terminfo 返回的转义序列相匹配,用于将前景色设置为颜色 185: $ TERM=xterm-256color tput setaf 185 | sed -n l \033[38;5;185m$ $ TERM=rxvt-256color tput setaf 185 | sed -n l \033[38;5;185m$ (除了在使用 重置所有 SGR 属性后,它还会以 变为粗体)为:10 #define ANSI_HIGHLIGHT_KHAKI3 "\x1B[0;1;38:5:185m" (另请注意#define ANSI_HIGHLIGHT_YELLOW ANSI_HIGHLIGHT_KHAKI3 /* Replacement yellow that is more legible */以下内容)。 但: printf '\33[0;1;38:5:185mX\33[m\n' 输出淡黄色(或至少基于 vte 的终端、konsole、kitty 或 Eterm),但从 9.31 版开始,不再X如此。xtermrxvt-unicode 根据xterm 页面上关于此问题的内容,根据ITU T.416 (ISO-8613-6)(您可以花费 199 瑞士法郎获得;很少有开源终端开发人员会看到副本),使用冒号是正确的方法,但最初使用 xterm;代替,这可能就是为什么所有其他终端仿真器也支持它,而像 rxvt 这样的一些终端仿真器仍然不支持冒号。 红色不受影响,因为它保持不变: #define ANSI_HIGHLIGHT_RED "\x1B[0;1;31m" 它不使用 256 色调色板。 作为一种解决方法,您可以执行以下操作: export SYSTEMD_COLORS=16 然后journalctl将切换到 16 色黄色(使用\e[0;1;33m序列),如果您的终端配置正确,它甚至可能比 KAKI3 颜色更清晰,并且至少应该在大多数终端仿真器(包括xterm和)中可配置rxvt-unicode。
这看起来是较新版本中出现的问题,
systemd
该提交首次包含在版本 257 中。journalctl
对转义序列进行硬编码来设置颜色,而不是查询 terminfo 数据库,并且在提交中,他们改变了:这与 xterm 和 rxvt 的 terminfo 返回的转义序列相匹配,用于将前景色设置为颜色 185:
(除了在使用 重置所有 SGR 属性后,它还会以 变为粗体)为:
1
0
(另请注意
#define ANSI_HIGHLIGHT_YELLOW ANSI_HIGHLIGHT_KHAKI3 /* Replacement yellow that is more legible */
以下内容)。但:
输出淡黄色(或至少基于 vte 的终端、konsole、kitty 或 Eterm),但从 9.31 版开始,不再
X
如此。xterm
rxvt-unicode
根据xterm 页面上关于此问题的内容,根据ITU T.416 (ISO-8613-6)(您可以花费 199 瑞士法郎获得;很少有开源终端开发人员会看到副本),使用冒号是正确的方法,但最初使用 xterm
;
代替,这可能就是为什么所有其他终端仿真器也支持它,而像 rxvt 这样的一些终端仿真器仍然不支持冒号。红色不受影响,因为它保持不变:
它不使用 256 色调色板。
作为一种解决方法,您可以执行以下操作:
然后
journalctl
将切换到 16 色黄色(使用\e[0;1;33m
序列),如果您的终端配置正确,它甚至可能比 KAKI3 颜色更清晰,并且至少应该在大多数终端仿真器(包括xterm
和)中可配置rxvt-unicode
。