无法将亮度应用于终端的背景颜色

Mar*_*ter 8 bash terminal-emulator terminal

我的终端模拟器中的颜色有问题。我LXTerminal用作我的终端模拟器和LXDE我的桌面环境。

以下命令应该在灰色背景上打印红色文本:

printf "\n\033[1;31;40m"hello"\033[00m\n\n"
Run Code Online (Sandbox Code Playgroud)

但这不起作用。缺少灰色背景(红色文本可以)。在我的旧机器 ( Gnome/Gnome Terminal) 上一切正常

我已经尝试安装其他几个终端模拟器,但问题仍然存在。我什至不确定这个问题是否与终端模拟器有关,还是其他什么。在控制台 (CTRL+ALT+F1) 中,背景灰色在任何一台机器上都不起作用)

此问题仅限于灰色背景。所有其他颜色都可以正常工作,例如以下在绿色背景上打印红色文本。

printf "\n\033[1;31;42m"hello"\033[00m\n\n"
Run Code Online (Sandbox Code Playgroud)

我将不胜感激任何帮助。我什至不知道从哪里开始故障排除。

Mat*_*att 11

每个终端仿真器都支持八种标准的 ANSI 颜色。大多数终端仿真器还具有标准 ANSI 颜色的八种明亮变体。

然而,转义码映射到的实际颜色值并没有标准化,实际上它们在终端仿真器之间通常略有不同。因此,如果您printf "\e[31;47mTest\n"要在白色背景上打印红色文本,根据您使用的终端仿真器,您获得的实际红色和白色色调可能会有所不同。

所以这部分解释了这个问题:颜色值不是标准的,并且LXTerminal它的调色板可能有你不习惯的不同默认值。如果您在设置中环顾四周,通常可以将配色方案配置为您喜欢的任何颜色。

您面临的另一个问题是,bold 属性的实际作用也没有标准化。有三种可能:可以使字体加粗,可以使前景色更亮,或者既可以使前景色更亮,又可以使字体变粗。

同样,这里的默认行为因终端模拟器而异,如果您能找到正确的设置,通常可以更改它。Grep 用于提及“大胆”或“明亮”的内容。

如果您想使用明亮的颜色,那么您可以使用所谓的 aixterm 颜色转义码而不是粗体。这些不是标准的,但我知道的每个现代终端仿真器都支持它们。与粗体不同,它们总是使用明亮的颜色,而且它们可以用来显示明亮的背景颜色。

因此,举例来说,如果你想在明亮的白色背景上打印鲜红的文字,你可以这样做:printf "\e[91;107mTest\n"

作为参考,这是所有颜色转义码的表格:

|    ANSI |    ANSI |    ANSI    |                | Aixterm | Aixterm 
|   Color | FG Code | BG Code    | Bright Color   | FG Code | BG Code 
+---------+---------+--------    +----------------+---------+-------- 
|   Black |      30 |      40    |   Bright Black |      90 |     100 
|     Red |      31 |      41    |     Bright Red |      91 |     101 
|   Green |      32 |      42    |   Bright Green |      92 |     102 
|  Yellow |      33 |      43    |  Bright Yellow |      93 |     103 
|    Blue |      34 |      44    |    Bright Blue |      94 |     104 
| Magenta |      35 |      45    | Bright Magenta |      95 |     105 
|    Cyan |      36 |      46    |    Bright Cyan |      96 |     106 
|   White |      37 |      47    |   Bright White |      97 |     107 
Run Code Online (Sandbox Code Playgroud)

  • 实际上 aixterm 是 SGR 90-97 和 100-107。**bold** 的明亮背景来自其他系统(不是 Linux 的原创,但在那里使用)。 (2认同)

gol*_*cks 5

1开头的属性1;31;40打开“粗体”(又名“明亮”)模式,但某些终端仅将其应用于前景色。我不知道是什么原因(更改 $TERM 变量没有区别),因为它们确实支持前景中的 16 种颜色。1 0(来自40:4 = 背景,0 = 颜色)实际上是黑色,但“亮黑色”是灰色。这里有两个解决方案:

  • 颜色 7(白色)可能会变成灰色,而不是白色(对于真正的白色,您需要“亮白色”,这意味着您实际上不能拥有的背景是白色)。

  • 如果需要,您应该可以在 LXDE 中使用 gnome 终端。只需安装它并开始gnome-terminal(我相信这是它的命令名称)。然后你必须配置任何启动器来使用它而不是 lx 终端。

1这是我的猜测:请注意,设置粗体会将亮度应用于前景色添加粗体强调。因此,您不能在不应用粗体的情况下使用明亮的前景色。大概是在单色终端很常见的时候,只是简单地将粗体设置为强调,例如:\\033[1mBlah blah\\033[0m很常见——实际上这仍然有效,但它也会使您的前景色变亮。如果我们认为这也使背景变亮是不可取的(因为它应该是粗体的),那么我们将确保实现没有这样做。那好吧。

  • 问题并非特定于 LXTerminal;事实上,`gnome-terminal` 可能是*唯一* 的终端来做你想做的事——我已经成为 linux 用户大约 15 年了,因为提示,我很早就了解了 ANSI 序列;一直都是这样。通过研究官方的 ANSI 规范和/或浏览源代码,我可能能够果断地找出原因,但这需要一段非常不确定的时间;) 浏览网页后我没有找到任何希望,所以**你的是个好问题** 但是已经知道的人很可能会在第二天左右出现...... (3认同)