有没有办法改变控制台/虚拟终端中的所有可用颜色?
我所说的控制台是指按 CTRL + ALT + F1 后得到的结果,而不是 xterm 或 urxvt 之类的东西。所以,我想这意味着改变
我可以使用转义序列更改 8 种颜色,如下所示:
echo -en "\e]PY######"
其中 Y 是颜色的数字 ID(0 到 7),###### 是十六进制颜色值。
我的最终目标是将 Solarized 配色方案移植到控制台,因为无论我是在控制台还是 X 中,我都希望看起来一样 vim。
对此有何建议?
xterm 中的 htop:
xterm 中的 htop,日光颜色
应用 8 种颜色后,控制台中的 htop:
htop 在控制台中,应用 8 种颜色后我可以
答案1
TTY 帧缓冲区控制台无法在不进行内核黑客攻击的情况下拥有超过 8-16 种颜色,请参阅以下引用:“虽然 Linux 帧缓冲区支持 256(或更多)颜色,但 Linux 控制台驱动程序不支持;因此,控制台应用程序仍然Linux 控制台上的颜色限制为 16 种,无论是否有帧缓冲区。”
所以颜色不能超过 16 或 8 种。有教程如何使用 ~/.bashrc 中描述的相同命令更改帧缓冲区终端(又名 ctrl+alt+1)的颜色:TTY 教程中的颜色
答案2
在控制台中尝试这个 bash 函数。恰好,它在 X 终端中不起作用(我认为是因为选项卡)。特别检查最后使用的三个文件,即
/sys/module/vt/parameters/default_red
/sys/module/vt/parameters/default_grn
/sys/module/vt/parameters/default_blu
clr () {
clear # GFX bug otherwise
setterm -regtabs 4
Color_names="bla red gre yel blu mag cya whi"
Color_arr=($Color_names)
tput setaf 4
tput setab 7
echo -n " normal "
tput sgr0
echo -n " "
tput setaf 7
tput setab 4
echo " bright "
tput sgr0
for cmd in sgr0 bold
do
tput $cmd
for m in 0 1 2 3 4 5 6 7
do
tput setaf $m
echo -n ${Color_arr[$m]}" "
done
done
echo
tput sgr0
cat /sys/module/vt/parameters/default_red \
/sys/module/vt/parameters/default_grn \
/sys/module/vt/parameters/default_blu | sed s/,0/", "/g | \
sed s/^0/" "/g | \
tr "," "\t"
}
编辑回应评论
例如,将绿色文件 ( sys/module/vt/parameters/default_grn
) 中的第二个数字更改为170
- 这将使第二种颜色(索引为 1)的绿色与红色一样多,并且没有蓝色(至少在我的情况下,因为我在 中具有相应的数字default_red
170
,并0
在default_blu
)中。
现在,输入tput setaf 1; echo hi
.在这里,您将前景色设置为索引为 1 的颜色(您更改的颜色),然后打印它。 (请注意用冒号分隔命令的单行符,否则您的提示可能会重置tput
之间的命令。)
如果它看起来与往常一样,请尝试echo -n '\033]R'
然后tput
再次该行。现在,两个都“hi”应该是黄色的。
如果你让它工作(或不工作),请告诉我。