在 Linux tty 中不解释回显的转义序列

Min*_*Max 5 linux terminal-emulator tty stty

先决条件

Linux 虚拟终端 (tty) 是VT102 -虚拟终端子系统源的仿真

真正的VT100(几乎与VT102相同)具有以下行为(我想):

  • LINE模式下,所有键入的字符首先传输到计算机,然后返回到终端。从主机返回之前,终端屏幕上不显示任何内容。
  • 转义序列也不例外——它们只有在从主机返回后才会被解析和执行。也就是说,如果我想将字体颜色更改为红色,我应该输入ESC[0;31m,这个序列到计算机,回显,VT102接收到这个,解析并应用。没有其他方法可以更改终端字体颜色(在LINE模式下)。我不确定VT102是否有不同的字体颜色,但这是一个例子。

图片来自手册:

在此处输入图片说明

摘自手册:

线路/本地

LINE/LOCAL 功能允许操作员轻松地将终端置于在线或 LOCAL(离线)状态。当终端在线时(ON-LINE 指示灯亮起),所有在键盘上输入的字符都会直接发送到计算机,并且来自计算机的消息会显示在屏幕上。在LOCAL状态下(LOCAL指示灯亮),终端与电脑断电;消息不会发送到计算机或从计算机接收;键盘上输入的字符直接在屏幕上回显。

资料来源:VT100 系列视频终端技术手册,第三版,1982 年 7 月。


问题

为什么 Linux 的tty行为方式不同?

我把它bash置于睡眠模式,所以它不会干扰,然后输入Esc[0;31m并获得纯文本,颜色没有改变 - 所以,转义序列不起作用。

在此处输入图片说明

几年前我问过类似的问题 -为什么我不能从键盘发送转义序列,但可以从另一个 tty 发送?,但现在我获得了有关VT102 Linux 子系统的知识,并想了解它为什么以这种方式工作 - 在这方面与真正的硬件终端不同。

在此处输入图片说明

Min*_*Max 4

首先,这个问题是在Retrocomputing上提出的,但社区发现它更适合这个网站。但我在评论部分得到了答案,所以复制到这里:

Linux 虚拟控制台以联机模式模拟连接到 Linux(串行)tty 设备的(某种)VT102 终端。Linux tty 驱动程序通常不会回显转义控制字符,而是回显^[。如果您不希望 tty 驱动程序执行此操作,请使用stty -ctlecho。此外,真正的 VT102 终端不支持颜色,它无论如何都可以与 Linux 虚拟控制台一起使用,因为它并不真正兼容 VT102。

我已经尝试过,stty -ctlecho它几乎按预期工作 - 只有一个子问题 - 真正的VT102在人按下并开始输入转义序列后也没有显示字符ESC,所以人是以盲方式输入的?