Linux 9 命令将 ANSI/颜色序列发送到单色终端

Linux 9 命令将 ANSI/颜色序列发送到单色终端

我在 Rocky Linux 9 上使用 Wyse50 终端仿真。手册页、帮助屏幕等无法使用,因为系统输出终端仿真器无法理解的属性和颜色代码;例如,man cp这样读:

1mSYNOPSIS0mm
       1mcp 22m[4mOPTION24m]... [4m-T24m] 4mSOURCE24m 4mDEST0mm
       1mcp 22m[4mOPTION24m]... 4mSOURCE24m... 4mDIRECTORY0mm
       1mcp 22m[4mOPTION24m]... 4m-t24m 4mDIRECTORY24m 4mSOURCE24m...m  m

1mDESCRIPTION0mm

我已经更新了最新的 terminfo 软件包,并在最新的 wy50 和 Linux 4 上的 wy50 之间进行了 infocmp,一切正常。

我在 profile、bash_profile、bashrc 或 .bashrc 中没有看到任何可以设置任何颜色参数的内容。

我缺少什么? (属于上个世纪的遗留应用程序除外)

答案1

我反对托马斯·迪基将这种行为描述为错误特征。

我已经在别处详细阐述了我的理由。

https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=312935

简而言之,Wyse 50、现代终端仿真器和 *ix 内核控制台设备都不是 Teletype 机器的仿真器。

对于 groff 1.24,我想将 grotty 打造成一个 terminfo 应用,以便它能够更智能地适应终端能力。

然而,即使它做到了这一点,它也不能可靠地模仿 Teletype Corporation Model 37,因为当今使用的大多数终端仿真器都无法做到这一点。

同时您可以设置 GROFF_NO_SGR 环境变量。

答案2

这是格罗夫的硬编码的默认行为(不涉及 ncurses 和 terminfo)。这是引入的一个错误功能2002年2月(参见 Debian#257413)。作为解决方法,您可以将环境变量设置GROFF_NO_SGR为某个非空值。

几乎所有(您可能不会遇到的)视频终端都会执行一系列字符、退格键、重击(超过下划线或相同字符)的操作。有时它被错误地描述为 ASR 33,尽管它不是视频终端,而是打印机(我使用过两个都, 当然)。

进一步阅读:

答案3

一般来说,在 Linux 发行版或其他 Unix 系统中,当使用串行端口或等效的伪终端(例如在sshortelnet会话中)时,各个程序的输出按原样直接发送到终端 - 没有任何类型用于 Linux 内核或其他任何地方的终端格式化转义序列的翻译层。

许多程序会尝试为您正在使用的终端生成适当的输出,这些输出是根据TERM环境变量设置确定的,通常会借助诸如 和 之类的库terminfotermcap但那些不这样做的程序则不会——如果您运行的程序没有,并且它需要您没有的终端类型并输出不适当的转义序列,则您的终端将收到不适当的转义序列。

相关内容