我正在阅读手册页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/inittab
,linux-16color
但Linux控制台似乎只显示八种颜色。我认为终端类型linux-16color
可以指定显示十六种颜色,涉及Linux控制台。我也尝试过设置环境变量TERM
,但linux-16color
没有成功。
Linux控制台可以显示十六种颜色吗? Linux控制台是否支持终端类型linux-16color
?
也可以看看
答案1
终端linux-16color
描述使用安慰的闪烁和粗体属性将代码 0-15 映射到控制台能够执行的 16 种颜色。在描述中,这是使用5
与25
和1
与21
中的常数setaf
和setab
您可能会在 console_codes(4) 手册页中注意到这些功能。
您可能会发现使用以下命令更容易查看-f
选项infocmp
:
setab=\E[4
%p1%{8}%m%d
%?
%p1%{7}%>
%t;5
%e
;25
%;
m,
该序列(从上到下阅读)执行以下操作:
- 发送 ASCII 转义符 (the
\E
),后跟[
和4
- 检查第一个参数是否大于 7
- 如果是,则发送
;
(分隔符)和5
(blink
属性) - 如果否,发送
;
2
5
转向blink
离开)
- 如果是,则发送
- 通过发送完成SGR
m
这些属性恰好适用于 VGA 驱动程序,这些驱动程序(通常)不会导致文本闪烁,或使用不同的字体显示粗体文本。相反,它们允许扩展颜色集(当然,以非标准方式)。如果您有不同的显示设备(例如我使用的虚拟机),则这些都不再适用。
设置之后就出现了一个复杂情况:加载支持 Unicode 的字体(即 512 个字形与原始的 256 个字形)的配置会接管用于这 16 种颜色的位之一,因此您实际上只能获得 8 种颜色。这里和那里都提到过例如这个,但自上次更新手册页后引入:
由于上一个示例中使用了 512 字形 LatArCyrHeb-16 字体,除非使用帧缓冲区,否则 Linux 控制台上将不再提供明亮的颜色。如果一个人想要在没有帧缓冲区的情况下获得明亮的颜色,并且可以在没有不属于其语言的字符的情况下生存,那么仍然可以使用特定于语言的 256-glyph 字体,如下所示: