如何设置Linux控制台屏幕的背景颜色?

如何设置Linux控制台屏幕的背景颜色?

笔记:我重新设计了这个问题以澄清问题。这是一个琐碎的问题,可以分为几个部分来回答,因为该问题有多个属性。

不幸的是,当提问者理解(知道)答案的某些部分以及问题的结构时,问题可能会被修改。

因此,这个问题是从与原来不同的角度提出的。

如何使用 shell 实用程序更改 Linux 控制台的颜色设置? 如何使用 shell 实用程序更改终​​端仿真器的颜色设置?

本来,我想在执行shell脚本期间更改Linux控制台的背景颜色。以下提议如我所愿。

#!/bin/sh

# set the background color of the terminal
tput setab 6
clear

printf "%s\n" 'background: cyan'

# do some tasks 
cd /usr/src/initramfs
pwd
ls -l

# the background of the shell output is cyan

尽管如此,有人可能会遇到一些故障(或困难)。

例如,如果未清除屏幕,则在 shell 脚本执行期间,背景颜色仅应用于文本输出。如果使用命令tput setab 6行提交命令并且未清除屏幕,则背景颜色仅应用于输出文本的一小部分。如果在命令行上提交命令tput setab 6并且清除屏幕,则背景颜色将应用于全屏,但只会持续到提交另一个命令为止。 [...]

1背景颜色

答案1

在 Linux 虚拟终端(“控制台”)上:

要将背景设置为颜色 1(红色):

printf %b '\e[41m' '\e[8]' '\e[H\e[J'

第一个转义 ( setab) 将背景设置为颜色 1,第二个转义将当前前景-背景对定义为默认,第三个 ( clear) 清除屏幕。

从现在开始,“红色”将成为默认背景:

printf %b 'World\e[42mWide\e[mWeb\n'

setab 2请注意,使用( )将背景设置为绿色以及随后使用( )\e[42清除属性不会擦除我们的设置。sgr0\e[m

或者,您可以通过“set Palette”(又名initc=“initialize_color”)转义重新定义颜色 0(默认背景,黑色)的含义:

printf %b '\e[40m' '\e[8]' # set default background to color 0 (black)
printf %b '\e]P0ff0000'    # redefine color 0 as 'red'

后者采用 形式的参数nRRGGBB,其中n是颜色编号,RRGGBB是定义颜色的十六进制三元组。

这种逃脱也得到了支持油灰

有关这些函数及其他函数的说明,请查看 console_codes(4) 和 terminfo(5) 联机帮助页。

我也无法:

a) 更改屏幕的背景颜色,而不用擦除屏幕上的所有内容clear

b) 强制它更新屏幕的非字符边距,而无需使用 Control-Alt-Fn 在虚拟终端之间来回切换。

在类似 xterm 的终端模拟器上:

这会将背景设置为浅绿色没有必须清除屏幕:

printf %b '\e]11;#ccffcc\a'

它也适用于mltermrxvt、等gnome-terminalkonsole

另一种形式\e]11;rgb:cc/ff/cc\a(取自这里)不支持konsole(使用 12.16.0 版本进行测试)。

这会不是tmux在或内工作screen

所有的xterm越狱事件都被记录在案ctlseqs.txt来自其源代码的文件。

笔记:

一些转义符(例如\e[8]\e]11;...\a)不包含在 terminfo 中,tput根本无法使用,而其他转义符(例如initc)则太尴尬而无法以干净的方式使用。

terminfo 数据库的 grepable 版本可以通过如下命令获得:find /usr/share/terminfo -type f -printf '%f\n' | xargs -n1 infocmp -0 -A /usr/share/terminfo

相关内容