TTY 有 256 种颜色?

tim*_*imn 28 linux terminal tty

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

pbr*_*pbr 12

我现在正在修改我的答案,因为我确定了。

认为 ANSI 序列是通过 BIOS 或内核之外的其他方式处理的结论是错误的;实际上,它们是在内核中处理的。感谢 LinuxNewbies IRC 频道上的 hnaz_,我找到了之前遗漏的内容:drivers/char/vt.c实现了虚拟终端驱动程序使用的数字设备 VT102 终端的仿真。

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

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


qua*_*ote 7

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

有没有办法告诉 TTY 使用超过八种颜色?

是的。

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

  • 设置不同的 TERM(例如,export TERM=foo)。您需要进行试验才能找到合适的。如果你发现一个有效的,你可以修改你的,/etc/inittab以便你的虚拟终端默认运行它(见下一节)。

  • 本文讨论可能适合您的其他选项。它建议使用Qingy(Qingy 不是 GettY)作为 getty 替代品,如果不能选择切换 TERM 变量,它可能会给你你正在寻找的东西。

  • 说到 getty 替换,我发誓我已经看到了GNU screen沿途某个地方替换 getty 的说明。我目前没有找到链接,但是由于 有一个 256 色的术语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
Run Code Online (Sandbox Code Playgroud)

这是联机帮助页/sbin/getty(来自我的 Debian 系统,因此从技术上讲是agetty程序):

SYNOPSIS
       agetty [-8ihLmnw] [-f issue_file] [-l login_program] [-I init]
       [-t timeout] [-H login_host] baud_rate,...  port [term]
Run Code Online (Sandbox Code Playgroud)

注意最后的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.
Run Code Online (Sandbox Code Playgroud)

如果您找到一个有效的 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
Run Code Online (Sandbox Code Playgroud)


Seb*_*Seb 7

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

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

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

但是,mplayer 应该可以工作!


pbr*_*pbr -1

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

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

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

  • 事实上,这是可能的。否则我将无法在 URxvt 中使用 256 色的 mutt。:) 另请参阅 http://push.cx/2008/256-color-xterms-in-ubuntu 但如何在 TTY 中获得相同的效果? (2认同)