下一页 上一页 目录

6. 文本终端工作原理概述 (Linux 环境)

另请参阅 终端工作原理的详细信息 部分

6.1 设备名称

每个终端都连接到主机(通常是 PC)上的一个串行端口。这些端口有名称/编号。前几个是:ttyS0、ttyS1、ttyS2 等。

这些端口由位于 /dev (设备) 目录中的特殊文件表示。ttyS0) 对应于 DOS 或 Windows 中的 COM1。ttyS1) 是 COM2,依此类推。有关这些和相关“设备”的详细信息,请参阅 终端特殊文件

6.2 登录/注销

当主机启动时,它会运行 getty 程序。getty 程序运行 “login” 程序来让用户登录。请参阅 Getty (在 /etc/inittab 中使用)。“login:” 提示符会出现在屏幕上。终端和/或控制台的用户登录(在给出密码后)即可访问计算机。当需要关闭终端时,每个人都必须注销(并关闭终端电源)。有关限制登录(包括允许 root 用户在终端登录)的信息,请参阅 登录限制

6.3 半双工/全双工

如果观察某人在终端上打字,他们输入的字母会同时出现在屏幕上。一个天真的人可能会认为,输入的内容直接从键盘发送到屏幕,并复制一份发送给计算机(类似半双工,见下一段)。通常发生的情况是,键盘输入的内容仅直接发送到主机,主机反过来将接收到的每个字符回显到终端(称为全双工)。在某些情况下(例如密码或简洁的编辑器命令),输入的字母会被有意地不回显。

全双工意味着存在两个(双向)单向通信链路。全双工是终端的常态。半双工是双工的一半,意味着只有一个单向通信链路。此链路必须由双向通信共享,并且一次只能使用一个方向。在这种情况下,计算机将无法回显您键入的字符(并发送给它),因此终端也需要将您键入的每个字符直接发送到终端屏幕。某些终端具有很少使用的半双工操作模式。

6.4 终端内存

CRT 管上的图像几乎会立即消失,除非电子束频繁地射到管面上并在屏幕上重新绘制。由于发送到终端的文本需要保留在屏幕上,因此屏幕上的图像必须存储在终端的内存芯片中,并且电子束必须重复扫描屏幕(例如每秒 60 次)以保持图像。有关更多详细信息,请参阅 终端内存详细信息

6.5 终端命令

终端受计算机控制。计算机不仅向终端发送文本以在屏幕上显示,还向终端发送要执行的命令。这些命令是 控制码(字节)和 转义序列。例如,CR(回车)控制码将光标移动到屏幕的左边缘。某个转义序列(多个字节,其中第一个字节是“转义”控制码)可以将光标移动到屏幕上由转义序列内参数指定的位置。

最早的终端 只有少数此类命令,但现代终端有数百个命令。显示的显示效果可以针对特定区域进行更改:例如高亮、暗淡、下划线、闪烁和反相视频。终端中的扬声器可以在按下任何键时“咔哒”一声,或者在发生错误时发出蜂鸣声。功能键可以被编程为特殊含义。可能存在各种字体。显示可以向上或向下滚动。可以擦除屏幕的指定部分。可以使用各种类型的流量控制来停止数据流,以防止字节发送到终端的速度快于终端可以处理的速度。还有更多功能,您将从查看高级终端手册或来自互联网链接 转义序列列表 中看到。

6.6 Terminfo 解决了缺乏标准化的问题

虽然为美国制造的终端都使用相同的 ASCII 代码来表示字母表(IBM 终端除外,它们使用 EBCDIC),但不幸的是,它们并非都使用相同的转义序列。即使在建立了各种 ANSI(和 ISO)标准之后,这种情况仍然发生,因为这些标准从未完全足够先进。此外,较旧的终端通常缺乏较新终端的功能。这可能会导致问题。例如,计算机可能会向终端发送一个转义序列,告诉它将屏幕分成两个指定大小的窗口,但没有意识到该终端无法做到这一点。

为了克服这些问题,建立了一个名为 “termcap”(意思是 “终端功能”)的数据库。Termcap 后来被 “terminfo” 取代。此数据库驻留在计算机上的某些文件中,并且对于每种终端型号,都有一个部分(有时是一个单独的文件)。对于每种型号(例如 VT100),都提供了功能列表,包括可用特定转义序列的列表。例如,blink=\E5m 表示要使光标开始闪烁,必须向终端发送:Escape 5 m。有关更多详细信息,请参阅 Termcap 和 Terminfo(详细信息) 部分。应用程序可以通过调用某些 C 库函数来利用此数据库。一大套此类程序(超过 200 个)被命名为 “ncurses”,并在 “ncurses” 的手册页中列出,该手册页随开发人员的 ncurses 包一起提供。还有一个 NCURSES-programming-HOWTO。

6.7 接口

环境变量 TERM 是 Linux 认为您正在使用的终端类型。大多数应用程序使用它来查找 terminfo 数据库中的功能,因此需要正确设置 TERM。但是,正确的接口不仅仅是计算机了解终端的功能。

为了使字节从计算机流向终端,必须将终端设置为以与从终端发送的波特率(每秒比特数)相同的波特率接收字节。如果终端设置为以 19,200 波特接收,而计算机以 9600 波特发送字符,则屏幕上只会看到乱码(或者可能什么也看不到)。您可以从终端的 “设置” 菜单中选择终端的波特率(以及许多其他功能)。大多数终端在其 “设置” 菜单中都有大量选项(请参阅 终端设置(配置)详细信息)。计算机串行端口也有选项,并且这些选项必须以兼容的方式设置(请参阅 计算机设置(配置)详细信息

6.8 仿真

如今,大多数终端都具有多种仿真(个性或 “终端模式”)。以前由 DEC(数字设备公司,现为康柏)制造的终端型号以 VT 开头(例如 VT100)。许多其他非 VT100 的终端可以设置为仿真 VT100。Wyse 是直到 2005 年左右的主要终端制造商。他们的大多数终端都可以仿真各种 DEC 终端,例如 VT100 和 VT220。因此,如果您想使用 VT320 终端,您可以选择使用 “原生” 个性中的真实 VT320,或者可能使用能够仿真 VT320 的其他终端。

“原生” 个性通常具有更多功能,因此,在其他条件相同的情况下,“原生” 通常是最佳选择。但其他条件可能不相同。由于 Linux 控制台仿真 VT102,因此您可能希望终端仿真它(或与其非常接近的东西,例如 VT100)。这将有助于确保某些可能无法正确处理终端的程序仍然可以在您的终端上正常工作。如果程序找不到您终端的 terminfo(或找不到某些功能),则某些程序会假定您正在使用 VT102。因此,如果程序无法在您的非 vt102 终端上正常工作,如果您不为您的终端提供良好的 terminfo 文件,则很可能是您的错。使用 “原生” 然后报告任何错误将有助于发现和修复可能无法被检测到的错误。

最常见的仿真类型是像 vt100 终端(或类似终端)一样使用 PC。加载到 PC 内存中的程序执行仿真。在 Linux 中(除非您在 X Window 中),PC 显示器(称为控制台)仿真 “Linux” 类型的终端(接近 vt100)。即使 X Window 中的某些窗口也仿真终端。请参阅 终端仿真

6.9 控制台

在 PC 上,监视器通常是控制台。它仿真 “Linux” 类型的终端。您可以作为虚拟终端登录到它。请参阅 控制台。它接收来自内核的关于启动和关闭进度的消息。您可以让通常发送到控制台的消息发送到终端。要获得此功能,您必须手动修补内核,但对于内核 2.2(或更高版本),这是一个 “make config” 选项。请参阅 使串行终端成为控制台


下一页 上一页 目录