有 256 种颜色的 TTY 吗?

有 256 种颜色的 TTY 吗?

使用 URxvt 和 xterm,可以使用支持 256 种颜色(而不是仅支持 8 种颜色)的虚拟终端。由于我的 Intel GMA 显卡得到了 KMS 帧缓冲驱动程序的良好支持,因此我专门在 TTY 上工作。不幸的是,它仅支持 8 种颜色,尽管使用 MPlayer(-vo fbdev/fbdev2)和其他帧缓冲工具可以解决更多问题。有没有办法告诉 TTY 使用超过 8 种颜色?

答案1

既然我确定了事情,我正在修改我的答案。

认为 ANSI 序列是通过 BIOS 或内核之外的其他方式处理的是错误的;事实上,它们是在内核中处理的。多亏 LinuxNewbies IRC 频道上的 hnaz_,我才找到了我之前错过的内容:drivers/char/vt.c实现虚拟终端驱动程序使用的 Digital Equipment VT102 终端的模拟。

所以......作为一个明确的答案,在审查了处理虚拟终端转义序列的源代码之后:如果您希望虚拟终端支持 256 种颜色,则必须在扩展解析转义序列的代码以处理更广泛的颜色规范之后构建自己的内核。

该函数名为 csi_m()。这些更改必须类似于扩展基于 X 的终端仿真器以处理指定更丰富颜色代码的转义序列的更改。可能还需要进行其他更改,但这是您应该开始的地方。

答案2

您的 256 色 RXVT/xterm/URXVT/等由 terminfo 和变量设置定义TERM。在大多数 Linux 发行版中,您的虚拟终端在 中定义/etc/inittab,并使用默认终端类型来定义终端可以使用的颜色数量。

有没有办法告诉 TTY 使用八种以上的颜色?

是的。

  • 确保你的帧缓冲区正在使用正确的分辨率/位深度。尝试添加vga=773到内核选项,例如,获取 1024x768 和 256 色(8 位色深)。

  • 设置不同的 TERM(例如export TERM=foo)。您需要尝试找到正确的 TERM。如果您找到一个有效的 TERM,您可以修改 TERM,/etc/inittab以便您的虚拟终端默认运行它(请参阅下一节)。

  • 本文讨论了可能对你有用的其他选项。它建议青云(青云不是盖蒂)作为 getty 的替代品,如果切换 TERM 变量不是一种选择,它可能会给你你所寻找的东西。

  • 说到 getty 替换,我发誓我曾经GNU screen在某个地方看到过用 替换 getty 的说明。我目前找不到链接,但是因为有一个 256 色的 TERM screen,你可以看看。


/etc/inittab使用如下行来设置虚拟终端:

# Format:
#  <id>:<runlevels>:<action>:<process>
#
1:2345:respawn:/sbin/getty 38400 tty1
2:2345:respawn:/sbin/getty 38400 tty2
3:2345:respawn:/sbin/getty 38400 tty3

这是手册页/sbin/getty(来自我的 Debian 系统,因此从技术上讲它是程序agetty):

SYNOPSIS
       agetty [-8ihLmnw] [-f issue_file] [-l login_program] [-I init]
       [-t timeout] [-H login_host] baud_rate,...  port [term]

注意baud_rate,... port [term]末尾的 。这与/etc/inittab行 ( /sbin/getty 38400 ttyN) 中的命令相匹配 - 请注意,没有[term]参数,因此我们得到一个默认值(在您登录虚拟控制台后立即运行以查看您的系统使用的内容)。再次从手册页中获取echo $TERM

ARGUMENTS
       term   The value to be used for the TERM environment variable.  This  over‐
              rides  whatever  init(8) may have set, and is inherited by login and
              the shell.

如果您找到可用的 TERM,请修改 inittab 中的 getty 行并在末尾添加适当的 TERM:

1:2345:respawn:/sbin/getty 38400 tty1 TERM-with-256-colors
2:2345:respawn:/sbin/getty 38400 tty2 TERM-with-256-colors

答案3

看一下 fbterm - 它是一个替代的帧缓冲区,可以在 256 色模式下运行(您只需从 TTY 以 root 身份运行它)

我使用它取得了一些成功 - 一些应用程序运行良好,并报告 256 种颜色;然而 Emacs(我想要在 TTY 上使用 256 种颜色的主要原因)似乎不起作用;这里有一些关于它的讨论,但并没有真正得到解决:

http://lists.gnu.org/archive/html/emacs-devel/2011-08/msg00989.html

但是,mplayer 应该可以工作!

答案4

用于设置文本前景色和背景色的 ANSI 转义序列是这里的限制因素。

从记忆中这些序列看起来像是 escape [ 01;34m 前景中有 30 年代的代码,而背景中有 40 年代的代码。

所以我认为没有任何方法可以实现你的目标。

相关内容