Linux控制台可以显示16种颜色吗?

Linux控制台可以显示16种颜色吗?

我正在阅读手册页terminfo,我想知道Linux控制台是否可以使用terminal typelinux-16color而不是terminal type linux

prompt% infocmp linux linux-16color
comparing linux to linux-16color.
comparing booleans.
comparing numbers.
colors: 8, 16.
ncv: 18, 42.
pairs: 64, 256.
comparing strings.
setab: '\E[4%p1%dm', '\E[4%p1%{8}%m%d%?%p1%{7}%>%t;5%e;25%;m'.
setaf: '\E[3%p1%dm', '\E[3%p1%{8}%m%d%?%p1%{7}%>%t;1%e;21%;m'.

我将终端类型替换linux/etc/inittablinux-16color但Linux控制台似乎只显示八种颜色。我认为终端类型linux-16color可以指定显示十六种颜色,涉及Linux控制台。我也尝试过设置环境变量TERM,但linux-16color没有成功。

Linux控制台可以显示十六种颜色吗? Linux控制台是否支持终端类型linux-16color

也可以看看

答案1

终端linux-16color描述使用安慰的闪烁和粗体属性将代码 0-15 映射到控制台能够执行的 16 种颜色。在描述中,这是使用525121中的常数setafsetab您可能会在 console_codes(4) 手册页中注意到这些功能。

您可能会发现使用以下命令更容易查看-f选项infocmp

    setab=\E[4 
            %p1%{8}%m%d 
            %? 
                    %p1%{7}%> 
                    %t;5 
            %e 
                    ;25 
            %; 
            m,

该序列(从上到下阅读)执行以下操作:

  • 发送 ASCII 转义符 (the \E),后跟[4
  • 检查第一个参数是否大于 7
    • 如果是,则发送;(分隔符)和5blink属性)
    • 如果否,发送; 2 5转向blink离开)
  • 通过发送完成SGRm

这些属性恰好适用于 VGA 驱动程序,这些驱动程序(通常)不会导致文本闪烁,或使用不同的字体显示粗体文本。相反,它们允许扩展颜色集(当然,以非标准方式)。如果您有不同的显示设备(例如我使用的虚拟机),则这些都不再适用。

设置之后就出现了一个复杂情况:加载支持 Unicode 的字体(即 512 个字形与原始的 256 个字形)的配置会接管用于这 16 种颜色的位之一,因此您实际上只能获得 8 种颜色。这里和那里都提到过例如这个,但自上次更新手册页后引入:

由于上一个示例中使用了 512 字形 LatArCyrHeb-16 字体,除非使用帧缓冲区,否则 Linux 控制台上将不再提供明亮的颜色。如果一个人想要在没有帧缓冲区的情况下获得明亮的颜色,并且可以在没有不属于其语言的字符的情况下生存,那么仍然可以使用特定于语言的 256-glyph 字体,如下所示:

相关内容