有关文本终端的快速安装尝试,请参阅快速安装。
版权 1998-2010 David S. Lawyer。 mailto:dave@lafn.org
请以任何格式自由复制和分发(出售或赠送)本文档。请将任何更正和意见发送给文档维护者。您可以创建衍生作品并分发它,前提是您
如果您正在考虑制作翻译以外的衍生作品,请与当前的维护者讨论您的计划。
虽然我没有故意误导您,但本文档中可能存在许多错误。请告诉我这些错误。由于这是免费文档,因此应该很明显,我对任何错误不承担法律责任。
任何品牌名称(以大写字母开头,如 MS Windows)都应被视为商标)。此类商标属于其各自的所有者。
Greg Hankin 的 Serial-HOWTO v.1.11 (1997) 部分“如何设置连接到我的 PC 的终端?”被并入 v1.00 的各个位置(经 Greg 许可)。Text-Terminal-HOWTO 的 v1.09 版本有 Alessandro Rubini 提出的约 25 个更改(和错误更正)。对于 v1.26,我修复了 Alain Cochard 发现的约 25 个错别字等。Jeremy Spykerman 告诉我使用无键盘终端作为无显示器 PC 的控制台(使用 ttysnoop)。许多其他人提出了一两条建议或发现了一些错别字。谢谢。
作者正在寻找人来接管维护本 HOWTO。由于真正的文本终端几乎已过时,因此除了链接有时会消失以及在串行端口上自动查找哑终端等设备可能无法正常工作之外,没有太多工作要做。一个项目是重写本 HOWTO,使其面向带有命令行界面的文本终端仿真。另一个项目是以上述 HOWTO 中对 GUI 终端的简要概述为起点,创建一个关于瘦客户端或类似内容的新且最新的 HOWTO。
请告知我事实、意见、逻辑、拼写、语法、清晰度、链接等方面的任何错误。但首先,如果日期超过几年,请检查您是否拥有最新版本。请将您认为属于本文档的任何信息发送给我。
为了充分利用某个真正的终端的所有功能,需要终端新购时随附的终端手册。如果您没有手册,本 HOWTO 可能会有所帮助。解决此问题的一种方法是让终端制造商将其手册放在互联网上,但他们从未这样做。除了 Wyse 提供了一些用户手册,并且有人扫描了旧的 VT-100 手册。
Text-Terminal-HOWTO 的新版本应每隔几年发布一次。要获取最新版本,请访问 LDP 镜像站点(请参阅:http://www.tldp.org/mirrors.html)。要快速查看最新版本的日期,请查看Text-Terminal-HOWTO.html。您当前阅读的版本是:v1.43 2013 年 3 月。
有关追溯到 1998 年第一个版本的完整修订历史记录,请参阅源文件(linuxdoc 格式):(cvs) Text-Terminal-HOWTO.sgml
转到最近的镜像站点(如上所述)以获取 HOWTO。
配置与设置含义相同。虽然 Linux 命令采用选项(使用 - 或 -- 符号),但更广泛意义上的选项包括各种其他类型的选择。广义上的安装包括设置(配置)软件和硬件。我怀疑为真(但可能不是)的陈述以 2 个问号结尾:?? 如果您确定,请告诉我。
终端由屏幕和键盘组成,人们使用它们与计算机(主机)进行远程通信。使用它几乎就像它是个人计算机一样,但终端与它通信的主机计算机是远程的(在房间的另一侧,甚至在世界的另一侧)。程序在主机计算机上执行,但结果显示在终端屏幕上。最初,终端是独立的设备,没有计算能力,因此它们的成本曾经比计算机便宜得多。它们没有图片或音频,但只能显示文本,因此被称为“文本终端”。如今,PC 计算机的成本如此之低,以至于人们可以使用 PC,通过运行软件程序使其表现得像旧的文本终端一样,来充当文本终端。您以前在图书馆和学校里可以找到真正的文本终端。
在大型机的旧时代,从 1970 年代中期到 1980 年代中期,与大型计算机的大部分通信都是由坐在真正的文本终端前的人们完成的。在 1970 年代,在个人计算机出现之前,这是与任何计算机进行交互式通信的唯一方式。这些真正的文本终端既不是计算机,也不是仿真的文本终端。它们仅由屏幕、键盘以及仅足以存储一屏幕左右文本的内存(几千字节)组成。用户输入程序、运行程序、编写文档、发出打印命令等。电缆将终端连接到计算机(通常是间接地)。它被称为终端,因为它位于此电缆的终端端。一些文本终端被称为“图形”终端,但分辨率很差,速度很慢,并且很少有软件可用于支持此类图形。
如今,对于大多数计算机用户来说,真正的终端正变得越来越稀有。但是,它们仍然有一些专门用途,例如销售点设备以及访问不需要图形和图片的大型机和服务器。但是,如果需要文本终端,人们有时会使用个人计算机来仿真终端。
几乎每个使用 Linux 的人都使用终端仿真。当您在 Linux PC 上不使用 X Window GUI 时,您很可能正在使用文本界面(虚拟终端)。它也称为“命令行界面”。在 X Window 中,也可以通过使用 xterm、gnome-terminal 或 konsole (KDE) 等 x-终端仿真器,使用一个或多个终端窗口来获得命令行界面。所有这些都使用软件来仿真真正的终端。但是,在这些情况下,由于此类仿真已为用户自动设置,因此人们不需要本 HOWTO 提供的大部分信息。但是,如果有人使用软件程序仿真终端,然后通过串行端口电缆将该仿真的终端连接到另一台计算机,那么本 HOWTO 应该更有用(前提是您的 PC 上有串行端口——2009 年之后制造的几乎所有新 PC 都不再有串行端口)。
真正的文本终端与显示器或 x-终端仿真器不同,因为显示在文本终端上的简单字符图像直接存储在终端的内存中。对于显示器或 x-终端仿真器,图像存储在 PC 的显卡和/或 PC 自身的内存中。文本终端的键盘插入终端,并且是终端的一部分,而 PC 的键盘插入计算机。
对于显示器,视频图像通过从显卡到显示器的短电缆发送,而对于文本终端,计算机的串行端口和与其连接的 PC 之间存在长电缆中的字符字节双向流动。大多数文本终端没有鼠标。
在网络客户端-服务器术语中,人们可能会认为真正的终端是客户端,而主机计算机是服务器。终端已被某些人称为“瘦客户端”。但它实际上既不是“客户端”,主机也不是“服务器”。主机提供的唯一“服务”是接收在键盘上键入的每个字母,并对此做出反应,就像您在自己的键盘上键入时计算机所做的那样。终端就像计算机的“窗口”,就像显示器(和键盘)一样。您可能已经使用过 Linux 中的虚拟终端(通过按 Left Alt-F2 等)。真正的终端就像运行这样的虚拟终端一样,但您在自己的终端屏幕上运行它,而不必共享显示器屏幕。与在控制台(显示器)上使用虚拟终端相比,这允许另一个人坐在另一个真正的终端前,与其他人同时使用同一台计算机。这种多用户界面不是“客户端”,也不是服务器。
关于“哑终端”有各种相互冲突的定义,但随着时间的推移,越来越多的终端被称为哑终端。本文档主要介绍仅在屏幕上显示文本的文本终端。它本可以标题为“哑终端 HOWTO”。但在一些杂志文章中,任何终端,无论多么智能,包括呈现完整图形用户界面 (GUI) 的终端,都被称为哑终端。如果所有终端都是“哑终端”,那么在终端前加上“哑终端”一词就没有意义了(除非作为销售宣传,以销售计算机或类似产品来代替终端)。由于“哑终端”的含义含糊不清,因此在此处未将其归类为终端类型。
对于文本终端,计算机和终端之间的双向信息流通过连接它们的电缆进行。这种信息流以字节(例如 ASCII 码)为单位,其中每个字节是一个整数,通常表示一个可打印字符。在键盘上输入的字节会发送到主机计算机,而来自计算机的大多数字节会显示在终端屏幕上。来自计算机的特殊控制字节(或字节序列)告诉终端光标移动到哪里,擦除什么,以及在哪里开始和结束下划线和/或闪烁和/或粗体等。通常有数百个这样的特殊编码命令,大多数真正的终端甚至可以更改字体。
通信使用字符(字母),这些字符使用所用字符集的代码表进行编码。通常,256 个可能字节中的前 128 个字节使用 ASCII 码。用于类 Unix 系统的终端通常通过连接主机计算机和终端的异步串口(RS-232-C = EIA-232-D)之间的电缆连接到计算机。大约在 2004 年之前,大多数新 PC 都有串口,但今天(2009 年)几乎没有新 PC 配备串口。有时连接通过调制解调器或终端服务器等。
“文本终端”的其他名称包括“通用终端”、“通用显示终端”、“串行监视器”、“串行控制台”(如果像控制台一样使用)、“串行终端”、“哑终端”、“字符单元终端”、“字符终端”、“ASCII/ANSI 终端”、“异步终端”、“数据终端”、“视频终端”、“视频显示终端”(VDT)和“绿色终端”(因为许多使用绿色显示器)。这些名称(尤其是“哑终端”)有时用于指在具有命令行界面(如 Linux)的 PC 上模拟文本终端。在过去,“视频显示单元”(VDU)指的是文本终端,但严格来说,它不包括键盘。
“块模式”曾被旧的 IBM 大型机终端专门使用,但许多现代终端也具有此功能(但使用不多)。在块模式下,您键入的字符会暂时保存在终端内存中(并且可能由终端上的内置编辑器进行编辑)。然后,当按下发送键(或类似按键)时,会一次性将一个字符块(有时只是一行字符)发送到计算机。截至 1998 年末,Linux 不支持块模式。请参阅 块模式 部分。
虽然模拟文本终端不显示图像,但许多真正的文本终端可以显示位图图像,但不能显示彩色图像。不幸的是,互联网上流行的图像格式不受支持。因此,图像的显示很少使用。终端图形的协议包括:Tektronix 矢量图形、ReGIS (DEC)、Sixel (DEC) 和 NAPLPS(北美演示层协议语法)。
即使没有位图图像,普通的文本终端也可以某种程度上显示图像。可以形成箭头 <--- 并用 |__| 等绘制框。使用具有大量用于线条绘制的特殊字符的特殊图形字符集,可以实现更多功能。但即使没有图形字符集,也可以制作“ASCII 图形”艺术。“图形终端”一词通常指可以显示位图图像的终端。然而,这个术语有时也适用于仅文本终端,因为文本是图形的一种有限形式。
有两种基本类型的图形显示器:光栅和矢量(很少使用)。光栅图形(位图)通过电子束绘制的水平扫描线(或通过激活平板屏幕上的像素或点)在屏幕上放置点。矢量图形显示器旨在用于没有任何点的单色屏幕。它们使用智能电子设备来绘制线条和曲线,电子束可以连续地在任何方向上移动(就像钢笔或铅笔一样)。真正的矢量图形绘制高质量的线条,没有明显的锯齿,但既稀有又昂贵。有关更多详细信息,请参阅 http://www.cca.org/vector/。光栅图形现在几乎普遍用于 PC 和文本终端。对于 PC,以矢量图形格式编码的图像由于电子限制而无法绘制为连续线条,但可以转换为光栅图形格式进行显示(图像质量会因此下降)。
由于“瘦客户端”不是文本终端,因此本 HOWTO 仅提供其简要概述。还有其他 HOWTO 更详细地介绍了它们,但(截至 2010 年)不幸的是它们不是最新的。请参阅 相关 HOWTO 等。瘦客户端是精简(最小化)的客户端计算机,其行为有点像终端。由于文本终端(除了非常旧的终端)运行嵌入式操作系统,因此它们也像计算机。与文本终端相比,瘦客户端都显示现代高速 GUI。它们依赖于更强大的计算机(服务器)来运行。
对于真正的瘦客户端终端,计算工作和磁盘存储都将在服务器上完成。在另一个极端,大部分工作和存储都在瘦客户端上完成,但某些事情(例如管理)仍然依赖于服务器。由于这样的客户端实际上并不“瘦”,因此更准确地称其为“胖客户端”可能更合适。
它们本可以简单地称为“图形终端”,而不是“瘦客户端”,但这项技术的推广者想要一个吸引人的名称,让客户相信这可能是一种完全不同的技术。这种重命名基本上只是图形终端(具有新功能)的趋势仍在持续。其中一些名称是“虚拟桌面”和“云计算”。
瘦客户端可以使用软件从普通 PC 创建,也可以是独立的硬件。但这种独立的硬件通常可能只是一个传统的 PC 显示器加上一个用于计算机部分硬件的小盒子。Linux 似乎倾向于使用 PC 作为客户端。
有些人声称文本终端也是一种瘦客户端,但它们实际上不是,因为它们不符合客户端-服务器模型。然而,通过 telnet 连接终端确实在使用 telnet 作为数据传输手段时调用了客户端-服务器模型。但文本终端与其主机之间的关系不是客户端-服务器关系。文本终端只是另一种访问计算机的方式,就像显示器及其键盘是访问 PC 的方式一样。可以将同样的推理应用于瘦客户端,并说客户端-服务器关系仅用于数据传输。
因此,瘦客户端就像一个终端。它有一个带有鼠标的 GUI,让你感觉就像在使用计算机。你确实在使用,但这台计算机可能很远,并且在你使用它的同时,还有许多其他人也在使用它。通信通过高速网络(无线和/或有线)甚至互联网进行。一些瘦客户端还可以模拟文本终端,并为此目的配备串行端口连接器。最近的型号还配备了 USB 接口以及以太网接口。
有各种类型的瘦客户端。一种类型是“Windows 终端”,它在 MS 服务器(和软件)下运行。另一种类型是“网络计算机”,它应该是平台中立的。这意味着它们应该与 MS Windows 和 Linux 兼容,但早期的型号可能不容易与 Linux 一起使用。对于 Linux,使用 X Window 协议。请参阅 Linux 下的瘦客户端和 NC
这些是真正的终端,因为所有的计算工作都由运行 Windows 的服务器完成。它们也称为“基于 Windows 的终端”(WBT)。这些终端(客户端)有点像计算机,因为它们通常运行嵌入式操作系统,例如 Linux 或 Microsoft 的 CE、NT 或 XP。它通常存储在闪存中,以便可以更新。此外,普通的 PC 可以用作客户端(在某些情况下,包括 Linux PC),并配备适当的软件。一些客户端可以支持来自 Linux 服务器的 X Window,一些客户端可以模拟文本终端。许多所谓的“网络计算机”也可以运行 X Window。这将在下一节中讨论。
这些客户端的服务器通常运行 MS 的终端服务(适用于 Windows 2000 服务器)。在此之前,有 Windows NT 终端服务器版(从 1998 年年中开始,代号为“Hydra”)。MS 使用基于 ITU T.120 协议的 RDP(远程桌面协议)。此外,还有一个可选的 ICA 协议(具有附加功能),可以与 RDP 互操作。
在此之前,Citrix 使用专有的 ICA 协议(独立计算架构)推出了修改后的 Windows NT 3.51 (1995),称为“WinFrame”。在 MS 推出自己的终端服务器后,Citrix 仍然活跃在市场上。它创建了 MetaFrame 软件(以前称为 pICAsso),作为 MS 终端服务器(或服务)的附加组件,以便它可以支持基于 ICA 的终端并提供其他附加功能。在 MS 介入之前,还有其他专有系统用于可以显示 MS Windows GUI 的终端,但后来它们都切换到支持 Microsoft 的系统。
运行 Linux 的 PC 可以使用 Citrix 提供的“免费”(仅价格免费)专有 ICA 客户端软件转换为基于 ICA 的客户端终端:安装 Linux 客户端。不幸的是,MS 要求您购买许可证来覆盖客户端,即使客户端都运行 Linux。因此,如果您想通过使用 Linux 来节省软件成本,则必须使用全 Linux 系统,并使用免费的 X-Window 协议的 Linux 服务器和客户端。
以上有时称为“网络计算”,因为终端和服务器通过网络(例如 Linux 和 MS 都使用的通用 TCP/IP 网络)相互连接。网络计算机可能与下述略有不同。
请参阅 网络计算机 - 维基百科,其中声称 NC 作为一种硬件类型已经过时,但 NC 被用作“瘦客户端”的同义词。
这些既不是真正的计算机,也不是真正的终端,而是介于两者之间的东西。一种类型的网络计算机 (NC) 是具有 CPU 但没有硬盘的计算机。它运行所需的操作系统通过网络发送给它。NC 是全图形的,并使用服务器计算机的服务。它们与终端略有不同,因为它们运行的某些(或大多数)程序可能在其自己的 CPU 芯片上执行。运行浏览器被认为是它们的主要功能之一,因此 Java 代码小程序可能会发送给它们执行。许多 NC 支持 X Window,因此可以使用 Linux 服务器来支持它。这样的服务器可以称为“Linux 终端服务器”。IBM 将其 NC 称为“NetStation”,但现在称为“NetVista”。它们应该在 Intranet 类型网络上工作,NetVista 可以运行 Linux 操作系统。
Wintel 推出了“NetPC”,与上述不同,它几乎是一台 PC 计算机。但是,它没有可移动磁盘,因此用户无法安装自己的软件或获取任何副本。
有一个“Linux 终端服务器项目”(LTSP 或 ltsp),用于将 Linux 用作无盘瘦客户端的服务器。它们使用 X Window,默认情况下,应用程序在服务器上运行。但是,通过额外的努力,可以将其设置为某些或所有应用程序在“终端”上运行。请参阅 http://www.ltsp.org/。
LTSP 中的“终端”实际上是瘦(或胖)客户端。该项目的客户端还可以运行 telnet 会话,从而表现得像文本终端。LTSP 的软件包“lts”在主要的 Linux 发行版中可用。
据称,如果只有少数“终端”,它们无需 ltsp 软件即可工作。但如果有许多“终端”,则需要 ltsp 软件。因此,如果您想使用旧 PC 等作为无盘瘦客户端,请使用 ltsp。它在拥有 100 多个瘦客户端工作站的系统上工作良好。
Linux 提供 NFS(网络文件系统),以便如果普通计算机通过网络相互连接,则一台计算机上的人员可以在另一台计算机上运行程序。这样的程序通过网络发送消息,使其看起来就像程序是由您的本地计算机运行的一样。但这样的程序实际上是在网络上的另一台计算机上运行。它也适用于 X Window,因此可以看到在另一台计算机上生成的 GUI 图像。
Linux 还允许计算机无盘启动并通过网络启动。请参阅上面的“终端服务器项目”,该项目为此目的提供了特殊的软件。Network-boot-HOWTO 提供了概述。较旧的文档是 Diskless-HOWTO 和 Diskless-root-NFS-HOWTO。因此,使用运行 NFS 的无盘计算机使您能够在另一台计算机(服务器)上运行程序。这就像使用 NC(网络计算机)。它不是真正的 NC,但它在模拟一种 NC。它也经常被称为“终端”,并且在某种意义上它是的。
因此,如果您有一台带有以太网卡 (NIC) 的旧 PC,您或许可以将其用作 NC。有关此信息的一个来源是 Thinclient-HOWTO。即使您的旧 PC 没有 NIC,您仍然可以使用它来模拟文本终端。请参阅 终端仿真。
还有许多真正的网络计算机 (NC) 可以与 Linux 服务器一起工作。如今,一些 NC 在 NC 内部运行 Linux 操作系统。在 Linux 流行之前,NC 不运行 Linux 操作系统,而是需要其他操作系统。但即使 NC 使用非 Linux 操作系统,通常也可以使其与 Linux 服务器一起工作。非 Linux 操作系统只是作为文件存储在 Linux 服务器上。然后,当 NC 启动时,它会向 Linux 服务器发送消息,请求非 Linux 操作系统文件。因此,此非 Linux 操作系统通过网络发送到 NC,NC 启动。
Linux 服务器运行 NFS 和 X Window,NC 必须支持这两者。这使您能够像使用 X Window 终端一样使用 NC。
有一些针对某些品牌 NC 的 Linux HOWTO
瘦客户端有 3 种不同的硬件配置。第一种类型只是使用 PC 计算机作为瘦客户端,通过模拟瘦客户端。它实际上不是瘦客户端,但它的行为像瘦客户端。第二种类型(不再生产?)看起来就像文本终端。它看起来就像一个显示器,带有一个键盘连接器和另一个网络电缆连接器。它是一个专用的瘦客户端,不能用于其他任何用途。第三种类型看起来像一台小型计算机。它使用标准的 PC 显示器和键盘,两者都插入一个小盒子,这个盒子是一台“瘦”计算机。这个盒子提供显示器/键盘和网络之间的接口。
NC 和相关的 Windows 终端的推广者预测,它们将很快取代数百万台 PC。1998 年,全球售出了约 70 万台瘦客户端(其中约 27% 是 NC)。1999 年,销量下降到 60 万台,但在 2000 年上升到 90 万台(而预测为 130 万台)。2001 年,销量达到 109 万台,预测 2002 年为 140 万台。
(截至 2003 年)Microsoft 服务器仍然占据市场主导地位,但客户端可以运行 Linux,用户仍然需要为每个 Linux 客户端向 Microsoft 支付许可费。因此,全 Linux 免费系统正在获得发展。
增长不如预期迅速的主要原因是近年来 PC 价格下降,因此它们通常不比瘦客户端贵多少。然而,有人认为,即使瘦客户端的成本与 PC 相同,但维护和管理成本较低。请注意,瘦客户端有时会取代文本终端而不是 PC。
这是一个快速安装终端的步骤,无需执行终端和主机计算机的设置程序。如果终端恰好设置为与计算机不兼容,则它可能无法正常工作。如果您不理解其中的一些内容,您需要查阅本文档的其他部分以获取更多信息。
要安装终端,首先在 /etc/termcap
或 terminfo.src
中查找它的条目(请参阅 Terminfo 和 Termcap(详细))。弄清楚您将把它连接到哪个串口,以及该端口的 tty 指定是什么,例如 ttyS1,请参阅 设备名称)。以 root 用户身份,编辑 /etc/inittab
并在其他 getty 命令旁边添加一个 getty 命令。getty 命令的格式取决于您使用的 getty 程序。agetty
(在 Debian 发行版中仅称为 getty
)是最简单的(没有配置文件)。请参阅“info
”或“man
re getty
”。对于 getty 参数,请使用终端的 terminfo(或 termcap)名称(例如 vt100)。输入终端支持的波特率。但是,如果您将波特率设置得太高,您可能需要使用(请参阅 流控制)。
然后,使用文件传输(零调制解调器)电缆将终端的主串口物理连接到计算机的选定串口,并打开终端。不要期望大多数现成的电缆都能正确连接以进行硬件流控制。确保终端的波特率设置为与您给 getty 的波特率相同,并且其“数据位”为 8。然后在计算机控制台上键入“init q”以应用您对 inittab 文件所做的更改。您现在应该在终端上看到登录提示符。如果看不到,请敲击终端的回车键。如果这不起作用,请阅读本文档的更多内容和/或参阅 故障排除。
这些论点中的许多也适用于 GUI“瘦客户端”类型的终端。如今,人们经常为这种终端辩护,推广者正在设计新的口号和名称,试图以另一个名称推销现代终端概念。例如“云计算”。
今天的 PC 非常强大,以至于一台 PC 通常可以同时支持多人使用,特别是当他们执行低负载任务(例如文本编辑、数据输入等)时。一种方法是将多个终端通过调制解调器或直接电缆连接连接到一台 PC(或其他主机计算机)。为此,通常最好拥有一个多用户操作系统,例如 Linux,以便终端上的每个用户都可以独立使用计算机。这被称为“时间共享”,但今天这不是一个好的术语,因为通过网络进行的“分布式”计算也是一种时间共享。最好将其描述为“集中式”计算。但中央计算机可以通过网络连接到世界其他地方,以便终端用户可以发送电子邮件、浏览互联网等。因此,它也不完全是“集中式”。
大约在 2000 年之前,终端很少与 PC 一起使用,因为用于它们的流行操作系统(Windows、DOS 和 Mac)直到 1998 年(适用于 MS Windows NT)才成为多用户操作系统,并且以前不能很好地支持终端。现在 Linux 这种多用户操作系统可以免费用于 PC,因此将终端与 PC 一起使用变得更加可行。虽然文本终端不够智能,无法支持当今大多数计算机用户期望的那种图形用户界面 (GUI),但瘦客户端类型的终端可以。
当计算机(包括 PC)非常昂贵时,更低的硬件成本是使用终端的一个显着优势。如今,随着廉价 PC 的出现,成本节省成问题。我在几年前 PC 更贵的时候写了接下来的三个段落。它们今天仍然有效,但意义不大
如果几个人同时使用同一台计算机,则在相同的服务水平下,所需的硬件量会减少。一种节省是由于代码共享。硬盘上的应用程序文件以及内存中的共享库(即使人们运行不同的程序,只要他们在其代码中使用一些相同的功能)都是共享的。另一种节省是由于峰值负载的减少。当人们缓慢输入信息、思考、交谈或离开办公桌时,单台 PC 的硬件可能大部分时间处于空闲状态。让几个人同时使用同一台计算机可以充分利用大部分本来会被浪费的空闲时间。
这些节省是巨大的。可以粗略估计(使用统计理论),对于 9 个人(8 个终端和 1 个控制台),共享 PC 只需要大约 3 倍的容量(在内存、磁盘存储、CPU 功率等方面),才能为每人提供相同的服务水平。因此,这样一个共享系统的计算硬件的每个用户的成本应该只有大约 1/3。然而,显示硬件(CRT、键盘、视频电子设备等)的成本在两种情况下大致相同。终端增加了在主机计算机上需要额外的物理电缆连接器(例如串口)的成本。
为了与 PC 进行公平的比较,终端应具有与 PC 显示器相同的功能。不幸的是,用于 Linux (X Window) 的彩色图形终端,具有高速通信的成本与 PC 几乎相同,因此在这种情况下,硬件成本没有多少(如果有的话)节省。但是对于文本终端,会有一些节省,特别是如果以低成本获得二手终端。
对于集中式计算,软件(以及软件更新)只需要在一台主机计算机上安装和配置,而不是多台。负责这台计算机的人员可以控制和配置安装在其上的软件。如果控制主机计算机的人员做得非常出色,并且了解其他用户的需求和偏好,这将是有利的。可以限制用户玩游戏或上网等。集中控制是否可取取决于具体情况。从某种意义上说,这是剥夺了用户控制他们使用计算机做什么的“权利”,包括那些可以提高他们的工作效率和/或娱乐他们的东西。
使用终端,计算机硬件升级仅在一台计算机上进行,而不是多台。这节省了安装人工。虽然主机计算机升级的硬件成本将高于单台 PC(因为主机需要的计算能力比 PC 更多),但成本将大大低于升级许多 PC 的硬件的成本,这些 PC 被用来代替终端。
文本终端在技术上已经过时,因为只需稍微增加硬件成本,就可以构建更智能的终端(具有相同的显示质量)。情况并非总是如此,因为在 1980 年左右,内存的成本为每兆字节数千美元。如今,由于内存和处理器的成本很低,只需增加约 10% 或 20% 的硬件成本,就可以将文本终端变成 GUI 图形终端。
由于 PC 可以模拟终端,因此几乎每个使用计算机的人都可以使用终端模拟器,直到 PC 在 2000-2010 年代开始从新型号中移除串口。您可能会认为,现在文本终端的需求会更大,因为只有购买串口才能在较新的 PC(没有串口)上可行地模拟直接连接的终端。但是,如果想要通过串口将文本终端(包括模拟终端)连接到 PC,如果 Linux PC 没有串口,他们将会倒霉。因此,消失的串口往往使文本终端更加过时。
文本终端(或曾经)没有完全过时的原因是
另请参阅 关于终端工作原理的一些细节 部分
每个终端都连接到主机计算机(通常只是一台 PC)上的串口。端口有名称/编号。前几个是:ttyS0、ttyS1、ttyS2 等。
这些由位于 /dev (设备) 目录中的特殊文件表示。ttyS0) 对应于 DOS 或 Windows 中的 COM1。ttyS1) 对应于 COM2,等等。有关这些及相关“设备”的详细信息,请参阅 终端特殊文件。
当主机启动时,它会运行程序 getty。getty 程序运行 “login” 程序以供人们登录。请参阅 Getty(在 /etc/inittab 中使用)。“login:” 提示符会出现在屏幕上。终端和/或控制台的人员登录(在给出密码后)然后可以访问计算机。当需要关闭终端时,每个人都必须注销(并关闭终端电源)。有关限制登录(包括允许 root 用户在终端登录)的信息,请参阅 登录限制。
如果有人观察某人在终端上打字,那么他键入的字母会同时出现在屏幕上。一个天真的人可能会认为,一个人键入的内容直接从键盘发送到屏幕,并复制一份发送到计算机(类似于半双工,请参阅下一段)。通常发生的情况是,键盘上键入的内容仅直接发送到主机,主机反过来将接收到的每个字符回显到终端(称为全双工)。在某些情况下(例如密码或简洁的编辑器命令),键入的字母会被有意地不回显。
全双工意味着存在两个(双向)单向通信链路。全双工是终端的常态。半双工是双工的一半,意味着只有一个单向通信链路。此链路必须由双向通信共享,并且一次只能使用一个方向。在这种情况下,计算机将无法回显您键入(并发送给它)的字符,因此终端还需要将您键入的每个字符直接发送到终端屏幕。一些终端具有很少使用的半双工操作模式。
CRT 显像管上的图像几乎会立即消失,除非电子束频繁地在屏幕上重新绘制图像。由于发送到终端的文本需要停留在屏幕上,因此屏幕上的图像必须存储在终端的内存芯片中,并且电子束必须重复扫描屏幕(例如每秒 60 次)以保持图像。有关更多详细信息,请参阅 终端内存详情。
终端受计算机控制。计算机不仅向终端发送文本以在屏幕上显示,还向终端发送命令,这些命令会被执行。这些是 控制代码(字节)和 转义序列。例如,CR(回车)控制代码将光标移动到屏幕的左边缘。某个转义序列(多个字节,其中第一个字节是“转义”控制代码)可以将光标移动到屏幕上由转义序列内部的参数指定的位置。
早期终端只有少数此类命令,但现代终端有数百个命令。可以更改某些区域的显示外观:例如,亮、暗、下划线、闪烁和反相视频。终端中的扬声器可以在按下任何键时“咔哒”一声,或者在发生错误时发出蜂鸣声。功能键可以被编程为具有特殊含义。可能存在各种字体。显示器可以向上或向下滚动。可以擦除屏幕的指定部分。可以使用各种类型的流量控制来停止数据流,当发送到终端的字节速度快于终端可以处理的速度时。还有更多,您将从查看高级终端手册或互联网链接 转义序列列表 中看到。
虽然为美国制造的终端都使用相同的 ASCII 码作为字母表(IBM 终端除外,它使用 EBCDIC),但不幸的是,它们并非都使用相同的转义序列。即使在建立了各种 ANSI(和 ISO)标准之后,这种情况仍然发生,因为这些标准从未足够先进。此外,旧终端通常缺乏新终端的功能。这可能会导致问题。例如,计算机可能会向终端发送一个转义序列,告诉它将屏幕分成两个指定大小的窗口,但没有意识到终端无法执行此操作。
为了克服这些问题,建立了一个名为 “termcap”(意思是 “终端功能”)的数据库。Termcap 后来被 “terminfo” 取代。此数据库驻留在计算机上的某些文件中,并且每个终端型号都有一个部分(有时是一个单独的文件)。对于每个型号(例如 VT100),都提供了一个功能列表,包括可用转义序列的列表。例如,blink=\E5m 表示要使光标开始闪烁,必须向终端发送:Escape 5 m。有关更多详细信息,请参阅 Termcap 和 Terminfo(详细) 部分。应用程序可以通过调用某些 C 库函数来利用此数据库。其中一组大型程序(超过 200 个)名为 “ncurses”,并在 “ncurses” 的手册页中列出,该手册页随开发人员的 ncurses 包一起提供。还有一个 NCURSES-programming-HOWTO。
环境变量 TERM 是 Linux 认为您正在使用的终端类型。大多数应用程序使用它来查找 terminfo 数据库中的功能,因此 TERM 需要正确设置。但是,正确的接口不仅仅是计算机了解终端的功能。
为了使字节从计算机流向终端,必须将终端设置为以与从终端发送出来的波特率(每秒比特数)相同的波特率接收字节。如果终端设置为以 19,200 波特接收,而计算机以 9600 波特发送字符,则屏幕上只会看到乱码(或可能什么也看不到)。您可以从终端的 “设置” 菜单中选择终端的波特率(以及许多其他功能)。大多数终端在其 “设置” 菜单中都有大量选项(请参阅 终端设置(配置)详情)。计算机串行端口也有选项,并且这些选项必须以兼容的方式设置(请参阅 计算机设置(配置)详情。
当今大多数终端都具有多种仿真(个性或 “终端模式”)。以前由 DEC(Digital Equipment Corporation,现在的 Compaq)制造的终端型号以 VT 开头(例如 VT100)。许多其他非 VT100 的终端可以设置为仿真 VT100。Wyse 是直到 2005 年左右的主要终端制造商。他们的大多数终端都可以仿真各种 DEC 终端,例如 VT100 和 VT220。因此,如果您想使用 VT320 终端,您可以选择使用 “原生” 个性中的真实 VT320,或者可能使用能够仿真 VT320 的其他终端。
“原生” 个性通常具有更多功能,因此,在其他条件相同的情况下,“原生” 通常是最好的选择。但其他条件可能不相同。由于 Linux 控制台仿真 VT102,因此您可能希望终端仿真它(或接近它的东西,例如 VT100)。这将有助于确保某些可能无法正确处理终端的程序仍然可以在您的终端上正常工作。如果程序找不到您终端的 terminfo(或找不到某些功能),则某些程序会假定您正在使用 VT102。因此,如果程序无法在您的非 vt102 终端上正确工作,如果您不为您的终端提供良好的 terminfo 文件,则很可能是您的错。使用 “原生” 然后报告任何错误将有助于发现和修复可能无法检测到的错误。
最常见的仿真类型是将 PC 像 vt100 终端(或类似终端)一样使用。加载到 PC 内存中的程序进行仿真。在 Linux 中(除非您在 X Window 中),PC 显示器(称为控制台)仿真 “Linux” 类型的终端(接近 vt100)。即使 X Window 中的某些窗口也仿真终端。请参阅 终端仿真。
在 PC 上,显示器通常是控制台。它仿真 “Linux” 类型的终端。您可以作为虚拟终端登录到它。请参阅 控制台。它接收来自内核的有关启动和关闭进度的消息。您可以将通常发送到控制台的消息发送到终端。要获得此功能,您必须手动修补内核,但对于内核 2.2(或更高版本),这是一个 “make config” 选项。请参阅 使串行终端成为控制台。
“tty” 是 “Teletype”(电传打字机)的缩写。第一批终端是电传打字机(类似于远程控制的打字机)。请参阅子节 电传打字机。可以在 “Linux Allocated Devices”(应包含在内核源代码中)中找到 Linux 设备列表(/dev 目录中的内容)。它仅用一两个词 “描述” 了每个设备的用途,但没有告诉您如何使用它们。
计算机将每个串行端口都视为 “设备”。它有时被称为终端设备,因为在过去,终端是串行端口最常见的用途。对于每个这样的串行端口,在 /dev(设备)目录中都有一个特殊文件。/dev/ttyS0) 是串行端口的特殊文件,在 DOS/Windows 世界中被称为 COM1。
要将文本发送到终端,您可以将某些命令行命令的标准输出重定向到相应的特殊文件。例如,在命令提示符下键入 “echo test > /dev/ttyS1” 应该将单词 “test” 发送到 ttyS1 (COM2) 上的终端,前提是您对 /dev/ttyS1 具有写入权限。类似地,键入 “cat my_file > /dev/ttyS0” 会将文件 my_file 的内容发送到 COM1 (ttyS0)。
伪终端是成对的设备,例如 /dev/ptyp3 和 /dev/ttyp3。没有与它们中的任何一个直接关联的物理设备,甚至没有串行端口连接器。但是,如果一个程序将 ttyp3 视为串行端口,则读取和写入该端口的内容将出现在该对的另一个成员 ptyp3 上,另一个程序使用 ptyp3 来读取和写入。因此,两个程序通过这种方法相互通信,并且 ttyp3 上的一个程序认为它正在与串行端口通信。它有点像这两个 tty 之间的 “管道”。
对于与 ttyp3 通信,任何设计用于与串行端口通信的程序都可以。但是对于与 ptyp3 通信的另一个程序,它必须是专门编写的才能与它通信。主要是程序员必须关注伪终端,大多数用户不需要担心它们。
这是一个示例:如果有人通过网络使用 telnet 连接到您的计算机(您是 telnet 服务器),则在您的计算机上处理此连接的 telnet 程序部分可能会最终连接到伪终端 ptyp2。getty 程序应在相应的 ttyp2 上运行。Getty 认为它正在与终端通信。当 telnet 从远程客户端获取字符时,它会通过 ptyp2 到 ttyp2 到 getty,然后 getty 发送回 “login:”,并通过 ttyp2、ptyp2、您的服务器 telnet 程序路由,然后输出到网络返回到客户端。在这里,登录程序和 telnet 服务器程序通过 “伪终端” 相互通信。请注意,客户端计算机上没有使用伪终端,只有 telnet。当然,服务器为每个客户端分配一个伪终端(在服务器上)。
在 X Window 中,终端仿真器程序(例如 xterm)使用伪终端。Linux 下的业余无线电程序也使用它们。通过使用某些应用程序软件,可以将 2 个或更多伪终端连接到同一个物理串行端口。
对于伪终端对(例如 ptyp3 和 ttyp3),pty... 是主终端或控制终端,而 tty... 是从终端。
只有 16 个 ttyp:ttyp0-ttypf(f 是十六进制数字)。为了获得更多对,使用了更多字母(例如 q、r、s)而不是 p。例如,对 ttys8、ptys8 是一对伪终端。稍后,添加了更多字母,以便允许更多伪终端。当达到 z 时,它们会回绕到 a。这很令人困惑,但旧习惯很难改变。如今,Linux 允许例如 ttyp189,但它没有被使用。设备文件系统(已于 2004 年废弃)将使用 tty/s189。请务必不要键入例如 ttys2,如果您指的是 ttyS2(真正的串行端口)。
主终端和从终端实际上是同一个 “端口”,但从终端由应用程序使用,主终端由网络程序(或类似程序)使用,该程序向从端口提供(和获取)数据。使用从端口的程序可以 “按原样” 运行,因为它认为它正在与串行端口通信。
Unix98 伪终端(在 Linux 上可用)比上述更高级,但基本概念是相同的(仅设备名称和创建方法发生更改)。它根据请求创建伪终端设备,因此无需检查您可能想要使用的伪终端是否正在使用中。通过打开 /dev/ptmx,将创建一个新的伪终端对。主终端不会显示为设备,而只是一个文件描述符编号,传递给打开 /dev/ptmx 的计算机程序。但是从终端被放入 /dev/pts 目录中:例如 “/dev/pts/3”。
/dev/pts 目录被认为是 devpts 类型的文件系统,并出现在已挂载文件系统的列表中。虽然 “文件” /dev/pts/3 看起来像是现在已过时的设备文件系统中的条目,但 /dev/pts 实际上是一种完全不同的文件系统。
有关更多详细信息,请参阅 Linux 手册页 “pty” 和 “pts”(Unix 98 样式)。对于程序员,有手册页 openpty/forkpty(任一名称都显示相同的手册页),它假定您已经了解伪终端。有一个 usr/include/pty.h 文件供程序员使用。在早期版本的 Linux 中,有一个 pty.o 模块,但现在似乎已将其内置到内核中。以下是编译 Linux 2.6 内核时可用的一些选项示例
CONFIG_UNIX98_PTYS=y CONFIG_LEGACY_PTYS=y
CONFIG_LEGACY_PTY_COUNT=256
/dev/tty 代表当前进程的控制终端(如果有)。要找出哪些 tty 连接到哪些进程,请在 shell 提示符(命令行)下使用 “ps -a” 命令。查看 “tty” 列。对于您所在的 shell 进程,/dev/tty 是您现在正在使用的终端。在 shell 提示符下键入 “tty” 以查看它是什么(请参阅手册页 tty(1))。/dev/tty 有点像指向实际终端设备名称的链接,并为 C 程序员提供了一些附加功能:请参阅手册页 tty(4)。
N 代表整数。在 Linux 中,这些终端的一种用途是与 ISDN 驱动程序包一起使用:isdn4linux。ttyIN 有点像 ttySN,但它仿真调制解调器,可以给出调制解调器命令。
在 Linux 中,PC 显示器通常称为控制台,并且有几个与其关联的设备特殊文件:vc/0 (tty0)、vc/1 (tty1)、vc/2 (tty2) 等。当您登录时,您在 vc/1 上。要转到 vc/2(在同一屏幕上),请按下 2 个键 Alt(左)-F3。对于 vc/3,请使用 Left Alt-F3,依此类推。这些(vc/1、vc/2、vc/3 等)称为 “虚拟终端”。vc/0 (tty0) 只是当前虚拟终端的别名,系统消息将发送到此处。因此,无论控制台(显示器)显示哪个虚拟终端,都将在控制台上看到来自系统的消息。
您可以登录到不同的虚拟终端,从而同时进行几个不同的计算机会话。只有系统或 root 用户可以写入 /dev/vc/0,/dev/console 有时会链接到它。有关控制台的更多信息,请参阅 Linux 控制台。
/dev 目录附带了许多设备特殊文件。如果您需要不在那里的东西,您可以尝试使用 “mknod” 命令创建它。有关如何为串行端口执行此操作的信息,请参阅手册页 ttys(4)。要使用 mknod
,您必须知道主设备号和次设备号。您可以通过在 /dev 目录中使用 “ls -l
” 命令来推断您需要的编号。它将显示现有特殊文件的主设备号和次设备号。
如果您对终端几乎一无所知,建议您首先阅读 简介,并阅读 终端工作原理概述。
终端屏幕可能每秒刷新自身 60 次,图像来自存储在终端内存中的图像。对于 PC,显示器的图像存储在计算机内部的视频卡上,但对于终端,视频卡的等效物在终端内部。对于文本终端,图像的存储使用很少的内存。不是将屏幕上的每个点(像素)都放入内存中,并需要存储大约 25 万个点,而是使用了一种更有效的存储方法。
屏幕上的文本可以在终端内存中用 ASCII 字节表示,屏幕上的每个字符一个字节。整个屏幕仅占用大约 2K ASCII 字节。为了显示这些字符,终端还必须知道几乎 100 个可打印 ASCII 字符中每个字符的位图(形状)。如果字符的位图使用例如 15 个字节,则所有 ASCII 字符的位图(字体)仅需要大约 1.5K 的内存。扫描此 ASCII 文本和字体内存,以便将生成的图像每秒约 60 次放在屏幕上。这是一种共享内存的形式,其中字母(例如字母 e)的单个位图由屏幕上的许多字母 e 共享。低内存需求意味着 1980 年代早期生产显示器的成本很低,当时内存成本比今天高几千倍(当时每千字节的成本为几美元)。
第一批终端有点像远程控制的打字机,只能 “显示”(在纸上打印)从计算机发送给它们的字符流。最早的型号称为 电传打字机。“tty” 这个名称只是 “Teletype” 的缩写。早期的终端可以像打字机一样执行换行和回车,并在收到响铃字符时响铃。由于缺乏重要功能,这是第一种被标记为 “哑终端” 的终端类型。当计算机无法确定它正在与哪种终端通信时,今天有时会使用这种终端接口(使用名为 “dumb” 的终端类型)。
终端具有许多功能,其中一些功能始终存在,而另一些功能则需要来自计算机的命令才能更改或激活。为了在计算机的控制下使用所有这些功能,需要建立特殊代码,以便计算机可以告诉终端要做什么。主要有两种类型的此类代码:转义序列和控制代码(控制字符)。转义序列的数量远多于控制代码。
控制代码(或控制字符)由 ASCII 字母表的前 32 个字节组成。它们包括以下内容:回车(光标到最左侧)、换行(光标下一行)、退格、转义字符、制表符和响铃。它们通常不在屏幕上显示。通常有一个命令,您可以将其提供给终端,这将导致它们在终端接收到时显示。它被称为 “显示控制” 或 “监视器” 之类的东西。如果您这样做,那么显示可能会看起来很混乱,因为所有以 ESC(转义)控制字符开头的转义序列不再被执行。应该出现在屏幕顶部或底部的单词将出现在其他位置。用于在屏幕上重新定位光标的转义序列会显示,但光标不会移动到转义序列指示的位置。
由于控制代码远远不够用以完成所有操作(并且由于某些原因,并非所有控制代码都被利用),因此使用了许多转义序列。它们由 “转义” (ESC) 控制字符后跟一系列普通字符组成。在接收到转义字符后,终端会检查其后的字符,以便它可以解释序列并执行来自计算机的预期命令。一旦它识别出有效序列的结尾,进一步接收到的字符只会显示在屏幕上(除非它们是控制代码或更多转义序列)。某些转义序列可能带有参数(或自变量),例如在屏幕上移动光标的坐标。参数成为转义序列的一部分。网上有某些终端的 转义序列列表,但它很简洁。
您终端的转义序列列表应在终端的 “程序员手册” 中。除了非常旧的终端之外,可能有两三百个这样的序列。如果您没有这样的手册,则很难找到它们。其中一些序列在互联网上可用。一个链接是 转义序列列表。通过在互联网上搜索一个序列(例如 ESC[5m),您可能会遇到一个很长的列表。
确定其中一些序列的另一种方法是找到终端的 terminfo 条目 (termcap) 并对其进行手动解码。请参阅本文档中的 Terminfo 和 Termcap(详细) 和/或互联网上的 Termcap 手册。不幸的是,终端的 terminfo (termcap) 通常不会列出终端可供使用的所有转义序列,但幸运的是,最重要的序列通常都在那里。
终端具有生成字符属性的各种方法,例如粗体、反相视频、下划线等。用户应该无需担心这是如何完成的,除非它为某些旧终端带来了问题,并且较新终端的设置菜单中有时会提供此选项。
魔术饼干方法已过时。它是定义属性的最简单(也是最差)的方法:使用某个字节作为属性的开始,另一个字节作为属性的结束。例如,“开始下划线” 魔术饼干字节放置在要加下划线的第一个单词之前。这些额外的字节被放入屏幕页面的内存中,就像显示为字符的字符字节一样。但这可能会扰乱每行字符数的计数,因为不可打印的魔术饼干字符与其他可打印字符混合在一起。这有时会引起问题。
一种更好的方法是使用更多内存,即为每个显示的字符分配一个属性字节(或半字节等)。PC 视频卡(用于文本)对于常见的 PC 显示器使用此方法。
可以使用 PC(包括其显示器)来仿真终端。但是,PC 变得如此强大,以至于 PC 容量的只有一小部分被用来运行仿真。那么为什么不制造一台计算能力低的微型 PC,使其勉强能够完成仿真终端的任务呢?然后将这种微型设备称为文本终端,并指出必须提供并插入 PC 显示器才能使用此终端。这种设备存在,并且只有大约一英寸高。它们有时被称为小尺寸终端。它们的优点是价格便宜、占用空间小,并且可能能够使用否则可能会被丢弃的剩余显示器。
与单色或大多数真实的文本终端相比,仿真的文本终端通常具有颜色,因为它在 PC 彩色显示器上显示。请参阅 仿真终端上的颜色
一些真实的终端具有彩色显示器,但大多数终端要么没有颜色,要么具有白色以外的固定 “颜色” 显示器,例如绿色或琥珀色。所有终端都有黑色(电子束关闭 = 零亮度)。真实的彩色终端可以将文本和背景的颜色更改为许多不同的颜色,而单色终端只能更改固定颜色的亮度。
但是,更改亮度等提供了很多可能性。例如,黑白(单色)终端可以通过改变亮度来获得白色、灰色和黑色。一些单词可以是浅灰色背景上的黑色,而另一些单词则通过白色背景上的黑色突出显示。此外,还有黑底白字、下划线和闪烁。
真实的颜色工作方式类似于计算机显示器或电视屏幕上的颜色。CRT 上永久固定着三种颜色的点,每种颜色的亮度都由其自身的电子束(3 束)控制。真实的文本终端的单色具有固有的更好分辨率,因为它不依赖于永久固定在屏幕上的点。对于文本终端,颜色的唯一用途是区分文本,而这种优势通常不值得以更差的分辨率为代价。因此,单色在历史上可能更好,因为它也成本更低。但是今天,彩色显示器无处不在,并且自真实文本终端的旧时代以来,分辨率得到了提高。
对于双会话,终端具有两个状态相同的串行端口。每个端口都连接到不同计算机上的串行端口。因此,可以登录到两台不同的计算机,每个会话都在分屏窗口中显示。或者,每个会话可以全屏运行,并使用 “热” 键(或类似键)在会话之间切换。也可以连接到同一台计算机上的两个不同的串行端口并登录两次(类似于控制台上的 “虚拟终端”)。程序 “screen” 将使连接到单台计算机的任何普通终端(单会话)运行两个或更多 “会话”。
许多终端在背面都有一个连接器用于此类端口。它可能被标记为 “Aux” 或 “Printer” 等。一些打印机端口用于并行打印机,而另一些则用于串行打印机。如果打印机连接到打印机或辅助端口,则按下某些键将打印屏幕。还可以使屏幕上显示的所有内容也发送到打印机。如果端口是辅助端口,则可以将其连接到另一台计算机,并且几乎可以像上面一样进行双会话。但是,终端内部的视频内存可能无法保留两个会话,因此您可能需要在切换到另一个会话时刷新屏幕。可能也不会有热键,但可能会对可编程功能键进行编程以执行此操作。存在各种用于控制此类端口的组合键和转义序列。请参阅 打印机 Esc。
有一个名为 vtprint
的程序,旨在将打印作业(仅文本)发送到您的终端,以便在连接到终端的打印机上打印。它的主页是 vtprint
。它也包含在 Linux 的 Debian 发行版中。xprt
(也在 Debian 中)似乎也做类似的事情,但仅适用于 X Window 终端 ??
如果您在 PC 上没有额外的端口用于打印机或商店中的 “销售点” 用途,则使用打印机端口进行打印可能很有用。“透明打印模式” 是指 PC 发送到终端的任何内容都将发送到打印机。如果您希望打印机能够将字节发送到 PC(反方向),则(根据 Wyse)它是 “双向模式”。Wyse “辅助打印模式” 只是透明打印模式,其中终端屏幕监视正在打印的内容。
许多终端允许在其视频内存中存储多个页面。有时页面大小与屏幕相同,但有时页面大小更大,以便滚动将显示页面的未见部分。因此,当查看屏幕时,在显示的上方或下方的同一页面上可能存在隐藏的文本。此外,如果不仅仅只有一个页面,则这些其他页面上可能存在隐藏的文本。页面的一种用途是在支持双会话的终端上。每个会话都可以有自己的页面,并且可以在它们之间来回切换。
即使您只有一个页面终端,并且页面大小等于屏幕上显示的内容,当主机向终端发送更多数据时,您仍然会看到文件的其他页面(等等)。在终端内存中存储其他页面的一个优点是,您可以立即跳转到它们,而无需等待一秒左右的时间从主机传输它们。
ncurses 支持多页面。还有一个名为 “Multiscreen” 的商业程序,它支持多页面,但可能不适用于 Linux ?? 据报道,Multiscreen 是 SCO 的一部分,并且有点像 Linux PC 控制台上的虚拟终端。Linux 程序 “screen” 使其看起来像您拥有多个页面,但它们存储在计算机中,并且每个运行的程序只能有一个类似页面的窗口。
字符集通常由字符列表(或表格或图表)以及分配给每个字符的字节码表示。字节的编码范围为 0 到 255(十六进制为 00 到 FF)。在 MS-DOS 中,字符集表称为 “代码页”。如果您不熟悉它们,则应检查这样的表格。它们有时包含在打印机和终端手册中,但在互联网上也可以找到。
许多字符集包括外语字母。但它们也可能包括用于绘制框的特殊字符和其他特殊字符。
ASCII 是文本终端上使用的传统英语字符集。它是一个 7 位代码,但即使您的终端设置为 8 位模式,通常也可以正常工作。在 8 位模式下使用 ASCII,高位始终设置为零。通常可以使用其他字符集,并且通常使用 8 位代码(在唯一选择是 ASCII 的非常旧的终端上除外)。大多数字符集的前半部分是传统的 128 个 ASCII 字符,后半部分(高位设置为 1)属于各种各样的字符集。字符集通常是 ISO 标准。要在终端上获得专用字符集,您可能需要将该字符集的软字体下载到终端的内存中。许多终端都有许多内置字符集(但可能没有您需要的字符集)。
以下是一些常见的 8 位字符集。CP 代表 IBM 发明的代码页字符集:CP-437 (DOS ECS)、ISO-8859-1 (Latin-1)、CP-850 (Multilingual Latin 1 -- 与 ISO Latin-1 不同)、CP-1252 (WinLatin1 = MS-ANSI)。MS Windows 使用 CP-1252 (WinLatin1),而互联网通常使用 Latin-1。除了 Latin-1 之外,还有几种 ISO-8859- 字符集。这些包括希腊语 (-7)、阿拉伯语 (-6)、东欧语 (-2) 以及 Latin-1 的替代品 (-15),称为 Latin-9。还有许多其他的字符集。例如,KOI8-R 比 IS0-8859-5 更常用于俄语。Unicode 是一个非常大的字符集,其中每个字符由 2 个字节表示,而不是仅仅一个字节。
关于字符集的更多信息如下:
一旦您找到您感兴趣的字符集名称(或字母数字标识),您就可以在互联网上搜索有关它的更多信息。
有一些特殊字符用于绘制方框等。还有许多非 ASCII 符号,例如项目符号。这些可以是 8 位字符集(例如 WinLatin1 = CP-1252)的一部分,也可以作为单独的字体提供(在 vt100 终端中)。您的 terminfo 可能已设置为使用它们。但是,如果您看到一行字母而不是一条线,则可能意味着 terminfo 尚未实现它们。
如果您的图形无法正常工作,您需要了解以下内容。默认的图形字符集是 vt-100 ANSI 图形。否则,必须在您的 terminfo 中定义字符串 acsc。它建立 vt-100 图形字符代码与您的终端上使用的实际代码之间的映射。因此,即使您的终端没有 vt-100 图形,它也可能仍然可以使用其他字符集生成此类图形。如果 terminfo 设置正确,这将自动发生。
如果必须切换字符集,则应定义 terminfo 变量:enacs、rmacs 和 smacs。注意 acs = 备用字符集。即使普通字符集的上半部分包含图形字符,它也可能被视为需要切换到的单独的 7 位字符集。
在 1960 年代,设计了 ASCII 7 位代码,以将 7 位字节映射到英文字母、数字、标点符号等。其他国家/地区也采用了 ASCII,但它们中的大多数都有一些 ASCII 代码中没有的其他字母。该怎么办?各种人决定从 ASCII 中清除某些符号(例如 ^、}),并用国家字母(带有上标点的字母等)替换 ASCII 字母。换句话说,他们用“国家替换字符”替换了 ASCII 字母。
这有很多问题,因为这主要是由销售计算机终端的公司完成的,导致缺乏标准化。另一个问题是有时需要清除的符号。这个问题在 1980 年代和 1990 年代通过采用具有更多字母的 8 位/字节字符集得到了解决。
许多西欧语言只需要几个 ASCII 中没有的其他字母。为了将它们放入 7 位代码中,他们借用了很少使用的 ASCII 符号的代码
@ [ \ ] ^ ` { \
} ~
符号 $ 和 # 有时也使用。因此,当使用这些替换字符集时,您将被剥夺使用某些 ASCII 符号的权利,因为它们现在用于新的非 ASCII 字母。现在 8 位字符代码已经取代了 7 位字符代码,最好使用 8 位代码,该代码既包含所有 ASCII 符号,又包含各种语言的非 ASCII 字符。还有 Unicode,它用相同的代码方案替换 8 位代码,以覆盖所有语言(好吧,几乎所有重要的语言)。
ISO-646(适用于 1972 年及以后)允许使用国家替换字符(7 位)。它规定可以借用上述字符代码,但没有指定哪些国家字符将替换它们。一些国家/地区通过在 ECMA 注册来标准化替换。
存在许多支持这些国家替换字符的终端,但您可能不想实现此支持,除非您有一些旧文件要读取。非常旧的终端可能只支持在其销售国家/地区的国家字符。后来的终端提供了语言选择。现代终端是 8 位的,不需要“国家替换”。存在以下语言/国家/地区的替换字符:英国、古巴(西班牙语)、荷兰语、芬兰语、法语、加拿大法语、德语、希伯来语、匈牙利语、意大利语、挪威语/丹麦语、葡萄牙语、西班牙语、瑞典语、瑞士语(德语)。
以下是从 Kermit 和 Unisys 文档中提取的一些字符集表
Swedish Danish
ASCII German Finnish Norwegian French
@ at-sign section ------- ------- a-grave
[ left-bracket A-diaeresis A-diaeresis AE-digraph degree
/ backslash O-diaeresis O-diaeresis O-slash c-cedilla
] right-bracket U-diaeresis A-circle A-circle section
^ circumflex ------ U-diaeresis ------- -------
` accent-grave ------ e-acute ------- -------
{ left-brace a-diaeresis a-diaeresis ae-digraph e-acute
| vertical-bar o-diaeresis o-diaeresis o-circle u-grave
} right-brace u-diaeresis a-circle a-circle e-grave
~ tilde ess-zet u-diaeresis -------- diaeresis
ASCII Italian Spanish
@ at-sign section section
[ left-bracket degree inverted-exclamation
/ backslash #-pound N-tilde
] right-bracket e-acute inverted-question-mark
^ circumflex ------- -------
` accent-grave u-grave -------
{ left-brace a-grave degree
| vertical-bar o-grave n-tilde
} right-brace e-grave --------
~ tilde i-grave --------
1980 年代中期之后制造的大多数终端都可以接受下载的软字体。这意味着它们可以显示几乎任何字符集,前提是您可以找到该字符集的软字体。如果您找不到所需的软字体,您可以随时创建自己的字体。一个免费的字体编辑器名为 BitFontEdit(由本文档的作者编写),位于
http://www.ibiblio.org/pub/Linux/utils/terminal/
有关映射键盘(和屏幕)以使用各种字体的信息,请参阅 字符映射:mapchan
终端键盘通常具有许多在 PC 键盘上找不到的键。很少有(如果有的话)实际终端会拥有所有这些键,并且大多数终端都会有此处未列出的其他键。有些终端有大量专用键,例如用于收银机的终端。通常有比此处显示的更多的键含义,因为当这些键与其他键(例如 shift 和 control)结合使用时,通常具有扩展含义。
少数文本终端支持鼠标。当鼠标被点击时,会向主机发送一个转义序列,告诉主机鼠标的位置。一篇关于 VT 终端鼠标的文章曾经在 http://www.cs.utk.edu/ shuford/terminal/dec_vt_mouse.html,但现在是一个死链接(2013 年)。尝试“Wayback”机器。这些用于鼠标的转义代码称为“DEC 定位器序列”。FALCO Infinity Series 终端,型号 ANSI-G 支持它。是否有任何 linux 应用程序支持此功能?
一种简单的终端仿真类型是设置一个真实的终端来仿真另一个品牌/型号的终端。为此,您可以从终端的设置菜单中选择您想要的仿真(在 Wyse 术语中称为“个性”)。本节将不讨论这种情况。
由于 PC 具有屏幕和键盘(与真实终端一样),但还具有更强大的计算能力,因此很容易使用一些计算能力使 PC 计算机的行为类似于真实的文本终端。第三种类型是您仅使用基于文本的界面(在控制台上 -- 通常只是监视器)到您的 Linux PC,可以通过 Xwindow 中的终端屏幕(例如 xterm)或通过“虚拟终端”。
要在 PC 上完全仿真真实终端,需要使用计算机的串行端口将仿真的终端连接到另一台计算机。这可以通过从串行端口到串行端口的直接电缆连接,或者通过调制解调器。但在其他情况下,串行端口将不直接用作接口。相反,接口可能是网络,并且往返于终端的字节流将通过网络数据包传输,可以通过串行端口上的调制解调器或通过以太网端口。
与远程计算机连接的仿真提供的不仅仅是真实的文本终端,因为执行仿真的 PC 也可以在仿真终端的同时执行其他任务。例如,对于串行端口连接,可以在 PC 上运行 kermit 或 zmodem,以通过串行线路(并且可能通过电话线通过调制解调器)将文件传输到您连接到的另一台计算机。仿真只需要在 PC 的一个虚拟控制台上运行,而其他虚拟控制台可用于在命令行界面中使用 PC。
对于 Linux,请参阅 将 Linux PC 用作串行端口终端。MS Windows 下也提供了用于此目的的仿真软件。请参阅 将非 Linux PC 用作终端 这可以用于将 Windows PC(作为文本终端)连接到 Linux PC。
大多数 Linux 自由软件只能仿真 VT100、VT102 或 VT100/ANSI、xterm、pterm 或 Wyse60(但不是完全仿真)。由于大多数 PC 都具有彩色显示器,而 VT100 和 VT102 是为单色显示器设计的,因此仿真通常会添加颜色功能(包括颜色选择)。有时仿真不是 100% 完美,但这通常不会引起太多问题。它们都不提供可编程功能键。在 MS Windows 下运行的非自由仿真软件可以仿真比自由 Linux 更多的终端。
有些人错误地认为他们可以通过将环境变量 TERM 设置为他们想要仿真的终端类型,在 Linux 控制台(监视器)上创建仿真器。这不起作用。TERM 的值仅告诉应用程序程序您正在使用的终端类型。这样它就不需要交互式地询问您这个问题(并且它太笨而无法探测终端以找出它的类型)。如果您在 Linux PC 监视器(命令行界面)上,它是一个类型为“Linux”的终端,并且由于您无法更改它,因此 TERM 必须设置为“Linux”。但是,这个“Linux”应该自动设置,而无需您执行任何操作。
如果您将其设置为其他内容,您就是在对应用程序程序撒谎。结果,它将错误地解释来自控制台的某些转义序列,从而导致界面损坏。由于 Linux 控制台的行为几乎类似于 vt100 终端,如果您错误地声称它是 vt100(或某些其他接近 vt100 的终端),它仍然可以几乎正常工作。在这种情况下,它可能看起来大部分时间都工作正常,但偶尔会给出错误。
虽然较新的免费 PuTTY 和 Terra-Term 程序可以直接连接到串行线路,但无法拨号,但大多数较旧的程序都通过串行端口调制解调器拨号。一些拨号程序用于通过调制解调器建立到 Internet 的 PPP 连接,例如 wvdial,并且通常不包括任何终端仿真。但一些其他程序(例如 minicom 或 seyon)同时执行终端仿真和调制解调器拨号(不使用 PPP,因此不容易使用它们连接到互联网)。但是,由于这些程序通过指定的串行端口(包括 PC 背面没有连接器的“内部”串行端口)连接到调制解调器,因此它们可以用于通过 PC 背面可能的串行端口连接器连接到串行线路。对于这种情况,您只需将它们设置为在不拨打电话号码的情况下连接即可。“picocom”程序仅进行终端仿真,尽管可以键入调制解调器命令和电话号码来手动拨号。这些程序对于测试调制解调器也很有用。Seyon 仅适用于 X Window,可以仿真 Tektronix 4014 终端。在过去(在互联网普及之前),人们可以使用拨号程序拨打一些公共图书馆来使用他们的目录和索引,甚至在线阅读杂志文章。但如今,这种活动几乎总是使用互联网完成,互联网上有更多的连接选择,并且没有长途电话费。
通信程序 C-Kermit(有时简称为 kermit)在 Linux 中不进行终端仿真(在 2006 年)。但是 Kermit 可以在其非自由 MS Windows 版本中仿真许多终端,因此您会看到很多关于 Kermit 可以进行终端仿真的说法。在 Linux 中,它只是您所在的任何终端与您连接的远程站点之间的半透明管道。因此,如果您在 Linux PC 上使用 kermit,终端类型将为“Linux”。如果您有一个 Wyse60 连接到您的 PC 并从中运行 kermit,您将在远程计算机上显示为 Wyse60(远程计算机可能无法处理 Wyse60 终端)。Minicom 仿真 VT102,如果您在 Wyse60 终端 vt102 上使用它,远程主机将认为您是 vt102 并向您发送 vt102 转义序列。这些将流入您计算机的串行端口,并在发送到您计算机上的另一个串行端口到您的 Wyse60 终端之前被转换为 Wyse 转义序列。C-Kermit 无法做到这一点。
DOS 下存在仿真器,例如 telix
和 procomm
,它们的工作方式也一样好。仿真的终端通常是旧的 VT100、VT102 或 ANSI(如 VT100)。
有许多终端仿真程序(例如 xterm、uxterm、gnome-terminal 和 konsole)可以在 X Window 下运行。它们通常可以仿真 VT102,但有些可能能够仿真 VT220 或 Tektronix 4014。它们为计算机提供命令行界面,但它们不像文本终端那样通过串行端口进行通信。有关此类仿真器的简短列表,请参阅 Ubuntu -- x-terminal-emulator。有些是多语言的。您的 Linux 发行版可能已为您安装了一个。
除非使用带有大型显示器的 X Window,否则真实终端通常比仿真终端更易于使用。它通常具有更好的文本分辨率(因为它是单色的),并且没有产生恼人噪音的磁盘驱动器。今天,现代彩色显示器的分辨率比旧文本终端的分辨率更好,并且磁盘驱动器也更安静。
对于 VT 系列终端,有一个测试程序:vttest
,以帮助确定终端是否像 vt53、vt100、vt102、vt220、vt320、vt420 等一样正常工作。没有文档,但它有菜单并且易于使用。要编译它,请运行 configure 脚本,然后键入“make”。可以从以下位置下载:http://www.ibiblio.org/pub/Linux/utils/console/
PC Linux 系统的控制台通常是文本模式下的计算机监视器。它仿真类型为“Linux”的终端,它使用的转义序列在手册页 console_codes 中。无法使此界面仿真任何其他内容。但是,当然,您可以在 PC 上运行仿真软件,以便监视器和键盘在仿真软件程序运行时仿真文本终端。将 TERM 环境变量设置为除“Linux”之外的任何终端类型都不会导致仿真该其他终端。它只会导致界面损坏,因为您错误地声明(通过 TERM 变量)您的“终端”的类型与它实际的类型不同:Linux。请参阅 不要使用 TERM 进行仿真
在 X Window 中,使用终端仿真器为您提供与控制台等效的功能。对于 KDE,他们选择将此仿真称为“konsole”。在某些情况下,Linux PC 的控制台是文本终端。可以重新编译 Linux,使终端接收通常发送到控制台的大部分消息。请参阅 使串行终端成为控制台。
监视器的“Linux”仿真非常灵活,并且具有远远超出它旨在仿真的 vt102 终端的功能。这些包括使用自定义字体和轻松重新映射键盘的能力。这些额外的功能驻留在控制台驱动程序软件(包括键盘驱动程序)中。控制台驱动程序仅适用于监视器,即使它用于控制台,也不适用于真实终端。因此,“控制台驱动程序”实际上是“监视器驱动程序”。在 Linux 的早期,人们无法使用真实终端作为控制台,因此“监视器”和“控制台”曾经总是同一事物。
stty 命令适用于监视器控制台,就像它是真实终端一样。它们由用于真实终端的相同终端驱动程序处理。 направленные к экрану байты сначала проходят через терминальный (tty) драйвер, а затем через консольный драйвер. 对于监视器,某些 stty 命令不起作用(例如设置波特率)。您可以将监视器波特率设置为任何允许的值(例如慢速 300 速度),但将文本放在监视器屏幕上的实际速度实际上不会改变。文件 /etc/ioctl.save 存储 stty 设置,仅在控制台处于单用户模式时使用(但您通常处于多用户模式)。这在 init 手册页中进行了解释(一点点)。
存在许多命令来利用控制台-监视器驱动程序提供的附加功能。不幸的是,使用扫描码或 VGA 卡的真实终端无法使用这些功能。要了解有关控制台的更多信息,请参阅 Keyboard-and-Console-HOWTO。另请参阅有关控制台的各种手册页(键入“man -k console”)。不幸的是,许多文档已经过时。
由于有免费程序可以仿真最常见的终端,因此您不太可能需要使用任何非自由软件。但是,如果您需要购买软件,则应彻底检查其他客户对它的评价。
除非您想仿真标准 vt100(或接近它)、xterm 或 Wyse 60,否则似乎没有太多可用于 Linux 的免费终端仿真软件。免费程序是 minicom、picocom,对于 GUI:seyon 和 PuTTY。Seyon 可以仿真 xterm 或 vt100,而 PuTTy 使用其自己的 termcap(terminfo),名为“putty”(将终端类型“putty”放在 /etc/inittab 中)。Putty 的“pterm”可以用作 xterm 的替代品。
PuTTY 比大多数其他仿真都新得多,它的主要用途是作为 SSH 客户端,但您可以为其串行端口连接设置配置。Seyon 较旧,但功能更多(其中一些功能很少需要)。还有更新的(但功能较弱的)GUI 界面“仿真器”:gtkterm 和 cutecom,它们都无法仿真任何终端,除了类型“dumb”?)。Seyon 还可以仿真 Tektronix 4014 终端。对于 Wyse,请参阅 Wyse 60 仿真器。
gtkterm(以及可能的 cutecom)都不使用转义序列,并且可以说仿真类型为“dumb”的终端,因此如果用作文本终端,在主机计算机上使用 vim 编辑器等编辑文件,它们会非常慢。gtkterm 易于设置,功能非常弱,但它会在屏幕底部显示其当前状态。
Minicom、PuTTY、picocom、gtkterm 或 cutecom 可以通过简单地启动其中一个程序来仿真直接连接的终端。对于 minicom,您必须为使用的串行端口配置它)。Picocom 就像一个迷你 minicom,没有自动拨号功能。Gtkterm 可以称为“迷你-迷你-迷你 minicom”。
Minicom:对于 minicom 的情况,您显然不会尝试拨号。当您想要退出 minicom(在您从另一台 PC 注销后)时,您可以使用 minicom 的 q 命令退出而不重置,因为没有调制解调器需要重置。当 minicom 启动时,它会自动向串行端口发送调制解调器初始化字符串。但是由于那里没有调制解调器,该字符串会被放在“login:”提示符之后。如果此字符串主要由大写字母组成,则另一台 PC 上的 getty 程序(运行登录)可能会认为您的终端只有大写字母,并尝试仅使用大写字母。为避免这种情况,请将 minicom 发送的调制解调器初始化字符串配置为 null(擦除初始化字符串)。
非自由终端仿真器“Procomm”(来自 MS 世界)可以在 Linux PC 上使用,如果您运行 dosemu 来仿真 Dos 或可能在仿真 MS Windows 的模式下使用。它的最后一个版本似乎是 2000 年左右发布的 4.8,因此它可能无法与现代 MS 系统一起使用。它由 Symantec 出售,Symantec 有许多支持它的文件,可以使用他们的搜索引擎在 http://www.symantec.com/ 找到。如果您查看互联网(在 2008 年),它仍在各地销售。
有一个专门的 Linux 发行版:Serial Terminal Linux。它会将 PC 变成类似 minicom 的终端。它很小(适合软盘),并且不会让您将 PC 用于任何其他目的(当它运行时)。它的链接已损坏,但一个类似的链接(在 2013 年),但在 CD 上,是 ASASHI DOT NET: PITUX, micro SERIAL TERMINAL LINUX
TERM(来自 Century Software 的非自由商业软件)终端仿真器 可以仿真 Wyse60、50;VT 220、102、100、52:TV950、925、912;PCTERM;ANSI;IBM3101;ADM-1l;WANG 2110。块模式可用于 IBM 和 Wyse。它在 Linux PC 上运行。
当您运行 telnet 或 ssh 等程序时,这会自动发生,当然前提是您的计算机已连接到网络(可能通过调制解调器)。Telnet 通常使用网络(通常是 Internet)将您的控制台(仿真类型为“Linux”的终端)连接到远程计算机,供您登录。但是,有一些免费程序允许您在 PC 上使用 IBM 终端仿真通过 telnet 连接到 IBM 大型机。
一个 IBM 程序仿真 IBM tn5250 终端和打印机,另一个仿真 IBM c3270。还有一个仿真 IBM pr3287 打印机(大型机认为它已连接到打印机)。Debian 发行版具有这些程序。据报告,tn5250 在 Linux 下仿真 vt 键盘,而不是它应该仿真的 5250 键盘。此外,据报告,MS Windows 版本的文档和键盘映射比 Linux 版本的更好。
存在在非 Linux PC 上运行的仿真器。它们允许您使用非 Linux-PC 作为终端连接到 Linux-PC。在 DOS 下,有许多程序不仅仿真终端,而且还允许您使用调制解调器拨号,以便您可以通过电话线连接到其他计算机(无需连接到 Internet)。具有历史意义的是 1994 年 2 月 Byte 杂志上的一篇文章,题为“DOS 串行通信”。它曾经在 http://www.byte.com/art/9402/sec8/art1.htm。
今天,Windows 附带“HyperTerminal”(以前在 Windows 3.x 和 DOS 中简称为“终端”)。与此竞争的是免费(开源)PuTTY 和非自由“HyperTerminal Private Edition”http://www.hilgraeve.com/htpe/index.html,它对企业来说是非自由的。它可以仿真 vt-220。PuTTY 仿真 xterm,据称也仿真 vt-102,但它没有文件传输功能(例如 zmodem),而 HyperTerminal 有。但是 PuTTY 允许显示高度超过 24 行(通过键入 LINES=32 将 Linux shell 变量 LINES 设置为 32)。Turbosoft 的 TTWin(非自由)可以在 Windows 下仿真 80 多种不同的终端。请参阅 http://www.ttwin.com/ 或 http://www.turbosoft.com.au/(澳大利亚)。另请参阅 WRQ
要使用 Mac 计算机仿真常用终端,请使用 PuTTY、Linux 的“minicom”(移植到 Mac OS X)或旧的“zterm”(共享软件)。对于 OS X 之前的非常旧的 Mac,请参阅迷你 HOWTO:Mac-Terminal。Carnation Software 具有非自由软件,可以在 Mac 上仿真各种终端。Mac OS X 具有“终端”程序,该程序为您提供一个终端窗口,就像 Linux X Window 中的 xterm 窗口一样。在该窗口中,您可以运行“minicom”(如果可用)。“fink”和“darwinports”项目都已将 minicom 移植到 Mac,但它们可能没有最新版本,您可能需要自己编译 minicom。
由于用于文本终端仿真的显示器几乎总是彩色显示器,因此您可以利用单词的颜色编码。除了以这种方式显示目录(请参阅 ls 功能示例)之外,一些其他 Linux 程序也显示颜色编码的文本。它似乎在没有任何配置的情况下发生,但可能存在颜色冲突。例如,如果您已将背景颜色设置为绿色,则如果程序向您发送绿色文本,则将很难或不可能阅读。
颜色通常通过程序向终端发送 ANSI 转义序列来工作。人们可能会认为仿真的终端会在 terminfo 中显示终端的 ANSI 转义代码。但是,情况通常并非如此,因为如果终端支持颜色,则似乎假定这些颜色将使用 ANSI 编码发送到终端。
如果您想查看这些编码是什么,请查看“man console_codes”。此手册页中的 ECMA-48 颜色代码似乎是 ANSI 颜色代码的子集。有关详细信息,请参阅 ANSI 转义代码 - 维基百科。请注意,这些 ANSI 代码涵盖的内容不仅仅是颜色。
对于 PuTTY,可以通过使用设置菜单并单击“Colours”来为每个 ANSI 代码选择要显示的精确颜色。例如,如果您的屏幕背景为浅绿色,则可以将该 ANSI 颜色重新映射为您选择的某种棕色阴影。请注意,浅绿色称为“Green Bold”。它是粗体,因为它包含大量白色,这使其成为浅色。
流控制(= 握手 = 步调调整)是为了防止过快的字节流使终端、计算机、调制解调器或其他设备溢出。溢出是指设备无法足够快地处理其接收的内容,从而丢失字节和/或产生其他严重错误。流控制的作用是暂停字节流,直到终端(例如)准备好接收更多字节。流控制在与其想要停止的字节流相反的方向上发送其信号以暂停流。流控制必须在终端和计算机上都进行设置。
流控制有两种类型:硬件和软件(Xon/Xoff 或 DC1/DC3)。硬件流控制使用专用信号线,例如 RTS/CTS 或 DTR/DSR,而软件流控制通过在普通数据线中发送 DC1 或 DC3 控制字节来发出信号。对于硬件流控制,电缆必须正确接线。
2 个串行端口之间的电缆中的数据字节流是双向的,因此有 2 个不同的流(和导线)需要考虑
你可能会问:“为什么不以足够慢的速度发送,以便设备不会溢出,然后就不需要流量控制呢?” 这是可能的,但通常比发送速度更快并使用流量控制要慢得多。 其中一个原因是,人们不能将串行端口的波特率设置为任何期望的速度,例如 14,500,因为只有离散数量的选择可用。 最好的选择是选择一个比设备能够跟上的速度稍高的速率,然后使用流量控制来使事情正常工作。
如果决定不使用流量控制,则速度必须设置得足够低,以应对最坏情况。 对于终端,这指的是当向其发送转义序列以执行比正常情况花费更多时间的复杂任务时。 对于调制解调器(带有数据压缩但没有流量控制),从计算机到调制解调器的速度必须足够慢,以便该速度在电话线上也可用,因为在最坏的情况下,数据是随机的并且无法压缩。 如果未能使用流量控制,则速度(在启用数据压缩的情况下)不会比不使用任何压缩时更快。
缓冲区在处理短时间的最坏情况时有所帮助。 缓冲区存储传入速度过快而无法立即处理的字节,并保存它们以供以后处理。
处理“最坏情况”(不使用流量控制或缓冲区)的另一种方法是在转义序列中添加一堆空字符(值为零的字节)。 有时会使用 DEL,前提是它们没有其他功能。 请参阅 识别 Del。
转义序列启动终端执行某些操作,当终端忙于执行操作时,它会接收到一堆它忽略的空字符。 当它接收到最后一个空字符时,它已完成其任务并准备好执行下一个命令。 这称为空填充。 这些空字符以前被称为“填充字符”。 添加这些空字符只是为了“浪费”时间,但这并非完全浪费,因为终端通常在接收空字符时保持忙于执行其他操作。 在流量控制普及之前,它在过去被广泛使用。 为了提高效率,应该添加适量的空字符,而弄清楚这一点很乏味。 这通常是通过反复试验来完成的,因为终端手册几乎没有帮助。 如果流量控制不能正常工作或未实现,则填充是一种解决方案。 stty
命令的某些选项涉及填充。
人们可能想知道串行端口怎么会发生溢出,因为数据字节传输中涉及的发送和接收串行端口都设置为相同的速度(以比特/秒为单位),例如 19,200。 原因是虽然接收串行端口电子设备可以处理传入的流速,但从串行端口获取和处理字节的硬件/软件有时无法应对高流速。
其中一个原因是串行端口的硬件缓冲区非常小。 较旧的串行端口的硬件缓冲区大小仅为一个字节(在 UART 芯片内部)。 如果缓冲区中接收到的一个数据字节在下一个字节到达之前没有被 CPU 指令移除(获取),则该字节会丢失(缓冲区溢出)。 较新的 UART,即大多数 16550,具有 16 字节的缓冲区(但可以设置为模拟单字节缓冲区),并且不太可能溢出。 它可以设置为在其缓冲区中的字节数达到 1、4、8 或 14 个字节时发出中断。 另一个计算机芯片(通常是计算机的主 CPU 芯片)的工作是将这些传入的字节从这个小的硬件缓冲区中取出并处理它们(以及执行其他任务)。
当这个小的硬件接收缓冲区的内容达到指定的限制(旧 UART 的一个字节)时,会发出中断。 然后计算机中断它正在做的事情,软件检查以找出发生了什么。 它最终确定它需要从串行端口的缓冲区中获取一个或多个字节。 它获取这些字节并将它们放入内核在主内存中维护的更大的缓冲区(也是串行端口缓冲区)。 对于发送缓冲区,当缓冲区为空(或几乎为空)时,串行硬件会发出中断,告知 CPU 向其中放入更多字节以发送出去。
终端也具有类似于计算机的串行端口和缓冲区。 由于到终端的字节流速通常远大于从键盘到主机计算机的反向流速,因此最有可能发生溢出的是终端。 当然,如果您将计算机用作终端(通过仿真),那么它同样容易发生溢出。
更容易发生溢出的风险情况是: 1. 当另一个进程禁用了中断时(对于计算机)。 2. 当主内存(或终端)中的串行端口缓冲区即将溢出时。
当接收器似乎即将被传入的字节淹没时,它会向发送器发送信号以停止发送。 这就是流量控制,流量控制信号始终以与它们控制的数据流相反的方向发送(尽管不在同一通道或线路中)。 该信号可以是作为数据线上的普通数据字节发送的控制字符(^S = DC3 = Xoff)(带内信令),也可以是 dtr-to-cts(或其他)信号线中的电压从正到负的转换(带外信令)。 使用 Xoff 称为“软件流量控制”,在专用信号线(电缆内部)中使用电压转换称为硬件流量控制。
对于终端,最常见的“停止发送”情况是终端无法跟上发送给它的字符,并且它向 PC 发出“停止”信号。 另一个例子是有人按下 control-S。 较不常见的是相反的情况,即 PC 无法跟上您的打字速度并告诉终端停止发送。 终端“锁定”其键盘,消息或指示灯应告知您这一点。 在锁定的键盘上键入的任何内容都将被忽略。 当 PC 完成其工作时,键盘应解锁。 如果没有解锁,则可能正在发生某种死锁。
另一种键盘锁定发生在向终端发送某个转义序列(或仅针对 Wyse 60 的 ^O 控制字符)时。 虽然前一种类型的锁定是由串行驱动程序完成的,但这种类型的锁定是由真实终端的硬件完成的。 如果发生这种情况,这是一个两难境地,因为您无法键入任何命令来摆脱锁定。 进入设置并重置可能有效(但它在我的 Wyse 60 上失败了,我不得不循环电源才能摆脱)。 也可以从另一个终端发送“解锁键盘”转义序列。
术语“锁定”有时也用于计算机被告知停止向终端发送的常见情况。 键盘未锁定,因此您键入的任何内容都会发送到计算机。 由于计算机无法向您发送任何内容,因此您键入的字符不会显示在屏幕上,并且可能看起来键盘已锁定。 滚动被锁定(滚动锁定),但键盘未锁定。
当接收器赶上其处理速度并准备好接收更多数据字节时,它会向发送器发出信号。 对于软件流量控制,此信号是控制字符 ^Q = DC1 = Xon,它在常规数据线上发送。 对于硬件流量控制,信号线中的电压从负(否定)变为正(肯定)。 如果终端被告知恢复发送,则键盘将被解锁并可以使用。
一些较旧的终端没有硬件流量控制,而另一些终端则在串行端口上使用了各种不同的引脚来实现此目的。 有关各种引脚及其名称的列表,请参阅 标准 Null 调制解调器电缆引脚排列。 最常用的引脚似乎是 DTR 引脚(或 DTR 引脚和 DSR 引脚)。
Linux PC 使用 RTS/CTS 流量控制,但 DTR/DSR 流量控制(某些终端使用)的行为类似。 DTR 流量控制(仅在一个方向上,也由某些终端使用)仅是 DTR/DSR 流量控制的 DTR 部分。
RTS/CTS 使用串行 (EIA-232) 连接器上的引脚 RTS 和 CTS。 RTS 表示“请求发送”。 当接收器的此引脚保持肯定(正电压)时,表示:继续向我发送数据。 如果 RTS 被否定(电压变为负),则否定“请求发送”,这意味着:请求不要向我发送(停止发送)。 当接收器准备好接收更多输入时,它会肯定 RTS,请求另一端恢复发送。 对于计算机和终端(均为 DTE 类型设备),RTS 引脚将流量控制信号发送到电缆另一端的 CTS 引脚(允许发送)。 也就是说,电缆一端的 RTS 引脚连接到另一端的 CTS 引脚。
对于调制解调器(DCE 设备),方案有所不同,因为调制解调器的 RTS 引脚接收信号,而其 CTS 引脚发送信号。 虽然这可能看起来令人困惑,但存在有效的历史原因,此处不赘述。
终端通常具有 DTR 或 DTR/DSR 流量控制。 DTR 流量控制与 DTR/DSR 流量控制相同,但它是单向的,并且不使用 DSR 引脚。 对于终端的 DTR/DSR 流量控制,DTR 信号类似于从 RTS 引脚发送的信号,而 DSR 引脚就像 CTS 引脚一样。
一些终端仅使用 DTR 流量控制。 这只是单向流量控制,以防止终端溢出。 它不能保护计算机免受某人打字速度过快而计算机无法处理的影响。 在标准文件传输串行电缆中,终端上的 DTR 引脚连接到计算机上的 DSR 引脚。 但是 Linux 不支持 DTR/DSR 流量控制(尽管某些多端口板的驱动程序可能支持 DTR/DSR 流量控制。) 解决此问题的一种方法是将终端上的 DTR 引脚简单地连接到计算机上的 CTS 引脚,并设置 RTS/CTS 流量控制 (stty crtscts)。 只要主机没有因您的打字速度过快而不知所措,并且徒劳地尝试锁定您的键盘而丢弃 RTS,单向的事实就不会影响任何事情。 请参阅 键盘锁定。 对于 DTR/DSR 流量控制(如果您的终端支持此双向流量控制),您可以执行上述操作。 但您还将终端上的 DSR 引脚连接到计算机上的 RTS 引脚。 那么,如果您打字速度过快,您将受到保护。
令人困惑的是,RTS 的原始用途与上述解释的意思几乎相反。 这种原始含义是:我请求向您发送。 此请求旨在从终端(或计算机)发送到调制解调器,如果调制解调器决定授予该请求,则会从其 CTS 引脚向计算机的 CTS 引脚发送肯定的 CTS:您被允许向我发送。 请注意,与现代 RTS/CTS 双向流量控制相比,这仅保护一个方向的流量:从计算机(或终端)到调制解调器。
对于较旧的终端,RTS 可能具有此含义,并且当终端有数据要发送时,RTS 会变为高电平。 上述用途是流量控制的一种形式,因为如果调制解调器希望计算机停止发送,它会丢弃 CTS(连接到计算机的 CTS),并且计算机停止发送。
旧的硬拷贝终端可能具有反向通道引脚(例如引脚 19),其行为类似于 RTS/CTS 流量控制中的 RTS 引脚。 如果纸张或色带用完,此引脚也会被否定。 将此引脚连接到主机计算机的 CTS 引脚通常是可行的。 可能有一个拨码开关来设置此信号的极性。
有些人认为硬件流量控制是由硬件完成的,但只有一小部分是由硬件完成的。 大部分实际上是由您的操作系统软件完成的。 UART 芯片和相关硬件通常完全不了解硬件流量控制。 当接收到硬件流量控制信号时(由于信号线极性翻转),硬件会向 CPU 发出电中断信号。 但是,硬件不知道此中断的含义。 CPU 停止它正在做的事情,并跳转到主内存中的一个表,该表告诉 CPU 去哪里找到一个程序,该程序将找出发生了什么并确定如何处理它。 在这种情况下,此程序会停止传出的字节流。
但是,甚至在这个程序停止数据流之前,它已经被中断停止了 CPU 的工作的中断停止了。 这是硬件流量控制更快地停止数据流的原因之一。 它不需要等待程序来执行此操作。 但是,如果该程序没有命令停止数据流,则一旦该程序退出,数据流将恢复。 因此,即使程序不是第一个实际停止数据流的程序,该程序对于停止数据流也是必不可少的。 中断发生后,串行端口的硬件发送缓冲区中已有的任何字节(最多 16 个)仍将被发送。 因此,即使使用硬件流量控制,数据流也不会立即停止。
使用软件流量控制需要检查每个传入的字节,以查看它是否是“关闭”字节。 这些字节通过 16 字节的接收缓冲区时会延迟。 如果“关闭”字节是进入此缓冲区的第一个字节,则在接收到另外 15 个字节时可能会出现等待。 然后将读取 16 个字节并找到“关闭”字节。 硬件流量控制不会发生这种额外的延迟。
这也是软件流量控制,需要知道它的设备驱动程序。 字节以数据包形式发送(通过异步串行端口),每个数据包都以 ETX(文本结束)控制字符结尾。 当终端收到 ETX 时,它会等待直到准备好接收下一个数据包,然后返回 ACK(确认)。 当计算机收到 ACK 时,它会发送下一个数据包。 依此类推。 Linux 不支持这个吗? 一些 HP 终端使用相同的方案,但使用 ENQ 而不是 ETX。
终端可以通过直接电缆连接、通过调制解调器或通过终端服务器连接到其主机计算机。 数据流可以是直接的字节序列(例如来自串行端口),也可以是网络上的数据包(例如 TCP/IP)。
可以购买额外的串行卡,这些卡上有许多串行端口,称为“多端口板”。 本 HOWTO 未涵盖这些板卡,但在 Serial-HOWTO 中列出了一些板卡(带有 URL)。
将终端连接到主机计算机的最简单方法是通过直接连接到计算机上的串行端口。 您也可以使用本节中的一些信息将一台计算机连接到另一台计算机(通过串行端口)。 大多数台式 PC 都配有一个或两个串行端口,其中一个可能被鼠标使用。 对于 EIA-232 端口,您需要一根零调制解调器电缆(PC 到 PC 电缆),该电缆交叉连接发送和接收线。 在以太网术语中,它将被称为“交叉电缆”(但以太网电缆不适用于串行端口)。 如果您想要硬件流量控制,您可能会使用 DTR 引脚(或 DTR 和 DSR 引脚)。
确保您拥有正确的电缆类型。 在计算机商店购买的零调制解调器电缆可能会奏效(如果它足够长),但它可能不适用于硬件流量控制。 这种电缆可能被标记为串行打印机电缆。 只有较大的计算机商店才可能备有此类电缆。 “调制解调器电缆”不起作用,因为电线是直通的(并且不交叉)。 请参阅 购买或制作 您自己的电缆。 确保您连接到 PC 的串行端口上的公头 DB25 或 DB9,而不是并行端口(母头 DB25)。
引脚编号通常印在引脚旁边的塑料上。 您可能需要明亮的光线和/或放大镜才能读取它们。 查看 DB 连接器的公头引脚,较宽的行朝上,左上角的引脚是 1(没有引脚 0)。 然后,此行中的下一个引脚是 2,依此类推。 此行的末尾是引脚 5 或 13。 然后,下一个引脚(6 或 14)位于下一行,一直向左且在引脚 1 下方。 如果您查看较宽的行朝上的母头连接器,则引脚 1 位于右上角。
这 3 个图适用于真正的文本终端。 但是,如果您用 RTS 代替 DTR,用 CTS 代替 DSR,则可以使用它们连接 2 台 PC。 (不要对 PC 到 PC 使用 4 芯电缆)。 对于终端,如果您只有 DTR 流量控制(单向),您可以消除 RTS 到 DSR 线。 如果您没有硬件流量控制,那么您也可以消除 CTS 到 DTR 线。 然后,如果您有 2@ 双绞线,那么您可以根据 使用双绞线电缆的凑合方案 为每个信号地线使用 2 根线。 对于 PC 上的 DB25 连接器,您需要
PC male DB25 Terminal DB25
TxD Transmit Data 2 --> 3 RxD Receive Data
RxD Receive Data 3 <-- 2 TxD Transmit Data
SG Signal Ground 7 --- 7 SG Signal Ground
CTS Clear To Send 5 <--20 DTR Data Terminal Ready
RTS Request To Send 4 --> 6 DSR Data Set Ready
如果您在 PC 上有 DB9 连接器,请尝试以下操作
PC DB9 Terminal DB25
RxD Receive Data 2 <-- 2 TxD Transmit Data
TxD Transmit Data 3 --> 3 RxD Receive Data
SG Signal Ground 5 --- 7 SG Signal Ground
CTS Clear To Send 8 <--20 DTR Data Terminal Ready
RTS Request To Send 7 --> 6 DSR Data Set Ready **
如果您在串行端口和终端上都有 DB9 连接器
PC DB9 Terminal DB9
RxD Receive Data 2 <-- 3 TxD Transmit Data
TxD Transmit Data 3 --> 2 RxD Receive Data
SG Signal Ground 5 --- 5 SG Signal Ground
CTS Clear To Send 8 <-- 4 DTR Data Terminal Ready
RTS Request To Send 7 --> 6 DSR Data Set Ready **
以上内容没有调制解调器控制线,因此请务必为 getty 提供“local”选项(相当于“stty clocal”)。 此外,如果您需要硬件流量控制,则必须在计算机上启用它(将 -h 标志与 agetty 一起使用)(相当于“stty crtscts”)。
以下 3 个图显示了完整的“标准”零调制解调器电缆。 您购买的电缆可能会以此方式接线。 另一种引脚排列是使 20 和 6 交叉,并使 8 交叉到 4 和 5。 这不会为直接连接的计算机提供硬件流量控制 (RTS/CTS)。 以上两种电缆都适用于使用软件 (Xon/Xoff) 流量控制(或无流量控制)的终端。 这些电缆都不能用于终端硬件流量控制,因为大多数真正的终端都支持 DTR 或 DTR/DSR 流量控制(握手),但 Linux 尚不支持(2000 年)。
PC male DB25 Terminal DB25
DSR Data Set Ready 6 <--|
DCD Carrier Detect 8 <--|- 20 DTR Data Terminal Ready
TxD Transmit Data 2 ----> 3 RxD Receive Data
RxD Receive Data 3 <---- 2 TxD Transmit Data
RTS Request To Send 4 ----> 5 CTS Clear To Send
CTS Clear To Send 5 <---- 4 RTS Request To Send
SG Signal Ground 7 ----- 7 SG Signal Ground
DTR Data Terminal Ready 20 -|--> 8 DCD Carrier Detect
|--> 6 DSR Data Set Ready
或者,完整的 DB9-DB25 文件传输(零调制解调器)电缆(不适用于终端硬件握手;请参见上文)
PC DB9 Terminal DB25
RxD Receive Data 2 <---- 2 TxD Transmit Data
TxD Transmit Data 3 ----> 3 RxD Receive Data
|--> 6 DSR Data Set Ready
DTR Data Terminal Ready 4 -|--> 8 DCD Carrier Detect
SG Signal Ground 5 ----- 7 SG Signal Ground
DCD Carrier Detect 1 <--|
DSR Data Set Ready 6 <--|- 20 DTR Data Terminal Ready
RTS Request To Send 7 ----> 5 CTS Clear To Send
CTS Clear To Send 8 <---- 4 RTS Request To Send
RI Ring Indicator 9 (not needed)
(是的,对于 DB9 和 DB25 连接器,引脚 2 和 3 的含义确实相反!)
以下是如何将两个 DB9 连接器连接在一起(但 DTR 流量控制将不起作用)
PC DB9 DB9
RxD Receive Data 2 <----- 3 TxD Transmit Data
TxD Transmit Data 3 -----> 2 RxD Receive Data
|--> 6 DSR Data Set Ready
DTR Data Terminal Ready 4 --|--> 1 DCD Carrier Detect
GND Signal Ground 5 ------ 5 GND Signal Ground
DCD Carrier Detect 1 <--|
DSR Data Set Ready 6 <--|-- 4 DTR Data Terminal Ready
RTS Request To Send 7 -----> 8 CTS Clear To Send
CTS Clear To Send 8 <----- 7 RTS Request To Send
RI Ring Indicator 9 (not used)
使用以上 2 个连接提供完整的调制解调器控制信号,并且似乎允许设置“stty -clocal”。 然后,必须先打开终端(肯定 DTR),然后 getty 等才能以正常方式打开端口。 但是,如果您未能先打开终端,则可能会遇到麻烦(请参阅 Getty 重新生成速度过快)。 因此,应使用默认值“stty clocal”(忽略调制解调器控制线),并且这些电缆中的其他电线则没有用处。
在过去可能不容易忽略调制解调器控制信号等的时代,对于缺少调制解调器控制导线的电缆,完成了以下“技巧”:在连接器的计算机侧,将 RTS 和 CTS 连接在一起,并将 DSR、DCD 和 DTR 也连接在一起。 这样,当计算机需要某个握手信号才能继续进行时,它会(错误地)从自身获得该信号。
长度超过 50 英尺左右的电缆可能无法在高速度下正常工作。 更长的长度有时可以正常工作,尤其是在速度较低和/或电缆是特殊的低电容类型和/或接收端的电子设备格外灵敏的情况下。 据称,在理想条件下,9600 波特时,1000 英尺可以正常工作。 覆盖长距离的一种方法是在每个串行端口附近安装 2@ 线路驱动器,以便将不平衡转换为平衡(反之亦然),然后使用双绞线电缆。 但线路驱动器很昂贵。
增加距离的另一种方法是尝试消除大部分由发送和接收数据线 TxD 和 RxD 中的电流产生的磁场。 为此,接地回路线,其电流大致相等(但方向相反),放置在发送和接收线旁边。 双绞线具有最佳的消除效果。 一些 DEC 终端为此目的具有两个信号地线。 例如,一对将是 TxD 和 SG(TxD),其中 SG 是信号地。 如果您使用带状电缆,请确保 TxD 和 SG(TxD) 线彼此相邻。 RxD 也是如此。
如果 PC 和终端都只提供一根信号地线,则可以将其分成双绞线电缆中的两根线以达到此目的。 您可能会认为回流电流将在两根信号地线之间平均分配。 这将仅消除大约一半的磁场。 但这比这更好的消除,因为回流电流更喜欢阻抗最小的路径。 如果数据信号(例如 TxD)的回流路径在其相同的双绞线中流回,则具有最低的阻抗(由于较低的电感)。 虽然我还没有看到这种方法的任何实验测试结果,但它应该允许更长的电缆长度。
如果您希望使用硬件流量控制(握手),您可能需要制作自己的电缆(或订购定制电缆)。 当然,如果二手电缆末端的连接器可以拆卸,您可以重新接线。 请参阅 安装 DB 连接器。 您需要确定终端是否为此目的使用 DTR 引脚,如果不是,则使用哪个引脚(或哪些引脚)。 设置菜单可能会给您一些线索,因为可能有一个选项用于启用“DTR 握手”(或流量控制),这当然意味着它使用 DTR 引脚。 它也可能使用 DSR 引脚。 请参阅 硬件流量控制 以获取其详细说明。 较旧的终端可能没有硬件流量控制的规定。
除非您将其用作延长电缆,并结合零调制解调器(交叉或文件传输)电缆或零调制解调器适配器,否则普通的“直通”电缆将不起作用。 确保电缆末端的连接器将与硬件上的连接器配合。 可以使用电话线,电话线至少是 4 芯的(并且可能是双绞线)。 屏蔽的特殊低电容电缆计算机电缆是最好的。
另请参阅 克服长度限制。 虽然没有 EIA-232 信号是为双绞线平衡的,但可以尝试将双绞线电缆与其一起使用。 使用一对用于发送,另一对用于接收。 为此,将信号地线连接到这两对中的每一对中的一根线。 只有部分信号地线电流在所需的导线中流动,但这可能会有所帮助。 由于双绞线电路的电感较低(与通过其他路径的地线回流电流相比),因此更多的回流(地线)电流将限制在所需的双绞线中,而不是仅从电阻计算中预期的那样。 在较高频率下尤其如此,因为感抗随频率增加而增加。 串行端口的方波包含高频谐波。
引脚 1(DB25 的引脚 1)应为机箱接地(也为大地接地),但在廉价的串行端口上,它甚至可能未连接到任何东西。 9 针连接器甚至没有机箱接地。 信号地线是引脚 7,通常接地到机箱地。 这意味着部分信号电流将流经建筑物布线的地线(不希望的)。 电缆屏蔽层应该只在一端接地,但两端都接地可能更好,因为屏蔽层中的电流比建筑物布线中的电流更好?
通过使用终端-调制解调器组合(不带计算机),可以拨号连接到其他计算机。 在 20 世纪 90 年代中期之前,在美国,有许多可以拨号连接的“公告板”。 有些甚至提供到 Internet 的连接。 但公告板在与 Internet 的竞争中败下阵来。
终端(或模拟终端的计算机)可以直接使用电缆连接到主机计算机,也可以通过电话线(或专用线路)连接到主机,线路两端都有调制解调器。 终端(或计算机)通常会在电话线上拨号连接到主机计算机。
大多数人使用 PC 和调制解调器进行拨号。 PC 可以连接到串行端口的终端,并且终端人员可以使用 PC 拨号。 将真正的终端直接连接到外部调制解调器更加困难,因为真正的终端不是很智能,并且不会向用户提供太多反馈。 为了拨号,许多终端可以将一个或多个电话号码存储为消息,这些消息可以“设置”到终端中,并通过按某些功能键发送到调制解调器。 许多调制解调器也可以存储电话号码。 调制解调器初始化序列必须在电话号码之前。 当呼出电话被电话线另一端的另一个调制解调器应答时,此调制解调器上的主机计算机可以运行 getty 程序以使您能够登录。
运行 Linux 的计算机被拨入是很常见的。 呼叫者获得登录提示并登录。 乍一看,一个哑终端(未连接到任何计算机)如何接受来电似乎很奇怪,但它可以。 这样做的一个可能原因是节省电话费,因为电话费率不是对称的。 您的终端需要设置为拨入:将终端上的调制解调器设置为自动应答(寄存器 S0 设置为 2 将在第 2 声铃响时应答)。 您在预计来电之前打开终端和调制解调器,当来电时,您会收到登录提示并登录。
拨号连接到您的终端的主机计算机需要做一些非常不寻常的事情。 一旦您的调制解调器应答,它就需要运行登录 (getty)。 主机可以通过运行 Linux 程序“callback”(有时命名为“cb”)来执行此操作。 回调用于让计算机 A 呼叫计算机 B,然后 B 挂断并回呼 A。 如果您使用计算机 A 模拟终端,这就是您想要的。 对于真实终端的情况,这可能是一项过于复杂的任务,因此主机可能仅利用回调程序的“回呼”部分。 必须在主机上正确配置回调的设置文件。 回调拨打到终端的电话,然后让 mgetty 在该端口上运行登录。 mgetty 本身(截至 1998 年初)仅用于拨入呼叫,但正在进行将回调功能合并到其中的工作,从而使其能够拨出。 截至 1999 年初,似乎尚未完成。
Telnet 是一个程序,它允许文本终端(或 PC 控制台)通过网络连接到主机计算机。 telnet 连接不使用串行端口。 当然,如果您坐在真正的文本终端前,则存在到您自己的主机的串行连接。 但是,当您运行 telnet 时,您的主机通过无串行的 telnet 连接到另一台主机。
Telnet 在各种网络上使用 tcp/ip 数据包:Internet、LAN 等。 您运行 telnet(作为客户端),它连接到网络上另一台计算机上的 telnet 服务器。 然后,您会获得登录提示并登录,就像您通过电缆直接连接到串行端口一样。
Ssh 是“安全外壳”,类似于 telnet。 曾经,它比传统的 telnet 安全得多,后者以明文形式发送密码(无编码)。 但现在 (2006) 有“telnet-ssl”软件包提供安全的 telnet。 但由于 telnet 在引入安全性方面进展缓慢,ssh 可能变得更受欢迎。
Telnet 可能会将您键入的每个字符放入一个数据包中,自然会产生大量开销。 但有一个选项可以一次发送一行。 要将 telnet 用作客户端,您需要在运行 telnet 服务器的另一台计算机上拥有一个帐户。 然后,您给出 telnet 命令并指定将接受来自您的连接的计算机的地址。
telnet 模拟哪种类型的终端? 它没有。 相反,它使用您当前正在使用的任何类型的终端将您连接到远程计算机。 如果您在 Linux 控制台上,则它是 Linux 类型的终端。 远程计算机需要以某种方式找出您使用的终端类型,以便它可以发送正确的转义序列。
因此,使用 telnet 很像将哑终端连接到串行端口,只是您和计算机之间没有电缆,而是您和一些远程计算机之间流动的数据包流。
终端服务器是一种用于通过网络将大量终端连接到一台或多台主机计算机的设备。如今,这种服务器通常位于主机计算机附近或内部。如果您直接将一些终端连接到 PC,或者通过拨号调制解调器经由两端的串行端口连接它们,则不需要终端服务器。
但是,如果终端通过网络连接到主机,那么您可能需要终端服务器来进行串行到网络的转换。这对于诸如打印机和没有内置网络支持的终端之类的设备非常有用。“终端服务器”的定义已经扩展到所有数据完全通过网络流动(当然,计算机内部除外)并且不涉及串行端口的情况。“终端”一词可能包括带有 GUI 的瘦客户端类型的终端。网络通常使用 tcp/ip 和/或 ppp,但有时也支持其他协议(包括协议转换)。
将“终端”(您的 PC 控制台)连接到网络的一种方法是在您的 PC 上运行 telnet(假设您的 PC 具有网络连接)。曾经,终端服务器是专用硬件,只能用作终端服务器。如今,PC 可以同时充当终端服务器,从而为许多终端提供服务。
今天,大多数终端服务器为瘦客户端终端而不是文本终端提供服务。“Linux 终端服务器项目”就是一个例子。但它也可以使用 telnet 为文本终端提供服务。这种文本终端很可能只是一个 PC 显示器,模拟类型为“Linux”的终端。终端服务器只是在主机计算机上运行的软件。Telnet 服务器软件就像一个简单的终端服务器。
仅具有直接连接的终端(或没有 tcp/ip 或 ppp 的调制解调器连接)的主机有时被称为“终端服务器”。虽然它执行与真正的终端服务器相同的工作,但严格来说它不是终端服务器。
最初,终端服务器通过串行端口为真正的文本终端提供服务。用于真正的文本终端的服务器将有许多串行端口。用户将登录到服务器,然后通过 tcp/ip 等连接到主机计算机,在那里他/她将再次第二次登录。有时第一次登录是自动的,或者可能会给用户一个选择,选择要连接到哪个主机计算机(或打印机)(或要使用什么协议)。
随着 PC 取代大型机,真正文本终端的使用减少了。但是 PC 可以模拟终端(例如使用 minicom (Linux) 或 (hyper)terminal for MS)。然后人们可以通过调制解调器拨出到公告板或类似的东西。将会有大量的调制解调器来接受此类呼叫,并且每个调制解调器都将连接到串行端口。串行端口可以在多端口卡上或专用终端服务器上。请注意,在上述两种情况下,都没有客户端软件。它不是客户端-服务器模型。
当互联网变得流行时,人们会在电话线上运行 PPP 协议,并且仍然通过 ISP 的调制解调器和“终端服务器”。该服务器将处理 PPP 并最终将您连接到互联网。但是 PC 不再模拟文本终端,因为正在显示浏览器图像。如今,由于 ISP 仅从电话公司获得数字信号,因此他们不再需要真正的调制解调器。因此,曾经是“终端服务器”的东西演变为“远程访问服务器”。它很少被称为“数字终端服务器”。请注意,56k 调制解调器服务要求 ISP 具有与电话公司的数字连接。
对于远程访问服务器,现在不再是许多连接到终端服务器的单独电话线电缆,而是发现只有几根电缆,每根电缆上有许多数字化的电话呼叫(多路复用)。远程访问服务器上不再存在大量终端或调制解调器所需的大量连接器,因此这种类型的终端服务器的后继者不能再轻易地为文本终端提供服务。
最近,随着瘦客户端终端的出现,“终端服务器”一词被重新启用,以应用于为瘦客户端提供服务的主机。MS Windows 和 Linux 都可以为瘦客户端提供服务。
连接器或多或少永久地连接到电缆末端或硬件单元。串行通信中使用了两种基本类型的连接器:1. 带针的 DB 类型(DB 9 或 DB25)和 2. 模块化电话式连接器。
适配器看起来像连接器,但它有两端带针。它就像一根电缆,非常短,以至于根本没有电缆部分剩下——剩下的只是每端不同的连接器。适配器只需插入到它两侧的两个其他连接器中。它允许两个不兼容的连接器通过插入它们之间来配合在一起。即使对于两个可以相互配合的连接器,也可以使用适配器将电缆导体连接在一起,而不是直通。显然,可以使用特殊的电缆(可能是自制的)来代替适配器。
连接器(或适配器的一侧)有公头或母头之分。带有针的连接器是公头,带有插座(有时也称为针)的连接器是母头。对于模块化连接器,暴露触点的连接器是插头,而内部触点(不易看到)的连接器是插孔。插头是公头;插孔是母头。
适配器有三种基本类型:零调制解调器、性别转换器和端口适配器。一些适配器执行超过这三种功能中的一种。
(有关如何在电缆末端安装 DB 连接器,请参阅 安装 DB 连接器。)这些连接器有 9 针或 25 针两种。EIA-232 规范要求 25 针,但由于大多数这些针脚在普通串行端口上未使用,因此 9 针就足够了。有关引脚排列,请参阅 DB9-DB25。如果仔细观察或使用放大镜,通常会对引脚进行编号。
RJ 代表 Registered Jack(注册插孔)。这些连接器看起来像现代电话连接器,但有时与电话连接器不兼容。另请参阅 安装 RJ 连接器。对于与串行端口一起使用,它们可以是 6 芯或 8 芯。少数是 10 芯的,但可能不正式属于 RJ 系列。
RJ11 的尺寸都相同,但可能有 2 芯、4 芯或 6 芯。如果它有两根导线,则应称为 RJ11。如果它有 4 根导线,有些人称之为 RJ14。如果它有 6 根导线,许多人称之为 RJ12(但根据电话公司的说法,RJ12 只有 4 根导线)。似乎令人困惑,但它们的尺寸都相同,主要区别在于导电触点的数量。
外观相似(几乎)的是 MMJ 连接器(6 芯),用于后来的 VT 型号(和其他)终端上。有时也称为 DEC-423 或 DEC RJ11。MMJ 具有偏移卡舌,与 RJ 连接器不兼容(除非卡舌被切掉)。但是,已经制造了一些与 MMJ 和 RJ 连接器都兼容的连接器。由于 MMJ 连接器既难找又可能很昂贵,因此有些人通过用锉刀锉掉偏移卡舌,强行将 RJ(6 芯)安装到 MMJ 中。
MMJ (DEC) 引脚排列为:1-DTR、2-TxD、3-TxD_Gnd、4-RxD_Gnd、5-RxD、6-DSR。Cyclades Cyclom-8Ys RJ12 具有:1-DTR、2-TxD、3-Gnd、4-CTS、5-RxD、6-DCD。Specialix IO8+ 具有:1-DCD、2-RxD、3-DTR/RTS、4-Gnd、5-TxD、6-CTS。RJ(和 MMJ)的引脚编号类似于 RJ45。
Plug Jack (or socket)
(Looking at the end (Looking at the cavity
end of a cable) in a wall or PC back)
.________. .________.
| 654321 | | 123456 |
|__. .__| |__. .__|
|__| |__|
标准 MMJ 文件传输(零调制解调器)电缆在每一端都有一个 MMJ 连接器。它使用 MMJ 到 DB 适配器连接到 PC。此适配器插入 PC 背面的 DB(例如 25 针)连接器,MMJ 连接器插入其中。如果您没有这样的适配器,您可以制作一根自定义电缆,一端带有 MMJ(或锉刀 RJ)连接器,另一端带有 DB 连接器。
带有两个 MMJ(或 RJ11/14)连接器的标准文件传输(零调制解调器)电缆将连接:1-6、2-5 和 3-4。请注意,这种电缆支持 Linux(尚未)不支持的 DTR/DSR 流量控制。如果您理解从墙壁到电话的普通 4 芯电话线(在数亿个家庭中使用)也是文件传输电缆,那么制作自己的标准 6 芯文件传输电缆非常简单。找到一根并以相同的方式连接您的电缆。
如果您将这样的电缆平放在地板上(没有扭曲),您会注意到两端插头上的金色触点都朝上(或都朝下)。虽然它是对称的,但如果您稍微思考一下,它也是文件传输。可以将几根这样的电缆与直插式耦合器放在一起,一切正常,因为每个直插式耦合器也是文件传输(零调制解调器)适配器。串联的两根文件传输电缆会导致直通连接。
这是 Mark Gleaves 提供的自定义电缆图,用于使用 RTS/CTS 流量控制将 MMJ 连接到 9 针串行端口
DEC MMJ Linux PC DB9
Pin Signal Signal Pin
=== ====== ====== ===
1 DTR -----------------------|---> DSR 6
|---> CTS 8
2 TxD ---------------------------> RxD 2
3 SG (TxD)--------------------|--- SG 5
4 SG (RxD)--------------------|
5 RxD <--------------------------- TxD 3
6 DSR <-----------------------|--- RTS 7
|--> DTR 4
|--> CD 1
(no connection) RI 9
RJ45 和 RJ48 是 8 芯模块化电话插头。存在一些 10 芯连接器,据称这些连接器更宽,并且无法与 8 芯连接器配合。人们将 10 芯连接器称为 RJ45 和/或 RJ48,但这可能是错误的。这些连接器用于扁平电话线和圆形双绞线电缆。圆形和扁平电缆的连接器电缆端可能不同。RJ48 有一个额外的卡舌,因此 RJ48 插头不会推入 RJ45 插孔(但 RJ45 插头将与 RJ48 插孔配合)。它们用于某些多端口串行卡和网络。以下是 8 芯的引脚编号
Plug Jack (or socket)
(Looking at the end (Looking at the cavity
end of a cable) in a wall)
.__________. .__________.
| 87654321 | | 12345678 |
|__. .__| |__. .__|
|____| |____|
您可以尝试购买短的零调制解调器电缆。仅“调制解调器电缆”不起作用。零调制解调器电缆曾经被标记为“串行打印机”电缆,但串行打印机在今天(2004 年)并不流行。它们也可能被标记为“文件传输”电缆或“PC 到 PC”电缆。硬件流量控制将适用于 PC 到 PC 连接(终端仿真),但不适用于大多数真正的文本终端使用的 DTR 流量控制。如果 Linux 支持 DTR 流量控制,则真正的终端可以正常工作。确保电缆末端连接器将适合您的计算机和终端上的连接器。
但是,如果您需要更长的电缆来连接终端或需要硬件流量控制,您如何获得合适的电缆?合适的现成电缆可能很难找到(您可以通过在互联网上搜索找到它们),特别是如果您想使用最少(例如 4 根)的导线。一种选择是定制它们,这可能会相当昂贵,尽管您可能会找到某人以不比现成电缆高太多的价格制作它们(我找到了)。
一种低成本的替代方案是购买二手电缆(如果您能找到它们)。如果您获得二手终端,请询问他们是否有用于它的电缆。另一种替代方案是自己制作。即使您获得二手电缆,它们也可能需要对引脚布线进行一些更改。在任何一种情况下,这都可能需要专用工具。大多数带有短电缆的连接器都永久模制到电缆上,无法重新布线,但大多数定制和自制电缆都具有可以重新布线的连接器。制作自己的电缆的一个优点是,如果您学会的技能在电缆断裂(或损坏)或您需要匆忙制作另一根电缆时会派上用场。
引脚编号通常刻在连接器的塑料中,但您可能需要放大镜才能读取它们。请注意,DCD 有时标记为 CD。母连接器上的引脚编号从右到左读取,从右上角的 1 开始(而不是如下所示的公连接器的左上角的 1 开始)。--> 方向是从 PC 输出。
___________ ________________________________________
\1 2 3 4 5/ Looking at pins \1 2 3 4 5 6 7 8 9 10 11 12 13/
\6 7 8 9/ on male connector \14 15 16 17 18 19 20 21 22 23 24 25/
------ -----------------------------------
有关它们的简要说明,请参阅 DB 连接器。不幸的是,如今购买的大多数电缆在每一端都有模制连接器,无法修改。其他电缆具有可以拧开并重新布线的连接器。如果您要制作电缆或修改现有电缆,那么您需要了解引脚。有两种类型:焊接和压接。
压接引脚需要特殊的压接工具,还需要“插入/拔出”工具。但是一旦您拥有这些工具,制作和修改电缆可能比焊接更快。如果要将两根导线连接到一个引脚(如果您想将一个连接的引脚跳线到另一个引脚也需要),那么焊接速度更快(对于这些引脚)。这是因为压接引脚每个只能连接一根导线,而焊接引脚每个引脚可以接受多根导线。
要插入压接引脚,只需用手或使用插入工具将其推入即可。对于插入或移除工具,首先需要将工具尖端围绕导线放置。工具尖端应完全包围引脚背面的导线。
使用此工具移除引脚有点棘手。如果您在阅读本文时手头有工具和导线,则可以最好地理解这些说明。将工具尖端围绕导线放置,将工具尽可能深地插入孔中(约 1 1/2 厘米)。有些工具在工具上有一个标记(例如一个小孔)来指示插入的深度。工具尖端应具有锥形间隙,以便您可以通过从间隙比导线宽的地方开始将尖端围绕导线放置。该工具可能有 2 个尖端。最难围绕导线的尖端也是最容易移除导线的尖端,因为它几乎完全包围了导线。
在正确插入尖端的情况下,轻轻拉动工具和导线。如果它没有出来,则工具可能未正确插入,因此将其进一步推入或将其扭转到不同的位置(或两者兼而有之)。也许您应该使用另一个更紧密地贴合引脚的尖端。使用此工具,可以轻松地将直通电缆转换为文件传输(零调制解调器)电缆等。
使用“插入/拔出”工具可能会出现问题。如果工具无法插入引脚背面,则可能是引脚未整齐地压接到导线上,并且在应该为圆形的地方有点方形等。如果引脚开始出来但无法完全拉出,则引脚可能会弯曲。在放大镜下观察它。用尖嘴钳拉直引脚可能会损坏镀金层,但您可能必须拉直它才能移除它。有时可以用粗螺丝刀刀片尖端(或类似物)将卡住的引脚推出,但如果推得太用力,可能会划伤塑料孔或弯曲引脚:。
除非您知道自己在做什么或已阅读有关如何操作的内容,否则不要尝试焊接。
这些是电话模块化连接器,其中一种类型用于大多数普通电话。但是有很多不同的类型(请参阅 RJ 模块化连接器)。
这些不易重复使用。您可能可以拔出导线,推入一些楔形物,这将抬起金色触点并重复使用连接器。有特殊的压接工具用于安装它们;每种类型都有不同的工具。
如果您没有压接工具,仍然可以使用小螺丝刀(可能还有锤子)进行安装(但很困难)。推入电缆导线,然后用小螺丝刀用力向下推每个金色触点,小螺丝刀正好可以插入触点之间的绝缘脊之间。如果您未能使用头部与触点厚度几乎相同的螺丝刀,或者如果您在向下推触点时螺丝刀从触点上滑落,则可能会损坏它。您也可以使用小锤子敲击螺丝刀(首先用手推)。
确保在推入触点时不要损坏连接器上的“移除杆”。不要只是将其放在桌子上并推入触点。相反,放置一个垫片(约 1 毫米厚),该垫片紧密地安装在杆和主体之间的缝隙中。对于这样的垫片,您可以使用厚纸板、几张名片或木材。由于连接器的底部(您将放在桌子上的底部)不平坦(由于“移除杆”),请确保桌面顶部有一些柔软的东西(如一张纸板)以帮助支撑不平坦的连接器。更好的方法是在连接器的前 6 毫米下方放置另一个 1 毫米垫片,正好在您看到触点的位置下方支撑它。柔软的桌面也不会有坏处。另一种方法(我从未这样做过)是将连接器固定在老虎钳中,但要小心不要损坏连接器。
与使用压接工具相比,按照上述方法安装需要更长的时间,并且更容易出错和失败,但如果您只有一两个连接器要安装,则有时更方便,并且比购买专用工具便宜得多。
配置(设置)包括将配置存储在终端的非易失性存储器中,以及将命令放在启动文件(在您的硬盘上)中,这些文件将在每次计算机开机时(或可能仅在运行级别更改时)运行。本节概述了配置,并涵盖了终端和计算机的基本通信选项的配置。接下来的两个主要部分详细介绍了终端的配置(请参阅 终端设置 和计算机(请参阅 计算机设置(配置)详细信息。
安装终端后,有必要配置物理终端,方法是将终端开机时将具有的特性保存在其非易失性存储器中(断电时不会丢失)。您可能很幸运,拥有一个已经为您的安装正确设置的终端,因此几乎不需要或根本不需要终端配置。
配置终端有两种基本方法。一种是坐在终端前,浏览一系列设置菜单。另一种是从主机计算机向其发送转义序列。在您可以向终端发送任何内容(例如上述转义序列)之前,必须设置其 通信接口 选项(例如波特率)以匹配计算机的选项。这只能通过坐在终端前完成,因为通信必须在计算机和终端可以“对话”之前正确设置。请参阅 终端设置。
除了可能从计算机发送转义序列来配置终端之外,还需要配置计算机本身来处理终端。如果您幸运的话,您所需要做的就是将“getty”命令放入 /etc/inittab 文件中,以便在计算机启动时将“login:”提示符发送到终端。有关详细信息,请参阅 Getty(在 /etc/inittab 中使用) 部分。
计算机使用串行设备驱动程序软件(内核的一部分)与终端通信。串行设备驱动程序具有默认配置,并且在每个终端运行“login”之前,也部分(有时完全)由 getty 程序配置。但是,有时需要使用名为“stty”和“setserial”的程序进行额外的配置。这些程序(如果需要)必须在每次计算机启动时运行,因为此配置在每次计算机断电时都会丢失。请参阅 计算机设置(配置)详细信息。
有许多配置选项供您选择。通信选项必须设置正确,否则终端将根本无法工作。其他选项可能设置错误,但不会引起任何问题,因为它们设置的功能可能不会被使用。例如,如果您没有打印机连接到终端,则终端内部的打印机配置参数如何设置都无关紧要。最后这句话并非 100% 正确。假设您没有打印机,但计算机(错误地)向终端发送了一个命令,将所有字符(数据)从计算机重定向到仅打印机。那么屏幕上将不会显示任何内容,并且您的终端将死机。某些终端具有配置选项,用于通知终端未连接打印机。在这种情况下,终端将忽略任何将输出重定向到“打印机”的命令,并且上述问题将永远不会发生。但是,这并没有多大帮助,因为可以发送到您的终端的许多其他错误命令会真正搞砸事情。如果您不小心将二进制文件发送到终端,则很可能会发生这种情况。
在某些情况下,错误的设置不会引起任何问题,直到您恰好运行一个罕见的应用程序,该应用程序期望终端以某种方式设置。其他选项仅控制显示的外观,如果它们设置错误,终端也可以正常工作,但可能看起来不太舒服。
某些选项仅与终端有关,不需要在计算机上设置。例如:您想要浅色背景上的黑色字母吗?这比黑色背景更护眼。按住某个键时,该键是否应该重复?当一行超出屏幕右端时,屏幕是否应该换行?按键是否应该发出咔嗒声?
这些通信设置(选项)中的一些既用于终端又用于计算机,并且必须在两者上完全相同地设置:速度、奇偶校验、每字符位数和流量控制。其他通信选项仅在终端上设置(并且其中只有几个对于建立通信至关重要)。还有一些其他的,例如物理端口 ttyS2 的地址和中断 (IRQ),仅在使用“setserial”命令的计算机上设置。在兼容地设置上述所有基本选项之前,终端和计算机之间不可能进行令人满意的串行通信(并且可能根本没有通信)。对于终端,必须通过每个终端的菜单手动设置这些选项(或通过在每个终端使用某种特殊卡盒)。主机计算机通过在每次计算机开机时(或在人们登录时)运行命令来配置。有时 getty 程序(在 /etc/inittab 文件中找到)会启动登录过程,它会处理计算机的配置。请参阅 Getty(在 /etc/inittab 中使用)
计算机和终端的设置都是
仅终端的一些基本设置是
如果 Getty(在 /etc/inittab 中使用) 程序无法按照您想要的方式设置计算机端,那么您可能需要使用 Stty 和 Setserial 命令中的一个(或两个)。
这些必须在终端和计算机上设置相同。速度是比特/秒(bps 或波特率)。使用在没有错误的情况下工作的最高速度。启用流量控制可能会使更高的速度成为可能。终端上可能需要设置两个速度:发送和接收,有时缩写为 T 和 R。通常它们都设置为相同,因为 Linux 中的 stty 似乎还没有选择将它们设置为不同的选项。(“stty”命令有一个选项可以做到这一点,但它似乎实际上将它们都设置为相同。)常用速度为 300、600、1200、2400、4800、9600、19200、38400、... 较慢的速度(如 600)用于打印机和硬拷贝终端。
有关定义,请参阅 奇偶校验解释。禁用奇偶校验通常是默认设置。要启用奇偶校验,您必须同时启用它,然后选择偶校验或奇校验。它是奇校验还是偶校验可能没有区别。对于终端,有时有发送和接收奇偶校验的设置。您应该将这两者设置为相同,因为计算机上的 stty 不允许将它们设置为不同。PC 串行端口通常也不能支持不同的奇偶校验。某些终端无法设置接收奇偶校验,并且只会始终忽略接收到的奇偶校验位。在某些较旧的终端上,如果您每字节使用 8 位数据位,则奇偶校验将不起作用,因为硬件中没有空间容纳额外的奇偶校验位。
您应该完全使用奇偶校验吗?奇偶校验虽然不是真正必要的,但很高兴拥有。如果您没有奇偶校验,那么您可能会在这里和那里得到一个不正确的字母,并最终尝试纠正实际上不存在的拼写错误。但是,奇偶校验是有代价的。首先,它的设置更加复杂,因为默认设置通常是没有奇偶校验。其次,奇偶校验会降低字节在串行电缆上传输的速度,因为每个字节会多一位。这可能会也可能不会降低有效速度。
例如,硬拷贝终端通常受打印过程的机械限制。当计算机(其 UART 芯片)正在传输时,增加字节/秒只会导致更多的流量控制“暂停”信号,以允许机械打印赶上进度。由于更多的流量控制等待,有无奇偶校验的有效速度都一样。对于某些终端来说情况类似:在您实施奇偶校验后,每个单位时间的流量控制等待可能会减少,从而导致更多的比特/秒(平均值)。但是,由于添加了奇偶校验位,字节/秒(平均值)保持不变。
一种选择是安装没有奇偶校验的终端。然后,如果注意到奇偶校验错误,可以稍后实施。要发现没有奇偶校验的可能错误,请查找您认为自己没有犯过的任何拼写错误。如果您发现这样的错误,请刷新屏幕(从计算机重新传输)。如果错误消失了,那么这很可能是奇偶校验错误。如果发生太多此类错误(例如,每几百个屏幕超过一个),则需要采取纠正措施,例如:启用奇偶校验和/或降低速度,和/或使用更短/更好的电缆。启用奇偶校验不会减少错误数量,但它会告诉您何时发生了错误。
恰恰相反的策略是最初启用奇偶校验。然后,如果在合理的时间段内(例如一两个月)从未见过奇偶校验错误(CRT 上的错误符号),则可以安全地禁用它。
这是字符大小(每个字符的数据位数,不包括任何奇偶校验位)。要使用国际字符集,您需要 8 位。但是,除非您的终端具有它们的字体,否则它没有多大用处。请参阅 字符集 如果您只想使用 ASCII 字符,则选择 7 位,因为传输 7 位比 8 位更快。一些非常旧的终端仅支持 7 位字符。
选择是“硬件”(例如 dtr/cts)还是“软件”(Xon/Xoff)流量控制。虽然硬件流量控制可能更快(如果电缆中有一根或两根额外的导线可用于它,并且如果终端支持它),但在大多数情况下,Xon/Xoff 应该可以正常工作。有些人报告说,他们通过转换为硬件流量控制解决了令人不安的问题(见下文),但软件流量控制在其他安装中(并且对我个人而言)效果很好。
如果您使用软件 (Xon/Xoff) 流量控制,并且有用户不了解它,那么他们可能会意外地向主机发送 Xoff 并锁定他们的终端。当它被锁定时,他们可能会徒劳地疯狂地敲击键盘,试图解锁它。然后,当最终发送 Xon 以恢复通信时,所有匆忙键入的内容都会被执行,可能会产生意想不到的结果。他们无法使用硬件流量控制做到这一点。有关流量控制的解释,请参阅 流量控制。
由于大多数终端背面都有两个或多个连接器,因此通常可以将其中一个连接器分配为连接到主机计算机,并将另一个连接器分配为打印机端口。连接器旁边可能有一个名称(检查它),并且此名称(例如 Aux、Serial 2 或 Modem)可以分配为主机连接或打印机连接(或类似连接)。
虽然以上所有内容可能看起来过于复杂,但要使终端工作通常相当简单。快速安装 部分介绍了一种尝试执行此操作的简单方法。但是,如果这不起作用,或者您想使显示效果更好并表现更好,则需要进行更多阅读。
除了关于向终端发送转义序列的下一小节之外,本节主要介绍了通过坐在终端前并浏览菜单手动设置终端的详细信息。如果您尚未这样做,您应该阅读 终端设置(配置)概述。如果您有终端手册是最好的,但即使您没有,这里也有关于您可能需要设置的许多选项的信息。
必须始终在终端上设置通信参数(例如其波特率),因为如果未完成此操作,则无法与终端进行通信。建立通信后,您有两种选择来完成终端配置的其余部分。您可以继续在终端上手动配置并将结果保存在终端的非易失性存储器中,或者您可以每次终端开机时(或类似情况)从计算机向终端发送转义序列来执行此操作。
如果您知道如何在终端内部设置和保存良好的配置,这可能是最好的方法。如果您不知道,您可能只想在每次使用终端时从 terminfo 向终端发送初始化字符串。也许什么都不做仍然会让您获得可用的终端。您(或应用程序)始终可以通过向终端发送某些转义序列来更改内容。
一旦通信接口建立,终端的其余配置有时可以通过从计算机向终端发送转义序列来完成。如果您有大量的终端,编写(或找到)一个 shell 脚本来自动执行此操作可能是值得的。您可能会(也可能不会)有一个命令可以发送到终端,告诉它将其当前的设置保存在非易失性存储器中,以便下次终端通电时仍然存在。
发送这些转义序列有两种简单的方法和一种复杂的方法。使用简单的方法,您永远不需要查找转义序列,而是发出命令,这些命令会自动在 terminfo 数据库中找到合适的转义序列并发送它。不幸的是,并非所有您可能想要发送的转义序列都始终在 terminfo 数据库中。因此,更复杂(但可能更好)的方法是直接发送转义序列。
对于这种复杂的方法,您需要一本高级手册。旧的终端手册曾经包含详细的转义序列列表,但较新的手册通常不包含。要找到它们,您可能需要购买另一本名为“程序员手册”(或类似名称)的手册,该手册不随终端一起提供。互联网上有一些终端的 转义序列列表,但它很简洁且可能不完整。
即使没有手册或类似的东西,您仍然可以使用程序 "tput" 和 "setterm" 向终端发送命令来配置终端。请参阅 更改终端设置。如果初始化字符串以您想要的方式设置终端,您可以直接从 terminfo 条目发送终端的初始化字符串。请参阅 初始化字符串。除非您计划每次终端通电时都从计算机向终端发送这些序列,否则您必须以某种方式将设置保存在终端的非易失性存储器中。
在旧式终端上,查看键盘数字键顶行上方的标签。如果存在,这些标签可能是这些键在设置模式下的功能。一些旧式终端可能只有一个“设置”菜单。更老的终端有物理开关。在某些情况下,并非所有开关都标记明确,但它们可能隐藏得很好。当然,如果您使用开关设置了某些东西,它就会被“保存”,并且无需将设置保存在非易失性存储器中。
要在终端上选择选项(配置),您必须首先进入“设置”模式,然后使用存储在终端内部并在屏幕上显示的菜单选择选项(即配置)。为此,终端甚至不需要连接到计算机。如何进入设置模式在终端手册中有所介绍,但以下是一些可能有用的提示
如果有一个“设置”键,请尝试按下它。也尝试按住 Shift 键再按它。
要在设置菜单中移动,请尝试使用箭头键。使用回车键、空格键或特殊键(旧式终端上的“toggle”键)进行选择。要退出设置模式,请从菜单中选择退出(或在一些旧式终端上再次按下设置键)。
为了使终端能够正常工作,速度、奇偶校验、每字符位数和通信模式必须设置正确。不正确的流控制可能会导致屏幕上看到的数据丢失和/或损坏。基本通信选项已在另一节中处理(针对终端和计算机):请参阅 通信接口。以下列表提供了一些指向该部分的链接,以及一些仅在终端上设置的其他通信选项。
您的设置必须保存在终端的非易失性存储器中,以便下次打开终端时生效。如果您未能保存它,那么当您关闭终端时,新设置将丢失。在您费力设置终端之前,请确保您知道如何保存设置。对于现代终端,保存命令通过菜单完成。在一些旧式终端中,只有手册会告诉如何保存。对于许多这些终端,您按 Ctrl-S 保存。
本节以下内容描述了许多终端的设置菜单中可用的一些选项。选项也称为参数或功能。许多选项可以称为“模式”。设置选项通常称为“配置”。许多这些选项也可以通过向终端发送某些转义序列来设置。不同型号和品牌的终端有不同的选项,同一个选项可能有不同的名称(并非此处给出所有名称)。Wyse 使用的简洁名称用 {...} 括起来。主要用于 VT 终端的名称用 {{...}} 括起来。
大多数现代终端可以仿真其他几种终端。如果终端设置为仿真自身(实际上没有仿真){本机个性},则终端可能可以执行更多操作。有时,同一型号的终端有两种不同的仿真。例如,VT220-7 仿真具有 7 位/字节的 VT220,而 VT220-8 仿真具有 8 位/字节(256 个可能的字符)的 VT220。
旧型号的终端通常比新型号的终端功能少。假设有人想要仿真一个旧终端,但也想要他们正在使用的较新型号终端的一些高级功能。这有时是可能的(在某种程度上)。此功能有时称为 {增强}(或增强 ??)。
这是字符适合的单元格的大小。它以像素(=微小的点)为单位测量。点越多,分辨率越高。10x16 是 10 个点宽,16 个点高(16 行和 10 列)。请注意,与矩阵尺寸的表示法相比,该表示法是倒置的,矩阵尺寸的表示法首先给出行(高度)。此外,字符单元格包括为相邻字符之间的空间分配的像素行和列,因此定义实际字符边界的单元格大小可能更小。
通常为 80 列和 24 或 25 行。这意味着屏幕上的一行(行)中最多可以有 80 个字符。许多终端都有 132 列选项,但除非您有大屏幕,否则微小的字符可能难以阅读。{{设置 132 列模式}}。如果您设置 25 行,请确保 terminfo 中有此设置。您还应该将 "export LINES=25" 放入 /etc/profile 中,并使用:"stty -F /dev/ttySx rows 25"。如果您不这样做,可能会导致滚动问题(请参阅 终端不滚动
光标可以设置为矩形(=块){Blk}。其他选项包括下划线 {Line} 或闪烁。我更喜欢非闪烁的 {Steady} 块,因为它足够大,可以快速找到,但没有分散注意力的闪烁。如果您将其设置为不可见(某些终端上的选项),它将消失,但当您在不可见光标处键入时,新字母将出现在屏幕上。
显示属性 可以是魔术饼干,也可以是分配给每个字符的属性字节。对于魔术饼干,它们的范围有限制:它们是否对整行或整页有效?最好使用属性字节(实际上可以是半字节 = 四位字节)。
可能被称为各种名称,例如“显示控制”。当关闭(正常)时,它是“解释控制”。当设置为开启时,您会看到来自主机的转义序列(您通常永远不会在屏幕上看到)。为了使这些序列可以在一行中按顺序查看,终端不会对它们进行操作(解释)。除非 CR LF 序列创建新行。请参阅 控制代码。
一些终端可以使其字符具有双倍宽度和/或双倍高度。此功能很少需要。当将一行更改为双倍宽度 (DW) 时,右半部分 (RH) 会被推出屏幕,并且存在是否删除(擦除)它的问题。“保留”是指保留 DW 行的 RH。
正常视频是浅色(白色、绿色、琥珀色)字母(前景)在深色(黑色)背景上。反向视频 {Display Light} 则相反:浅色背景上的黑色文本。这对眼睛更友好(除非房间很暗)。
状态行是屏幕顶部或底部的一行,显示有关您正在运行的应用程序的信息。它通常以某种方式突出显示。启用状态行后,应用程序可以向终端发送一个特殊的转义序列,这意味着后面的文本用于状态行。但是,许多应用程序不使用此功能,而是仅通过直接光标定位来模拟真实的状态行。普通用户看到它时不知道区别。
当将列数从 80 切换到 132(或相反)时,旧格式显示的数据应该被擦除(清除)还是保留?{80/132 Clr} {{屏幕宽度更改}}。您如何设置此选项应该没有区别,因为如果应用程序使用 132 列,它应该通过控制序列适当地设置此选项。
为了使 Wyse 终端能够访问显示内存的多个页面,必须将 {Multipage} 设置为开启。
终端内存可以划分为多个页面。请参阅 页面 和 页面(定义) 以获取页面解释。您可以将页面内存划分为多个选定长度的页面。Linux 应用程序目前似乎不使用页面,因此如何设置它应该没有太大区别。
终端内存可以划分为多个页面。请参阅 页面 和 页面 以获取页面解释。当光标移动到当前未显示的视频内存位置(例如另一个页面,或同一页面上的位置,但屏幕上未显示)时,显示器是否应更改以允许查看新的光标位置?如果是这样,这称为“耦合”。对于同一页面内的光标移动,有“垂直耦合”和“水平耦合”。对于移动到另一个页面,有“页面耦合”。
终端将识别自身及其状态,或发送预先录制的消息以响应某些转义序列。
您可以在设置期间编写一条简短消息,该消息可以选择在开机时发送到主机,或在响应来自主机的请求(可能是 ENQ(查询)控制字符)时发送到主机。
如果设置,则在开机时将应答消息发送到主机,而无需主机请求。任何 "getty" 进程会查找此消息吗?
如果设置,则永远不会让任何人看到应答消息(当然主机计算机除外)。如果需要更改它,请取消选择“应答隐藏”,以前隐藏的消息将被销毁,因此您可以输入新消息(但您看不到旧消息)。
终端发送此回复以响应身份请求。
设置后,按下任何键都会发出咔哒声(由键盘中的微型扬声器广播)。这些咔哒声会惹恼一些人,我认为最好关闭按键音。
当大写锁定键按下时,是否只有字母键才生成 Shift 字符?如果设置为 {Caps} 或仅大写,则在大写锁定打开的情况下按数字键将键入数字。要获得数字上方的符号,必须手动按住 Shift 键。这是正常模式。如果设置为 {Shift},则当大写锁定打开时,所有键都键入 Shift 字符(按 5 键应键入 %,而无需按住 Shift 键等)。
如果按住一个键,则该键会被重复“键入”。这对于重复键入相同的字符以创建横跨页面的线很有用。
当光标距离显示器右侧 8 列时,会发出响铃声(就像旧式打字机一样)。几乎所有编辑器都会在需要时自动创建新行(无需按回车键),因此很少需要此功能。
按下键时发送到主机的代码通常是该键的 ASCII 代码(也取决于 Shift 和 Control 键)。在某些终端上,您可以使任何键发送您希望的任何代码。也就是说,您可以通过以这种方式设置终端来完全重新映射键盘。这对于某些外语和 Dvorak 键盘布局等可能很有用,这些布局允许更快地键入。即使对于没有此功能的终端,也有软件可以重新映射键盘(和屏幕)。它有点像使用伪终端的设备驱动程序。请参阅 字符映射:mapchan
Wyse 终端在左下角附近有一个键,可以设置为执行各种操作。它可能标记为 "Funct"、"Compose Character"、"Alt"、"Hold" 或 "Scroll Lock"。早期型号并非具有以下所有选项
数字小键盘(键盘主体的右侧主要是数字键的矩形区域)可以设置为发送特殊代码,这些代码将在某些应用程序中执行特殊操作。箭头键也是如此。因此,存在一种“正常”模式,其中它们发送键帽上显示的内容(或箭头键的正常代码序列),以及一种“应用程序”模式,其中发送特殊的转义序列。在某些情况下,存在“十六进制”数字模式,该模式几乎类似于正常数字模式,只是 6 个非数字键发送字母 A-F。因此,例如,您可以在数字小键盘上键入“B36F”。
根据它们的设置方式,shifted-del 有时发送控制字符 CAN,而 shifted backspace 有时发送 DEL。
许多终端可以通过发送 PC 扫描码(请参阅 Keyboard-and-Console-HOWTO)而不是 ASCII 代码来仿真 PC 键盘。这主要用于特殊的 Multiuser DOS 操作系统。它不适用于普通的 MS DOS。请参阅 非 Linux 操作系统 但是,几乎没有任何通过串行端口运行的 Linux 程序可以接受扫描码。如果这是本 HOWTO 的最新版本,请告诉我是否有任何程序这样做。我认为 Foxpro 可以做到。您需要在 terminfo 中定义 smsc 和 rmsc,或许还需要 pctrm。
当使用扫描码时,最好使用硬件流控制,因为正常的软件流控制与某些代码冲突(??)。如果您确实使用软件流控制,则必须使用 XPC 类型的流控制。它使用 0x65 和 0x67 作为开启和关闭字符。必须在终端和 PC 的 stty 中都以这种方式设置它。
某些键上可能有备用字母。当键设置为“Typewriter”时,它们会发送它们通常在打字机上发送的内容。当键设置为其他内容时,将发送备用字符。
在这种情况下,“换行”是指从当前行下方的左边距开始的新行。在 Linux 和 C 中,“换行” (NL) 可能具有不同的含义:换行控制字符 LF 也称为换行或 NL。这是因为在 Linux 文本文件中,LF 字符表示“新行从这里开始”,因此标记为 NL。通常,发送到终端的 LF (NL) 只会导致光标跳到其下方的一行,而不会将光标移回此“新行”的开头。
如果设置了自动换行,则取消上述“正常”情况,并且在从主机接收到 LF 时,会在显示器上创建物理新行。这正是 Linux 中想要的结果。除了(当设置了自动换行时)回车键(或 Enter 键)向主机发送 CR LF 序列(对于 Wyse 和 VT100,但对于 VT420 ??)。由于 Linux 使用 LF 作为文件中的“换行”标记,因此 Linux 希望仅发送 LF(而不是 CR LF)。因此,很少使用“换行”选项。相反,默认情况下,串行端口设备驱动程序会进行所需的转换。就好像给出了命令 "stty onlcr icrnl" 一样。但您不需要这样做,因为它是默认设置。
这只是另一种类型的“自动换行”。当接收到 CR(回车)字符时,会添加 LF(换行)操作,从而显示新行。由于 Linux 使用 LF 标记行尾,因此不使用此选项。
如果关闭,终端接收到的 DEL 字符将被忽略。如果开启,DEL 执行破坏性退格。在任何情况下,空字符通常都会被忽略。DEL 和 NULL 有时都用于填充。请参阅 填充
也称为“自动环绕”。当到达屏幕右边缘(第 80 列等)并且主机没有发送回车字符(或类似字符)时会发生什么?如果设置了行环绕,则该行的其余部分将显示在下方的一行等。否则,该行的其余部分将丢失并且不会在屏幕上看到。任何好的应用程序都应该正确处理这种情况(前提是 terminfo 知道如何设置行环绕)。因此,即使未设置行环绕,应用程序也应为长行环绕屏幕,或提供另一种方式让您查看长行的截断尾部(通过使用箭头键等)。但是原始复制命令(和其他情况)可能不会这样做,因此通常最好设置行环绕。
对于 80 列的屏幕,大多数终端仅在来自主机的第 81 个字符是图形(可打印)字符时才环绕。这允许来自主机的第 81 个字符可能是“回车”或“换行”(非图形字符)的情况,这意味着应用程序正在处理环绕 OK,并且不需要终端的干预。
滚动 {Scrl} 是指屏幕上的所有行向上或向下移动。它也称为“平移”,其中包括横向移动。在普通滚动中,行从屏幕底部或顶部滚出并消失,并且来自主机的新行出现在相对的边缘(顶部或底部)。有 3 种类型:平滑、跳跃或突发。突发实际上不是滚动,因为它是用新屏幕瞬间替换旧屏幕(尽管新屏幕上的一些行可能来自旧屏幕)。跳跃是指新行一次跳跃到视图中。平滑 {Smth} 是指文本以稳定的速度向上或向下移动。如果平滑滚动速度足够慢,人们可以在新可见的行仍在滚动(运动中)时阅读它们。
在慢速终端上,平滑滚动曾经很有用,因为人们可以在显示器滚动时继续阅读。但随着波特率的提高,跳跃滚动速度非常快,以至于新显示出现时几乎没有时间损失。由于阅读滚动文本比阅读固定文本花费的时间稍长,因此如果选择平滑滚动,实际上可能会浪费更多时间。
如果禁用(自动)滚动 {Autoscrl},则来自主机的新文本必须去某个地方,因此它被放置在显示器的顶部。如果旧文本未被擦除,则新文本会(毫无意义地)合并到旧文本中。如果旧文本被擦除,则新文本会失去上下文。因此,请保持(自动)滚动启用状态。
请参阅 页面 和 页面 以获取页面解释。当当前页面已满(最后一行已完成)时,页面应滚动,还是应创建新页面(将上一页存储在终端的显示内存中)。如果设置了 {Autopage},则会创建新页面。由于您可能没有使用页面,因此您可能应该将其设置为关闭。
这些是标记为 F1、F2 等的键。在旧式终端上,它们可能标记为 PF1、PF2 等,其中 P 代表可编程。有些键盘两者都有。人们可以编程(重新定义)这些键以发送用户定义的字节字符串。这不适用于旧式终端,例如 vt100 或 Linux 命令行界面(多么可悲)。通常可以使用特定的设置菜单 {FKey} 轻松地“编程”它们。在某些终端上,人们还可以指定按下键时将此字符串发送到哪里。在“正常”模式下,按下该键就像在键盘上键入字符串一样。在“本地”模式下,按下该键会将其发送到终端(就像终端处于本地模式一样)。这可用于向终端发送转义序列,以便以特殊方式配置终端。在“远程”模式下,字符串始终通过串行端口发送到主机计算机(即使终端处于本地模式)。
某些选项仅适用于 块模式 的情况。此选项功能强大,因为它提供表单并通过突发传输来减轻主机计算机的负载。但它设置起来更复杂,因此使用不多。
在块模式下,屏幕的某些区域用于表单的文本,因此是写保护的 "Prot" {WPRT}。选项可以将这些区域中的字符设置为显示为暗淡、反向视频 {WPRT Rev} 和/或下划线 {WPRT Undrln}。{WPRT Intensity} 可以设置为暗淡、正常甚至空白(不可见)
在传输块时,是否应将写保护文本(表单中的原始文本)发送到主机:{Send All} 还是写保护文本也是读取保护的:{Send Erasable}
应该发送整个屏幕还是仅发送滚动区域?{Send Area}。当达到当前光标位置时,发送是否应该停止?如果 {Xfer Term} 设置为 Cursor,则仅发送屏幕上直到光标的数据。
要附加到数据块的终止符号是什么?{Blk End} 或在页面末尾 {Send Term} 终止。
有各种类型的锁定。一种是由于流控制而锁定的键盘。请参阅 键盘锁定 另一种锁定 {Feature Lock} 是禁止主机计算机通过向终端发送某些转义序列来更改终端设置的锁定。放置此类锁定可能会导致意外行为,因为应用程序向被忽略的终端发送转义序列。并非所有设置参数都会锁定。除非您有充分的理由这样做,否则不应启用此类锁定。
功能键锁定将禁止计算机重新定义可编程功能键发送的内容。如果您在功能键中编程了一些重要的内容,您可能想要使用此功能。
也称为“CRT 保护程序”。这会在终端一段时间未使用后关闭(或调暗)屏幕。它可以延长屏幕的使用寿命并节省一些能源。按下任何键通常会恢复屏幕,并且可能会“执行”该键,因此最好按下 Shift 键等。
对于 Wyse,如果没有设置 {Printer Attached},请将其设置为 Off。这不是必须的,但如果您这样做,任何将文本发送到打印机(而不是终端)的转义序列都将被忽略。
设置打印机端口与设置主端口上的通信端口大致相同(通常更简单)。有一些特定于打印机的选项。打印机是串行打印机还是并行打印机?如果是并行打印机,则应在设置中将其指定为并行打印机,并连接到终端上的并行端口(如果有)。是否应在打印作业结束时向打印机发送 FF(换页)?如果 {Print Term} 设置为 FF,则会发生这种情况。
有各种文件需要编辑才能为终端设置计算机。如果您幸运的话,您只需要编辑 /etc/inittab。您可以通过在控制台(或从任何工作终端)进行编辑来完成此操作。
为了在计算机启动(或切换运行级别)时在串行端口(以及连接到它的终端)上运行登录进程,必须将 getty 命令放入 /etc/inittab 文件中。从命令行运行 getty 可能会导致问题(请参阅 如果从命令行运行 getty:程序会停止 以了解原因)。Getty GETs a TTY(终端)正在运行。每个终端都需要自己的 getty 命令。每个 /etc/inittab 文件中至少还有一个控制台的 getty 命令。找到它,并将真实终端的 getty 命令放在它旁边。此文件可能包含文本终端的示例 getty 行,这些行被注释掉,因此您只需取消注释它们(删除前导 #)并更改一些参数。
允许使用的参数取决于您使用的 getty
最适合直接连接终端的两个 getty 是
您的 Linux 发行版可能附带 getty_ps 或 agetty 用于文本终端。某些发行版既不提供也不提供。不幸的是,他们通常只是称其为“getty”。如果您需要确定您拥有哪一个,请查看“getty”的手册页。截至 2007 年,agetty(在“util-linux 包”中)似乎比 getty_ps 更广泛使用,后者位于:getty_ps
作为尝试确定您拥有哪个 getty 的最后手段,您可以查看其可执行代码(通常在 /sbin 中)。getty_ps 将 /etc/gettydefs 嵌入在此代码中。要搜索它,请转到 /sbin 并键入
strings getty | grep getty
如果 getty 实际上是 agetty,则上述操作不会产生任何结果。但是,如果您有 agetty,则输入
getty -h
应该会显示 agetty 选项 [-hiLmw]。
各种 getty 的源代码可以从 Getty 软件 下载。
如果您不使用调制解调器控制线(例如,如果您只使用最少的 3 根导线:发送、接收和公共信号地),您应该通过使用“local”标志来告知 getty。此标志的格式取决于您使用的 getty。
登录后,您会注意到(通过使用“top”、“ps -ax”或“ptree”)getty 进程不再运行。它怎么了?为什么在您的 shell 被终止后,getty 会再次重启?原因如下。
在您输入用户名后,getty 会获取用户名并调用 login 程序,告知它您的用户名。getty 进程被 login 进程取代。login 进程会询问您的密码,检查密码,并启动密码文件中指定的任何进程。此进程通常是 bash shell。如果是这样,bash 启动并取代 login 进程。请注意,一个进程取代另一个进程,并且 bash shell 进程最初是作为 getty 进程启动的。这其中的含义将在下面解释。
现在,在 /etc/inittab 文件中,getty 应该在被终止时重新生成(重启)。在调用 getty 的行中是这样说的。但是,如果 bash shell(或 login 进程)被终止,getty 会重新生成(重启)。为什么?嗯,login 进程和 bash 都是 getty 的替代品,并继承了其前任建立的信号连接。事实上,如果您观察细节,您会注意到替代进程将具有与原始进程相同的进程 ID。因此,bash 有点像伪装的 getty,具有相同的进程 ID 号。如果 bash 被终止,就好像 getty 被终止了一样(即使 getty 不再运行)。这会导致 getty 重新生成。
当用户注销时,该串行端口上的所有进程(包括 bash shell)都会被终止。如果启用,当调制解调器 DCD 电压下降向串行端口发送挂断信号时,也可能发生这种情况。注销或 DCD 下降都将导致 getty 重新生成。可以通过手动终止 bash(或 login)来强制 getty 重新生成,方法是在“top”中按 k 键等,或使用“kill”命令。您可能需要使用信号 9(无法忽略)来终止它。
您通常应该从 /etc/inittab
内部运行 getty,而不是从命令行运行,否则在终端上运行的一些程序可能会意外地被挂起(停止)。原因如下(如果您不关心原因,请跳到下一节)。如果您从另一个终端(例如 tty1)的命令行启动用于 ttyS1 的 getty,那么它将以 tty1 作为其“控制终端”,即使它实际运行的终端是 ttyS1。因此,它的控制终端是错误的。但是,如果它是在 inittab 文件内部启动的,那么它将以 ttyS1 作为控制终端(正确)。
即使控制终端是错误的,ttyS1 上的登录也能正常工作(因为您将 ttyS1 作为 getty 的参数给出)。标准输入和输出被设置为 ttyS1,即使控制终端仍然是 tty1。在 ttyS1 上运行的其他程序可能会继承此标准输入/输出(连接到 ttyS1),一切都正常。但是,某些程序可能会错误地尝试从其控制终端 (tty1) 读取,这是错误的。现在,tty1 可能会认为这些程序正在 tty1 的后台运行,因此尝试从 tty1 读取(应该是 ttyS1)会导致尝试读取的进程停止。(后台进程不允许从其控制终端读取)。您可能会在屏幕上看到类似以下消息:“[1]+ Stopped
”。此时,您陷入困境,因为您无法与尝试通过错误终端与您通信的进程进行交互。当然,要摆脱困境,您可以转到另一个终端并终止该进程等。
agetty 的意思是“alternative getty”(替代 getty),它是原始 getty (getty_ps) 的更易于使用的替代品。
/etc/inittab 中的示例行
S1:23:respawn:/sbin/getty -L 19200 ttyS1 vt102
S1 来自 ttyS1。23 表示 getty 在进入运行级别 2 或 3 时运行。respawn 表示如果 getty(或取代它的进程,例如 bash)被终止,getty 将自动启动(重新生成)。/sbin/getty 是 getty 命令。-L 表示本地(忽略调制解调器控制信号)。-h(示例中未显示)启用硬件流控制(与 stty crtscts 相同)。19200 是波特率。ttyS1 表示 /dev/ttyS1(MS-DOS 中的 COM2)。vt102 是终端类型,此 getty 会将环境变量 TERM 设置为此值。没有配置文件。在编辑 getty 后在命令行上键入“init q”,您应该会看到登录提示符。
agetty
程序将尝试自动检测终端内部设置的奇偶校验(包括无奇偶校验)。它不支持 8 位数据字节加 1 位奇偶校验。请参阅 8 位数据字节(加奇偶校验)。如果您使用 stty
设置奇偶校验,agetty
将自动取消设置,因为它最初希望奇偶校验位像数据位一样通过。这是因为它需要获取您键入登录名的最后一位(可能是奇偶校验位),以便它可以自动检测奇偶校验。因此,如果您使用奇偶校验,请仅在文本终端内部启用它,并让 agetty
自动检测并在计算机上设置它。如果您的终端支持接收奇偶校验,则登录提示符看起来会是乱码,直到您键入内容,以便 getty 可以检测到奇偶校验。乱码提示符会阻止访客等尝试登录。这可能正是您想要的。
有时奇偶校验的自动检测会存在问题。发生这种情况是因为在您首次键入登录名后,agetty
会启动 login
程序以完成您的登录。不幸的是,login
程序无法检测奇偶校验,因此如果 getty
程序未能确定奇偶校验,则 login
也将无法确定。如果首次登录尝试失败,login
将允许您再次尝试等等(所有操作都在奇偶校验设置错误的情况下进行)。最终,在多次登录尝试失败后(或超时后),agetty
将再次启动并重新开始登录序列。一旦 getty 再次运行,它可能会在第二次尝试时检测到奇偶校验,然后一切都可能正常工作。
如果奇偶校验错误,login
程序无法正确读取您键入的内容,您将无法登录。如果您的终端支持接收奇偶校验,您将继续看到乱码屏幕。如果 getty 未能检测到奇偶校验,则通常会在提示符之前将 /etc/issue 文件转储到屏幕,因此屏幕上可能会出现更多乱码单词。
为什么 agetty 不能通过键入的第一个字母检测奇偶校验?这是一个例子:假设它检测到一个 8 位字节,其奇偶校验位为 0(高位),并且具有奇数个 1 位。它的奇偶校验是什么?嗯,奇数个 1 位意味着它是奇校验。但它也可能只是一个没有奇偶校验的 8 位字符。到目前为止,无法确定是哪种情况。但到目前为止,我们已经排除了偶校验的可能性。因此,奇偶校验的检测是通过消除过程进行的。
如果键入的下一个字节与第一个字节相似,并且也只消除了偶校验的可能性,则仍然无法确定奇偶校验。这种情况可能会无限期地持续下去,在极少数情况下,登录会失败,直到您更改登录名。如果 agetty 找到奇偶校验位 1,它会假设这是一个奇偶校验位,而不是 8 位字符的高位。因此,它假设您不在用户名中使用元字符(高位设置),即您的姓名是 ASCII 码。
可能会以各种方式进入“登录循环”。假设您只为您的登录名键入一个或两个字母,然后按回车键。如果这些字母不足以进行奇偶校验检测,则在奇偶校验检测之前运行登录。有时,如果您在 agetty 首次启动时未打开终端和/或未连接终端,则会发生此问题。
如果您陷入此“登录循环”,一种解决方法是多次按回车键,直到您获得 getty 登录提示符。另一种方法是等待一分钟左右以超时。然后,getty 登录提示符将由 getty 程序放在屏幕上,您可以再次尝试登录。
不幸的是,agetty 无法检测到此奇偶校验。截至 1999 年末,它没有禁用奇偶校验自动检测的选项,因此会检测到不正确的奇偶校验。结果是登录过程将是乱码,并且奇偶校验设置将错误。因此,尝试使用带有奇偶校验的 8 位数据字节似乎是不可行的。
名称经常被错误拼写为 ps_getty
。(大部分内容来自 Greg Hankins 的旧 Serial-HOWTO)
对于此 getty,需要在配置文件中添加条目,并在 /etc/inittab
中添加条目。以下是一些用于您的终端的示例条目,您可以将其放入配置文件 /etc/gettydefs
中。
# 38400 bps Dumb Terminal entry
DT38400# B38400 CS8 CLOCAL # B38400 SANE -ISTRIP CLOCAL #@S @L login: #DT38400
# 19200 bps Dumb Terminal entry
DT19200# B19200 CS8 CLOCAL # B19200 SANE -ISTRIP CLOCAL #@S @L login: #DT19200
# 9600 bps Dumb Terminal entry
DT9600# B9600 CS8 CLOCAL # B9600 SANE -ISTRIP CLOCAL #@S @L login: #DT9600
请注意,DT38400、DT19200 等只是标签,必须与您在 /etc/inittab
中使用的标签相同。
如果您愿意,您可以让 getty
在登录横幅中打印有趣的内容。在我的示例中,我打印了系统名称和串行线路。您可以添加其他内容
@B The current (evaluated at the time the @B is seen) bps rate.
@D The current date, in MM/DD/YY.
@L The serial line to which getty is attached.
@S The system name.
@T The current time, in HH:MM:SS (24-hour).
@U The number of currently signed-on users. This is a
count of the number of entries in the /etc/utmp file
that have a non-null ut_name field.
@V The value of VERSION, as given in the defaults file.
To display a single '@' character, use either '\@' or '@@'.
完成编辑 /etc/gettydefs
后,您可以通过执行以下操作来验证语法是否正确
linux# getty -c /etc/gettydefs
确保没有其他 getty
或 uugetty
配置文件用于连接终端的串行端口,例如(/etc/default/{uu}getty.ttyS
N 或 /etc/conf.{uu}getty.ttyS
N),因为这可能会干扰在终端上运行 getty
。如果存在此类冲突文件,请将其删除。
编辑您的 /etc/inittab
文件以在串行端口上运行 getty
(替换为您环境的正确信息 - 端口、速度和默认终端类型)
S1:23:respawn:/sbin/getty ttyS1 DT9600 vt100
重启 init
linux# init q
此时,您应该在终端上看到登录提示符。您可能需要按回车键以引起终端的注意。
“m”代表调制解调器。此程序主要用于调制解调器,截至 2000 年中期,它需要重新编译才能用于文本终端(除非您使用硬件流控制 - 这通常需要手工制作电缆)。有关直接连接终端的文档,请参阅手册的“Direct”部分:mgetty.texi
。
查看 /etc/mgetty/mgetty.config
的最后几行,了解如何配置终端的示例。除非您说“toggle-dtr no”,否则它会认为您有一个调制解调器,并否定 PC 上的 DTR 引脚,徒劳地尝试重置不存在的调制解调器。与其他 getty 不同,mgetty 不会将自身附加到终端,直到有人按下该终端的任何键,因此您会在 top
或 ps
中看到终端的 ?,直到这种情况发生。/var/log/mgetty/
中的日志可能会显示一些警告消息,这些消息仅适用于调制解调器,您可以忽略它们。
以下是您放入 /etc/inittab
中的简单行的示例:
s1:23:respawn:/sbin/mgetty -r ttyS1
有“stty”命令和“setserial”命令用于设置串行端口。一些(或所有)需要的 stty 设置可以通过 getty 完成,可能不需要使用 setserial,因此您可能不需要使用任何一个命令。这两个命令(stty 和 setserial)设置串行端口的不同方面。Stty 完成大部分工作,而 setserial 配置低级内容,例如中断和端口地址。要“保存”设置,这些命令必须写入某些文件(shell 脚本),这些文件在每次计算机启动时运行。Linux 发行版通常提供一个运行 setserial
的 shell 脚本,但很少提供一个运行 stty
的脚本,因为很少需要它。
这部分内容在 3 个 HOWTO 中:Modem、Serial 和 Text-Terminal。根据它出现在哪个 HOWTO 中,存在一些细微的差异。
如果您有笔记本电脑 (PCMCIA),请在阅读 笔记本电脑:PCMCIA 之前不要使用 setserial
。
setserial
是用户用于与串行设备驱动程序通信的程序。通常,如果您仅使用 PC 标准设备附带的一个或两个串行端口,则永远不需要使用它。即使在其他情况下,大多数额外的串行端口也应由现代内核自动检测。除非您有物理硬件上的跳线设置的过时 ISA 串行端口,或者您的内核(例如 2.2 或更早版本)既不检测也不设置您的附加 PCI 串行端口,否则您需要使用 setserial。在某些情况下,setserial 程序可能以前使用过,并且某些过去的用户(可能是您)手动给出了错误的串行端口数据。如果 setserial 未配置为接受内核所说的内容,它将使用之前某人设置的内容覆盖(可能正确的)内核数据。
setserial
允许您(或 shell 脚本)与串行软件对话。但还有另一个程序 tt/stty/,它也处理串行端口,用于设置端口速度等。setserial
实际上是一个用词不当的名称,它不会在串行卡上设置任何信息。示例:它无法更改卡上设置的 irq。稍后会详细介绍。
setserial
处理串行端口的较低级别配置,例如处理 IRQ(例如 5)、端口地址(例如 3f8)等。它的一个主要问题是它无法设置或配置串行端口硬件:它无法在硬件中设置 IRQ 或端口地址。此外,当它看似报告硬件配置时,有时是错误的,因为它实际上不会探测硬件,除非您明确告知它这样做。即使这样,它也不会进行现代类型的总线探测,并且某些硬件可能永远不会被它找到。尽管如此,它显示的内容在大多数情况下都是正确的,但如果您在使串行端口工作时遇到问题,那么很有可能是错误的。
在过去,当 IRQ 和端口地址由串行卡上的跳线设置时,人们会使用 setserial
来告诉驱动程序这些跳线是如何设置的。如今,当即插即用方法检测到无跳线串行端口的设置方式时,除非您遇到问题或使用旧硬件,否则不再真正需要 setserial
。此外,如果 setserial
使用的配置文件错误,则会出现问题。在这种情况下,如果您使用 setserial
尝试找出端口的配置方式,它可能只会重复 setserial 配置文件中的不正确信息。
setserial
有时可以帮助查找串行端口。但只有当您知道端口地址并使用正确的选项时才有用。对于现代端口,通常有更好的方法通过即插即用方法来查找它们。
因此,名称 setserial
有点用词不当,因为它不会在硬件中设置 I/O 地址或 IRQ,它只是在驱动程序软件中“设置”它们。驱动程序天真地相信 setserial
告诉它的内容,即使它与驱动程序通过使用即插即用方法找到的内容冲突。太糟糕了,它至少没有为 setserial 发出此类冲突的警告消息。由于设备驱动程序被认为是内核的一部分,因此在其他文档中经常使用“内核”一词,而没有提及任何“串行驱动程序”。
某些发行版(和版本)设置了内容,以便在启动时由初始化 shell 脚本(在 /etc 目录树中)运行 setserial
。但是此脚本使用的配置文件可能位于 /etc 树或 /var 树中。在某些情况下,如果您希望 setserial
在启动时运行,您可能必须采取一些操作。如果没有内置到内核或作为模块加载的串行支持,setserial
将无法工作。如果您(或脚本)尝试使用 setserial
,则模块可能会自动加载。
虽然可以使 setserial
探测硬件 IO 端口地址以尝试确定 UART 类型和 IRQ,但这有严重的局限性。请参阅 探测。它无法在 PnP 或 PCI 串行端口的硬件中设置 IRQ 或端口地址(但串行驱动程序的即插即用功能可能会执行此操作)。它也无法直接读取存储在硬件配置寄存器中的 PnP 数据。但是,由于设备驱动程序可以读取这些寄存器,并且 setserial 告诉您设备驱动程序的想法,因此它可能是正确的。或者,它可能是在告诉您 setserial
先前(可能错误地)告诉驱动程序的内容。如果没有进行其他检查,就无法确定。
串行驱动程序(对于 Linux 内核 2.4 和 2.6)查找一些“标准”旧式串行端口、ISA 总线上的 PnP 端口以及 PCI 总线上的所有受支持端口硬件。如果它正确找到您的端口,则无需使用 setserial
,除非它们已在 setserial 配置文件中“设置”不正确。驱动程序不会探测使用卡上跳线设置的旧 ISA 串行端口的 IRQ,并且可能会使这些 IRQ 错误。
除了 setserial
的 man 页面外,还要查看 /usr/doc/setserial.../
或 /usr/share/doc/setserial
中的信息。这应该告诉您如何处理 Linux 发行版的 setserial。虽然 setserial
在所有发行版中的行为都相同,但运行它的脚本、如何配置此类脚本(包括自动配置)以及脚本文件的名称和位置等都取决于发行版。如果您的串行端口是即插即用端口,您可能需要查阅其他 HOWTO,例如即插即用或串行。
如果串行模块被卸载,则驱动程序会忘记先前由 setserial
所做的更改。但是,当驱动程序忘记它时,发行版提供的脚本可能会将其保存在某处的文件中,以便在重新加载模块时可以恢复它。此外,由 setserial 所做的更改可能会存储在 setserial 的配置文件中(请参阅您的发行版的文档,此信息不在 man 页面中)。
setserial
命令请记住,setserial
无法在硬件中设置任何 I/O 地址或 IRQ。这由即插即用软件(由驱动程序运行)或旧式串行端口的跳线完成。即使您通过 setserial
向驱动程序提供 I/O 地址或 IRQ,它也不会设置这些值,并假定它们已被设置。如果您给它错误的值,串行端口将无法正常工作(如果可以工作)。
对于旧式端口,如果您知道 I/O 地址但不知道 IRQ,您可以命令 setserial 尝试确定 IRQ。
您只需键入 setserial
而不带任何参数即可查看可能的命令列表。这无法向您显示单字母选项,例如 -v 用于详细模式,您通常在排除故障时应使用该选项。请注意,setserial 将 IO 地址称为“端口”。如果您键入
setserial -g /dev/ttyS*
您将看到一些有关设备驱动程序如何配置端口的信息。在许多情况下,您会看到显示的一些端口,乍一看似乎是错误的 IRQ 和地址。但是,如果您也看到:"UART: unknown"
,则只需忽略整行,因为该地址上不存在串行端口。
如果您将 -a 添加到选项 -g,您将看到更多信息,尽管很少有人需要处理(或理解)此附加信息,因为您看到的默认设置通常可以正常工作。在正常情况下,硬件的设置方式与“setserial”报告的方式相同。但是,如果您遇到问题,则 setserial
很有可能出错。事实上,您可以运行“setserial”并分配一个纯粹虚构的 I/O 端口地址、任何 IRQ 以及您想要拥有的任何 uart 类型。然后,下次您键入“setserial ...”时,它将显示您提供给驱动程序的这些伪造值。它们也将正式注册到内核中,如“scanport”命令(Debian)在屏幕顶部显示的那样。当然,如果您尝试使用此类端口,串行端口驱动程序将无法正常工作(如果可以工作)。因此,在向 setserial
提供参数时,“一切皆有可能”。好吧,几乎是这样。如果您为一个端口分配了一个已分配的基本地址(例如 3e8),它可能不会接受它。但是,如果您使用 3e9,它将接受它。不幸的是,3e9 实际上已分配,因为它在以基本地址 3e8 开头的范围内。因此,这个故事的寓意是在使用 setserial 分配资源之前,请确保您的数据正确。
虽然在 PC 断电时由 setserial 所做的分配会丢失,但配置文件可能会在 PC 再次启动时恢复它们。在较新版本中,您通过 setserial 更改的内容可能会自动保存到配置文件中。当 setserial
运行时,它使用配置文件中的信息。
此配置文件的位置取决于您的发行版。查看 /etc/ 树中的某个位置(例如 /etc/init.d/ 或 /etc/rc.d/)的启动脚本,并阅读“serial”或“setserial”之类的启动脚本。它应该显示配置文件所在的位置。在 Debian 中,有 4 个选项可用于此配置文件
setserial
报告的内容,并将其放入配置文件中。之后,即使有人通过在命令行上运行 setserial
命令然后关闭系统进行了更改,也永远不要对配置文件进行任何更改。(“autosave-once”选项)setserial
检测到的任何内容保存到配置文件中。(“autosave”选项)在过去(可能在 2000 年之前),没有任何配置文件,配置是在运行 setserial
的 shell 脚本中手动设置(硬编码)的。请参阅 编辑脚本(版本 2.15 之前)。
仅当您怀疑端口已启用(通过 PnP 方法、BIOS、跳线等)时,才使用 setserial
探测端口。否则,setserial
探测将永远找不到它,因为它的地址不存在。问题是软件在指定的 I/O 地址查找端口的位置。在使用“setserial”探测之前,可以运行“scanport”(Debian)命令来在一个扫描中检查所有可能的端口。它可以粗略地猜测某些端口上有什么,但无法确定 IRQ。这是一个快速的初步启动。它可能会使您的 PC 挂起,但到目前为止,它对我来说工作正常。请注意,非 Debian 发行版似乎不提供“scanport”。是否有其他扫描程序?
使用适当的选项,setserial
可以探测(在给定的 I/O 地址)串行端口,但您必须猜测 I/O 地址。例如,如果您要求它探测 /dev/ttyS2,它将仅在它认为 ttyS2 所在的地址 (2F8) 进行探测。如果您告诉 setserial ttyS2 位于不同的地址,那么它将在该地址进行探测,等等。请参阅 探测
此类探测的目的是查看那里是否有 uart,如果有,它的 IRQ 是什么。主要将 setserial
用作最后的手段,因为有更快的方法来尝试它,例如 wvdialconf 检测调制解调器,查看非常早期的启动时消息,或使用 pnpdump --dumpregs
或 lspci -vv。但是,如果您想使用 setserial
检测硬件,请使用例如
setserial /dev/ttyS2 -v autoconfig
如果结果消息显示 uart 类型(例如 16550A),则说明正常。如果相反,它显示 uart 类型的“unknown
”,则表示该 I/O 地址上根本没有串行端口。一些廉价的串行端口无法正确识别自己,因此如果您看到“unknown
”,您仍然可能在该位置有一个串行端口。
除了自动探测 uart 类型外,setserial 还可以自动探测 IRQ,但这也不总是正常工作。在一种情况下,它首先给出了错误的 irq,但当重复该命令时,它找到了正确的 irq。在 setserial >= 2.15 的版本中,您上次探测测试的结果可以自动保存并放入特定于发行版的配置文件中,例如 /etc/serial.conf
或 /etc/sysconfig/serial
或 Debian 的 /var/lib/setserial/autoserial.conf
。下次启动 Linux 时将使用此文件。
可能是两个串行端口都在硬件中设置了相同的 IO 地址。当然,这通常不允许用于 ISA 总线,但有时还是会发生。探测检测到一个串行端口,而实际上有两个。但是,如果它们具有不同的 IRQ,则 IRQ 探测可能会显示 IRQ = 0。对我来说,只有当我首先使用 setserial
为 IRQ 提供一个虚构值时,才会发生这种情况。
虽然 setserial
可能会通过初始化脚本运行,但在加载串行模块时(或者当内核启动内置串行驱动程序(如果已编译到内核中)时),也会运行类似于 setserial
的内容。因此,当您观看屏幕上的启动消息时,它可能看起来像运行了两次,实际上确实如此。
如果第一条消息是针对旧式端口的,则显示的 IRQ 可能是不正确的,因为它没有探测 IRQ。如果串行端口有第二个报告,则可能是 /etc/init.d/setserial 等脚本的结果。它通常不进行探测,因此可能会错误地判断硬件的实际设置方式。它仅显示保存在配置文件中的配置数据。在 setserial 2.15 之前的旧方法是手动将此类数据直接写入脚本。
当内核加载串行模块时(或者如果将“模块等效项”内置到内核中),则会检测到所有受支持的 PnP 端口。对于旧式(非 PnP)端口,仅自动检测 ttyS{0-3}
,并且驱动程序设置为仅使用 IRQ 4 和 3(无论硬件中实际设置了哪些 IRQ)。不对 IRQ 进行探测,但可以手动执行此操作。您会在启动时消息中看到这一点,就像运行了 setserial
一样。
为了纠正 IRQ 中可能的错误(或出于其他原因),可能存在一个脚本文件在某处运行 setserial
。不幸的是,如果此文件中的某些 IRQ 错误,内核仍将具有有关 IRQ 的不正确信息。此文件通常是启动时完成的初始化的一部分。它是否运行取决于您(和/或您的发行版)如何设置内容。它也可能取决于运行级别。
在修改配置文件之前,您可以通过在命令行上键入“建议的” setserial
命令来测试它。在某些情况下,当您关机时,此 setserial
使用的结果将自动保存到某处,例如 /etc/serial.conf(或 autoserial.conf 或 serial)。因此,如果它工作正常(并解决了您的问题),则无需修改任何配置文件。请参阅 使用 /etc/serial.conf 等的配置方法。
这是在 setserial
2.15 (1999) 之前完成的方式。目标是修改(或创建)/etc 树中的一个脚本文件,该文件在启动时运行 setserial。大多数发行版都提供了这样的文件(但它最初可能没有驻留在 /etc 树中)。
因此,在版本 2.15 (1999) 之前,它更简单。您所做的只是编辑脚本。没有 /etc/serial.conf 文件(或类似文件)来配置 setserial。因此,您需要找到在启动时运行“setserial”的文件并对其进行编辑。如果它不存在,您需要创建一个文件(或将命令放在在启动时早期运行的文件中)。如果当前正在使用这样的文件,则很可能位于 /etc 目录树中的某个位置。但 Redhat <6.0 已在 /usr/doc/setserial/ 中提供了它,但您需要在使用之前将其移动到 /etc 树。
过去常用脚本 /etc/rc.d/rc.serial
。Debian 发行版使用 /etc/rc.boot/0setserial
。曾经使用过的另一个文件是 /etc/rc.d/rc.local
,但它可能运行得不够早。据报道,其他进程可能会在 rc.local 运行之前尝试打开串行端口,从而导致串行通信失败。后来,它很可能在 /etc/init.d/ 中找到,但通常不打算对其进行编辑。
如果提供了这样的文件,它很可能包含许多注释掉的示例。通过取消注释其中一些和/或修改它们,您可以正确设置内容。重要的是使用 setserial
的有效路径和有效的设备名称。您可以手动执行此文件(只需以超级用户身份键入其名称)来测试它是否正常工作。像这样的测试比重复重启以使其正确工作要快得多。
对于版本 >= 2.15(前提是您的发行版实现了更改,Redhat 最初没有实现),可能更棘手,因为在启动时运行 setserial 的文件 /etc/init.d/setserial 或类似文件不打算由用户编辑。请参阅 使用 /etc/serial.conf 等的配置方法。
此类脚本中的示例行是
/sbin/setserial /dev/ttyS3 irq 5 uart 16550A skip_test
或者,如果您希望 setserial 自动确定 ttyS3 的 uart 和 IRQ,您将使用类似这样的内容
/sbin/setserial /dev/ttyS3 auto_irq skip_test autoconfig
这是为您要自动配置的每个串行端口完成的,使用机器上确实存在的设备名称。在某些情况下,由于硬件原因,它无法正常工作。
在 setserial 版本 2.15 (1999) 之前,配置 setserial 的方法是手动编辑在启动时运行 setserial 的 shell 脚本。请参阅 编辑脚本(版本 2.15 之前)。这很简单,但简单明了的方法已更改为不必要的复杂方法。如今,脚本和配置文件是两个不同的文件,而不是一个文件。此 shell 脚本未编辑,但从配置文件(例如 /etc/serial.conf
(或 /var/lib/setserial/autoserial.conf
))获取其数据。
此外,您甚至可能不需要编辑 serial.conf(或类似文件),因为在命令行上使用“setserial”命令可能会自动导致 serial.conf 被适当编辑。这样做是为了您可能不需要编辑任何文件即可设置(或更改)每次 Linux 启动时 setserial 执行的操作。
经常发生的情况是:当您关闭 PC 时,在启动时运行“setserial”的脚本会再次运行,但这次它只执行“stop”情况的部分所说的操作:它使用“setserial”来查找“setserial”的当前状态,并将该信息放入串行配置文件(例如 serial.conf
)。因此,当您运行“setserial”来更改 serial.conf 文件时,它不会立即更改,而只会在您正常关机时才更改。
现在你或许可以猜到可能会出现什么问题。假设您没有正常关机(有人拔掉电源等),并且更改没有被保存。假设您尝试使用“setserial”命令,但忘记最后运行一次以恢复到原始状态(或者在恢复原始状态时出错)。那么您“实验性”的设置就会被保存下来。最糟糕的是,除非您知道配置文件中设置了哪些选项,否则您不知道会发生什么。Debian(以及可能的其他发行版)中的一个选项被称为“AUTOSAVE-ONCE”,它只在您第一次使用 setserial 命令进行更改时保存更改。
如果设置了“###AUTOSAVE###”选项,并且您手动编辑了 serial.conf 文件,那么当您关机时,您的编辑将被破坏,因为它会被更改回关机时 setserial 的状态。有一种方法可以禁用在关机时更改 serial.conf 文件,那就是从 serial.conf 文件的第一行删除“###AUTOSAVE###”或类似内容。在 Debian 发行版中,第一次安装后首次关机时,会自动完成从第一行删除“###AUTOSAVE###”的操作。为了保留这种效果,创建了“AUTOSAVE-ONCE”选项,该选项仅在系统首次关机时(在您安装或更新 setserial 程序后)进行保存。
现在,最常用于在启动时运行 setserial(以符合配置文件)的文件是 /etc/init.d/setserial (Debian) 或 /etc/init.d/serial (Redhat),或其他类似路径,但通常不应编辑它。对于 2.15 版本,Redhat 6.0 只有一个文件 /usr/doc/setserial-2.15/rc.serial,如果您希望 setserial 在启动时运行,则必须将其移动到 /etc/init.d/。
要禁用端口,请使用 setserial
将其设置为 “uart none”。这不会被保存。/etc/serial.conf 文件的格式似乎与在命令行中 “setserial” 之后放置的参数格式相同,每个端口占一行。如果您不使用自动保存,您可以手动编辑 /etc/serial.conf 文件。
为了强制将 setserial 设置的当前设置保存到配置文件 (serial.conf) 中,而无需关机,请执行您关机时通常执行的操作:运行 shell 脚本 /etc/init.d/{set}serial stop
。“stop” 命令将保存当前配置,但串口仍然可以正常工作。
在某些情况下,您可能会同时安装旧的和新的配置方法,但希望只有其中一种在启动时运行。Debian 将过时的文件标记为 "...pre-2.15"。
默认情况下,ttyS0 和 ttyS2 将共享 IRQ 4,而 ttyS1 和 ttyS3 共享 IRQ 3。但是,虽然共享串行中断(在运行程序中使用它们)对于 PCI 总线来说是可以的,但对于 ISA 总线来说是不允许的,除非您:1. 拥有 2.2 或更高版本的内核,并且 2. 您已编译支持此功能,并且 3. 您的串行硬件支持它。请参阅 Serial-HOWTO:中断共享和内核 2.2+。
如果您只有两个串口,ttyS0 和 ttyS1,您仍然可以,因为对于不存在的设备,IRQ 共享冲突不存在。
如果您添加一个传统的内部调制解调器(没有即插即用),并保留 ttyS0 和 ttyS1,那么您应该尝试找到一个未使用的 IRQ,并在您的串口(或调制解调器卡)中设置它,然后使用 setserial 将其分配给您的设备驱动程序。如果 IRQ 5 没有被声卡使用,则可以将其用于调制解调器。
如果您有一台笔记本电脑,请阅读 PCMCIA-HOWTO 以获取有关串行配置的信息。对于主板上的串口,setserial 的使用方式与台式机相同。但是对于 PCMCIA 卡(例如调制解调器),情况就不同了。PCMCIA 系统的配置应自动运行 setserial,因此您不需要运行它。如果您运行它(通过脚本文件或通过 /etc/serial.conf),它可能会有所不同并导致问题。serial.conf 的自动保存功能不应保存 PCMCIA 卡的任何内容(但 Debian 在 2.15-7 版本之前是这样做的)。当然,始终可以使用 setserial 来了解驱动程序如何为 PCMCIA 卡配置。
stty
完成了串行端口的大部分配置,但由于应用程序(和 getty 程序)通常会处理这个问题,您可能不需要经常使用它。如果您遇到问题或想查看端口是如何设置的,它会很有用。它还配置了终端接口,终端接口不仅被串口使用,而且在您在 Linux 中使用命令行界面时也会使用。尝试在您的终端/控制台中输入 ``stty -a'',看看它现在的设置。也可以尝试在不带 -a(all)的情况下输入,以获得一个简短的列表,显示它与 “normal”(正常)设置的不同之处, “normal” 设置是使用命令 "stty sane"
设置的。除非您想成为串行历史学家,否则不要试图学习所有设置,因为许多设置仅适用于 1970 年代缓慢的旧式哑终端。大多数默认设置应该可以正常工作。
stty
在手册页中有文档记录,在 info 页中有更详细的说明。输入 "man stty"
或 "info stty"
。
许多 stty 选项(或设置)都以 “o”(output,输出)或 “i”(input,输入)开头。例如:onlcr
。输出是字节从计算机流出的过程,而输入是字节流入计算机的过程。“视角”是计算机,而不是串口或连接到串口的设备。例如,接收到的输入数据通过电缆进入串口芯片。该芯片在将来自串行的位转换为并行表示后,然后将其(通过程序读取)发送到主计算机内存中的大型串口缓冲区。因此,芯片既有输入也有输出,但由于它是计算机的输入数据,因此其输出被认为是输入。输出流经该芯片的情况类似。“输入”和“输出”指的是相对于计算机而不是串口硬件(芯片)的流动方向。
setserial
只处理实际的串口,而 stty 用于终端,无论它们是通过串口、网络访问,还是通过 Linux PC 监视器上的虚拟终端,还是像 xterm 这样的 GUI 终端窗口访问。对于 PC 监视器、xterm 或网络,许多 stty 设置都是没有意义的。更改波特率等似乎实际上没有任何作用。
以下是 stty 配置的一些项目:速度(位/秒)、奇偶校验、位/字节、停止位数量、是否剥离第 8 位?、调制解调器控制信号、流控制、中断信号、行尾标记、更改大小写、填充、缓冲区溢出时发出蜂鸣声?、将您键入的内容回显到屏幕、允许后台任务写入终端?、定义特殊(控制)字符(例如,按下哪个键进行中断)。有关更多详细信息,请参阅 stty
手册或 info 页。另请参阅手册页:termios
,它涵盖了 stty 设置的相同选项,但(截至 1999 年中期)涵盖了 stty 手册页未提及的功能。有关某些特殊字符的用法,请参阅 特殊(控制)字符。
在某些 getty(getty_ps 包)的实现中,通常会给 stty 的命令被键入到 getty 配置文件:/etc/gettydefs 中。即使没有此配置文件,getty 命令行也可能足以进行设置,以至于您不需要 stty。
可以编写 C 程序来更改 stty 配置等。查看一些关于这方面的文档可能有助于更好地理解 stty 命令(及其许多可能的参数)的用法。Serial-Programming-HOWTO 可能有用,但它已过时。《termios》手册页包含了 C 语言结构(termios 类型)的描述,该结构将 stty 配置存储在计算机内存中。此 C 结构中的许多标志名称与 stty 命令的参数几乎相同(并且执行相同操作)。
要设置硬件流控制,请使用 “crtscts”。对于软件流控制,有 3 个设置:ixon、ixoff 和 ixany。
ixany:主要用于终端。在流控制停止后,按任意键将重新启动流。如果您使用 “stop scroll” 键(或类似键)停止滚动,则按任意键将恢复滚动。它很少需要,因为再次按下 “scroll lock” 键将执行相同的操作。
ixon:使端口能够监听 Xoff 并在其收到 Xoff 时停止传输。同样,如果它收到 Xon,它将恢复传输。
ixoff:使端口能够在主内存中的缓冲区几乎已满时,向传输线路发送 Xoff 信号。它可以保护端口所在的设备免受溢出。
对于连接到快速 PC 的慢速哑终端(或其他慢速设备),PC 的端口不太可能溢出。因此,您实际上很少需要启用 ixoff。但通常会启用它 “以防万一”。
如何使用 stty 来查看或设置您当前正在使用的终端以外的终端?如果外部终端正在使用中并且在其上运行 shell,通常不可能这样做。在其他情况下,例如在另一个终端(例如 tty1)键入时处理 ttyS2,请使用 stty -F /dev/ttyS2 ...
(或使用 --file 而不是 F)。如果 ... 是 -a,则显示所有 stty 设置(-a 表示 all,全部)。
但是,如果外部终端(本例中为 ttyS2)在其上运行 shell,那么您看到的内容可能是具有欺骗性的,并且尝试设置它将不起作用。虚拟终端也存在此问题,例如从 tty1 处理 tty3 等。请参阅 终端上的两个接口 以了解它。
当使用启用命令行编辑的 shell(例如 bash)时,存在两种不同的终端接口(或线路规程:当您键入 stty -a 时看到的内容)。当您在现代 shell 中在命令行中键入时,您有一个临时的 “raw”(原始)接口(或原始模式),其中每个字符都由 shell 的命令行编辑器在您键入时读取。一旦您按下 <return> 键,命令行编辑器就会退出,并且终端接口将从原始模式更改为标称的 “cooked”(熟)接口(熟模式),用于使用上次熟模式使用的 stty 配置的终端(shell 已保存它并且它会被恢复)。此熟模式会持续到下一个提示符发送到终端为止(这只是一小部分秒),但它在命令执行期间(或至少在命令执行的第一阶段)存在。请注意,永远不会在此熟模式下键入任何命令,但在原始模式下在命令行中键入的内容会在熟模式下由 shell 开始执行。
当提示符发送到终端时,终端从 “熟” 模式变为 “原始” 模式(就像您启动编辑器(如 vim)时一样)。提示符表示启动命令行编辑器。“原始” 模式的设置仅基于从 “熟” 模式获取的基本 stty 设置。原始模式保留这些设置,但更改其他几个设置以将模式更改为 “原始”。它根本不基于先前 “原始” 模式中使用的设置(与 “熟” 模式形成对比, “熟” 模式由 shell 恢复到其先前的设置)。因此,如果使用 stty 更改原始模式的设置,则一旦在终端按下 <return> 键,这些设置将永久丢失。
现在,当您键入 stty 以查看终端接口时,您可能会获得熟模式或原始模式的视图。您需要弄清楚您正在查看哪一个。如果您从外部终端(而不是您当前正在键入的终端)使用 stty,那么您很可能会看到原始模式设置,因为终端几乎一直处于原始模式。所做的任何更改都只会对原始模式进行,并且当有人在您尝试 “设置” 的外部终端按下 <return> 键时,这些更改将丢失。但是,如果您键入 stty 命令以查看/更改您正在使用的终端的配置,然后按下 <return> 键,情况就不同了。<return> 使终端进入熟模式,并且您的更改在 shell 返回到原始模式之前被保存。由于进入原始模式不会更改所有 stty 设置,因此您通过 stty 进行的一些更改可能仍然存在于原始模式中,并且不会被 <return> 破坏。
这种情况可能会产生问题。例如,假设您损坏了终端接口,使其无法显示您键入的内容等。要恢复它,您需要转到同一台 PC 上的另一个终端,并键入 “stty -F dev/ttyS1 sane”(或类似内容)。这将不起作用,因为终端处于原始模式!当然,您可以尝试在已损坏的终端上键入 “stty sane ...”,但您看不到您键入的内容。以上所有内容不仅适用于哑终端,也适用于 PC 监视器上使用的虚拟终端以及 X 中的终端窗口。换句话说,它适用于几乎所有使用 Linux 的人。
幸运的是,当您启动 Linux 时,任何在启动时运行 stty 的文件都可能处理没有 shell 在其上运行的终端(或没有终端的串口),因此对于这种特殊情况没有问题。
如果您需要每次计算机启动时都让 stty
设置串行接口,那么您需要将 stty
命令放在每次计算机启动时(Linux 启动时)都会执行的文件中。它应该在串口被使用之前运行(包括在端口上运行 getty)。有很多可能的位置可以放置它。如果它被放置在多个位置,而您只知道(或记住)其中一个位置,那么很可能会发生冲突。因此,请务必记录您所做的事情。
一个放置它的位置是在系统启动时运行 setserial 的同一个文件中。该位置取决于发行版和版本。似乎最好将其放在 setserial 命令之后,以便首先完成底层操作。如果您在 /etc 树中有一些目录,其中每个文件都在启动时执行(System V Init),那么您可以为此目的创建一个名为 “stty” 的文件。
大约在 2000 年之前,如果您想在外部终端上使用 stty,则需要使用重定向运算符 “<”。例如,要在 tty1 上使用 stty 对 ttyS2 进行操作,您需要键入:stty .... < /dev/ttyS2。在 2000 年之后(假设您的 setserial 版本 >= 1.17 且 stty >= 2.0),创建了一种更好的方法,使用 -F 选项:stty -F /dev/ttyS2。当旧的重定向方法失败时,此方法将起作用。
上面的旧重定向示例使 ttyS2 成为 stty 的标准输入。这为 stty 程序提供了指向 “文件” ttyS2 的链接,以便它可以 “读取” 它。但是,它没有像人们可能期望的那样读取发送到 ttyS2 的字节,而是使用该链接来查找端口的配置设置,以便它可以读取或更改它们。在过去,有些人试图使用 ``stty ... > /dev/ttyS2'' 来设置终端。这不起作用。相反,它会获取 stty 命令为您所在的终端(例如 tty1)正常显示的消息,并将此消息发送到 ttyS2。但它不会更改 ttyS2 的任何设置。
以下是旧重定向运算符的一个问题(如果您改用较新的 -F 选项,则不会发生这种情况)。有时,当尝试使用 stty 时,命令会挂起,并且什么也不会发生(即使在按下 <return> 之后,您也不会获得下一个命令的提示符)。这很可能是由于端口卡住,因为它正在等待调制解调器控制线之一被断言。例如,除非您已设置 “clocal” 以忽略调制解调器控制线,否则如果没有断言 CD 信号,端口将不会打开,并且 stty 将无法用于它(除非您使用较新的 -F 选项)。硬件流控制似乎也存在类似的情况。如果端口的电缆甚至没有需要断言的引脚的导体,那么就没有简单的方法可以阻止挂起。
摆脱上述挂起的一种方法是使用较新的 -F 选项,并根据需要设置 “clocal” 和/或 “crtscts”。如果您没有 -F 选项,您可以尝试在端口上运行一些程序(例如 minicom),这将强制它运行,即使控制线说不要运行。然后,希望此程序可能会设置端口,使其在将来不需要控制信号即可打开:clocal 或 -crtscts。要使用 “minicom” 执行此操作,您可能需要重新配置 minicom,然后退出并重新启动它。与其如此麻烦,不如直接重启 PC,或者通过使用虚拟终端使用 “top” (或 “ps” 获取进程号,然后使用 “kill” 杀死该进程)来杀死进程。
过时的重定向方法(在更高版本中仍然有效)是键入 ``stty ... < /dev/ttyS2''。如果使用 -F 的新方法有效,但过时的方法挂起,则意味着端口由于调制解调器控制线未断言而挂起。因此,过时的重定向方法可能仍然对故障排除有用。
有关 termcap 的更详细讨论,请参阅 Terminfo 和 Termcap(详细)。您运行的许多应用程序都使用 terminfo(以前是 termcap)数据库。此数据库具有每个终端型号或类型(例如 vt100)的条目(或文件),并告知终端可以执行哪些操作,为各种操作发送哪些代码,以及为初始化终端发送哪些代码。
由于许多终端(和 PC 也是)可以模拟其他终端并具有各种 “操作模式”,因此对于给定的物理终端,可能有多个 terminfo 条目可供选择。它们通常具有相似的名称。getty 的最后一个参数(对于 agetty 和 getty_ps)应该是您正在使用的终端(或终端仿真)的 terminfo 名称(例如 vt100)。
terminfo 不仅仅指定终端能够做什么,并公开向终端发送哪些代码才能使其执行这些操作。它还指定 “bold”(粗体)的外观(是反相视频还是高强度等),光标的外观,字母是黑色、白色还是其他颜色等。在 PC 术语中,这些被称为 “首选项”。它还指定要发送到终端的初始化代码(类似于发送到调制解调器的初始化字符串)。Linux 不会自动将此类字符串发送到终端。请参阅 初始化字符串。如果您不喜欢屏幕上的显示外观和行为,您可能需要编辑(然后更新)terminfo(或 termcap)文件。请参阅 Terminfo 编译器 (tic),了解如何更新。
这些是终端的两个环境变量:TERM 和 TERMINFO,但您可能不需要对它们做任何操作。TERM 必须始终设置为您正在使用的终端类型(例如 vt100)。如果您不知道类型(名称),请参阅 我的终端的 terminfo 名称是什么?。TERMINFO 包含 terminfo 数据库的路径,但如果数据库位于默认位置,则可能不需要它(或者 TERMINFO 可以由 Linux 发行版附带的文件自动设置)。您可能想查看 已编译数据库位置。
幸运的是,getty 程序通常会在登录前为您设置 TERM。它只是使用 getty 命令行(在 /etc/inittab 中)指定的终端类型。这允许应用程序找到您的终端名称,然后在 terminfo 数据库中查找终端功能。有关 TERM 的更多详细信息,请参阅 TERM 变量。
如果找不到您的 terminfo 数据库,您可能会在终端上看到有关它的错误消息。如果发生这种情况,是时候检查 terminfo 位于何处,并在需要时设置 TERMINFO。您可以使用 “locate” 命令搜索常见的 terminfo 文件(例如 “vt100”)来查找 terminfo 数据库的位置。确保您的终端在此数据库中。设置 TERMINFO 的一个示例是:export TERMINFO=/usr/share/terminfo(将其放在 /etc/profile 或类似文件中)。如果此数据库中您的终端数据不合您的心意,您可能需要对其进行编辑。请参阅 Terminfo & Termcap(简述)。
您需要确切的名称才能设置 TERM 环境变量或提供给 getty
。termcap 和 terminfo 数据库应使用相同的名称,因此您只需要找到一次即可。终端通常具有别名,但如果显示多个名称,请使用第一个名称。
要查找它,请尝试查看 /etc/termcap... 文件(如果您有)。如果没有,则查看 terminfo 树(请参阅 已编译数据库位置)或尝试查找 terminfo 源代码文件(请参阅 源代码数据库位置。
配置文件 /etc/ttytype 用于将 /dev/ttySn 的映射到每个 terminfo 的终端名称。tset/reset 使用它,但如果 TERM 环境变量已正确设置,则不需要此文件。由于 Linux getty 为每个 tty 设置 TERM,因此您不需要此文件。在其他类 Unix 系统(如 FreeBSD)中,/etc/ttys 文件将 ttys 映射到更多内容,例如适当的 getty 命令和连接类别(例如 “拨号”)。Linux ttytype 的示例行:vt220 ttyS1
默认情况下,root 用户不能从终端登录。要允许这样做,您必须根据 “securetty” 手册页创建(或编辑)文件 /etc/securetty。要限制某些用户和/或某些终端等的登录,请编辑 /etc/login.access(这取代了旧的 /etc/usertty 文件 ??)。/etc/login.def 确定是否要使用 /etc/securetty,并且可以对其进行编辑,以使 /etc/securetty 不是必需的(或不使用)。/etc/porttime 限制了某些 tty 和用户可以使用计算机的时间。如果用户登录尝试失败次数过多,则该用户可能会被禁止再次登录。请参阅 “faillog” 手册页,了解如何控制此行为。
有时,有些命令只想在启动时仅针对某种类型的终端执行。对于 stty 命令来说,这样做没有问题,因为可以使用重定向运算符 < 来指定命令用于哪个终端。但是 shell 别名或函数呢?您可能想要为 ls 命令创建一个函数,以便仅在彩色终端或控制台上对目录列表进行颜色编码。对于单色终端,您需要相同的函数名称(但函数体不同),它将使用符号代替颜色编码。在哪里放置这些对于不同终端而言不同的函数定义?
您可以将它们放在 /etc/profile 中的 “if” 语句中,该语句在每次登录时启动时运行。条件 “if” 语句仅在终端是指定类型时才定义某些函数等。
虽然此 if 语句的大部分功能可以在 dircolors 的配置文件中完成,但这里提供了一个 bash shell 的示例。如果终端是 “linux”,它会使 ls 命令显示颜色,但如果您使用的是哑终端 (VT220),则使用 ls -F。请注意,-F 选项使用符号来提供有关文件类型的信息,就像颜色编码一样。因此,尽管彩色显示可能看起来更令人印象深刻,但仍有替代方案可用于 ls 命令的颜色使用。
if [ "$TERM" = linux ]; then eval `dircolors`; elif [ "$TERM" = vt220 ]; then ls () { command ls -F $* ; }# to export the function ls(): declare -xf ls else echo "From /etc/profile: Unknown terminal type $TERM" fi
有一个名为 “mapchan” 的免费程序,它将终端键盘(输入)上键入的字符(字节)根据用户提供的映射表映射为不同的字符。它还可以映射发送到屏幕(输出)的字符。这对于重新映射外语字母表的键盘非常有用。大多数发行版似乎不提供它(如果任何发行版提供,请告诉我)。Yura Kalinichenko(乌克兰,部分为俄语)的源代码 下载 mapchan 等
Terminfo(以前是 Termcap)是一个终端功能和更多信息的数据库。对于每个(几乎所有)终端型号,它都会告诉应用程序终端能够做什么。它会告诉您向终端发送哪些转义序列(或控制字符),以便执行诸如将光标移动到新位置、擦除屏幕的一部分、滚动屏幕、更改模式、更改外观(颜色、亮度、闪烁、下划线、反相视频等)之类的操作。大约在 1980 年之后,许多终端支持一百多个不同的命令(其中一些命令需要数字参数)。
terminfo 向应用程序提供信息的一种方式是通过程序员可以放入 C 程序中的 “ncurses” 函数。例如,如果程序想要将光标移动到第 3 行、第 6 列,它只需调用:move(3,6)。move() 函数(ncurses 的一部分)知道如何为您的终端执行此操作(它已读取 terminfo)。因此,它会向终端发送适当的转义序列,以便为特定终端执行此特定移动。一些程序直接从 terminfo 文件获取信息,而无需使用 ncurses。因此,不需要 ncurses 的 Linux 包可能仍然需要适用于您的终端的 terminfo 文件。
terminfo 缩写通常比 termcap 的缩写长,因此更容易猜测它们的含义。terminfo 的手册页更详细(并包括旧的 termcap 缩写)。此外,termcap 条目有大小限制,而 terminfo 则没有。因此,除非您已经致力于使用 termcap,否则建议您使用 terminfo。
terminfo 数据库是已编译的,因此具有源部分和已编译部分。旧的 termcap 数据库只有源部分,但通过单个命令,可以将此源转换为 terminfo 源,然后进行编译。因此,您可能无需拥有任何 terminfo 源,因为 termcap 源可以创建已编译的 terminfo 数据库。要查看您现在正在使用的终端(包括 PC 监视器)的数据库显示,请键入 “infocmp”,您应该会看到它的源 terminfo “文件”。
要查看您的终端(例如 vt100)是否在 terminfo 数据库中,请键入 “locate vt100”。如果您需要查找终端的 terminfo 名称,请浏览已编译数据库中的文件列表,或参阅 我的终端的 terminfo 名称是什么?
键入 “locate vt100” 可能会显示 /usr/lib/terminfo/v/vt100、/usr/share/terminfo/v/vt100、/home/.../.terminfo/v/vt100 和/或 /etc/terminfo/v/vt100。所有这些都是已编译 terminfo 文件的可能位置。虽然 /etc/terminfo 目录不是它的标准位置,但在那里有一些终端类型可能很有用,以防 /usr 目录不可访问。例如,/usr 可能位于单独的磁盘或分区上,该磁盘或分区无法挂载。通常,如果主 terminfo 数据库位于上述位置之一,则使用它的程序能够找到它。否则,可以将环境变量 TERMINFO 设置为指向此数据库的路径。示例:TERMINFO=/usr/share/terminfo
对于 Linux 的 Debian 发行版,ncurses-term 包中包含几个常用的终端(包括监视器控制台)。这些终端被放入 /etc/terminfo/ 中。数据库中的所有终端都位于 ncurses-bin 包中,并进入 /usr/share/terminfo/。
如果已编译的 terminfo 位于多个位置,则一切通常都可以正常工作,直到有人安装新的 terminfo 文件(来自较新的发行版、来自网络、通过编辑旧文件等)。每个新的 terminfo 文件都应替换该文件所有现有的旧副本(位于各个位置),除非您废除冗余位置。如果您不确保完成此操作,那么某些应用程序可能会最终仍然找到并使用仍然存在于 “可能” 位置的旧的(并且可能是错误的)terminfo 数据。将环境变量 TERMINFO 设置为最新的位置(如上所述)将有助于避免此问题。
虽然源代码文件可能未安装在您的计算机上,但如果您有已编译的代码,则有另一种获取源代码的方法。只需使用 “infocmp
” 命令。
所有终端的源代码文件可能是 /etc/termcap 和/或 terminfo.src(或其他名称)。有关创建(或修改)这些源文件所需的格式,请参阅手册页:terminfo(5) 或 termcap(5)。文件 terminfo.src 可能位于您计算机上的各个位置,或者可能未包含在您的 Linux 发行版中。使用 locate
命令尝试找到它。它可以在网络上找到:http://catb.org/terminfo/。
源文件中的数据使用 “tic” 程序进行编译,该程序能够termcap 格式和 terminfo 格式之间进行转换。因此,您可以从 termcap 源创建已编译的 terminfo 数据库。用于安装 Linux 的安装程序可能已将已编译的文件安装在您的硬盘上,因此除非您修改 /etc/termcap(或 terminfo.src),否则您无需编译任何内容。“tic” 将自动将生成的已编译文件安装到 terminfo 目录中,以供应用程序使用。它安装在哪个位置取决于 ... 请参阅 “man tic” 以获取说明。
最好查看您正在使用的终端的 terminfo 条目(当然是源代码),并阅读注释。快速检查它(不带注释)的方法是只键入 “infocmp”。但是注释可能会告诉您有关终端的特殊信息,例如您需要如何设置它,以便它可以与 terminfo 数据库正确配合使用。
为了节省磁盘空间,可以删除除您拥有(或将来可能需要)的终端类型之外的所有 terminfo 数据库。不要删除 “Linux 终端”(控制台)或用于 x-终端仿真的 termcaps,例如 xterm。当应用程序无法确定您正在使用的终端类型时,可能需要终端类型 “dumb”。如果安装程序仅安装您拥有的终端的 terminfo,并且如果您可以在几秒钟内通过 Internet 获取新安装终端的 termcap,则可以节省磁盘空间。
不幸的是,terminfo 和 termcap 文件中存在许多错误。此外,许多 terminfo 文件不完整,并且未定义终端上可用的某些功能。有时,您可以无需修改 terminfo 即可解决问题,但在其他情况下,您需要修改它,或者可能使用具有良好 terminfo 的另一种仿真。
供应商提供的 terminfo 文件状态不佳,原因有很多。其中一个原因是,在 1980 年代,当许多 terminfo 文件被编写时(通常采用 termcap 格式),应用程序并没有利用更高级的终端功能。因此,如果 termcap(或 terminfo)文件中没有这些功能,没有人会抱怨。此外,编写 termcap 通常由人手短缺的志愿者完成。如今,诸如 vim 之类的程序使用“上下文高亮显示”,而 minicom 使用终端的图形字符集。这些程序通常需要添加更多定义到旧的 termcap 中。这可能(也可能没有)已经完成。
大多数终端都有硬件错误(在其固件中),有时这些错误通过修改 termcap 来“修复”。然后,制造商可能会发送更换芯片,以修复该错误。并非所有用户都会费心去获取更换芯片。因此,根据您的终端中安装的固件芯片,您的终端可能存在 2 个或更多 terminfo 文件。这种情况通常未在 termcap 中注明,并且 Linux 可能只提供其中一个 termcap。过去几乎从未使用过的功能中存在的一些硬件错误可能从未得到修复。此外,一些报告的硬件错误可能从未得到修复,因为它们在当时并不重要,或者因为终端制造公司倒闭等等。
要执行此操作,您需要一份终端手册,其中显示了终端使用的转义序列。来自 1990 年代的新手册通常不显示此信息。您还需要 terminfo 手册(手册页“terminfo”就是其中之一)。在编辑 terminfo 源文件后,您可以使用“tic”对其进行编译。“tic”应自动将编译后的 terminfo 文件放入为其保留的正确目录中。
如果您想找到比提供的 terminfo 条目更好的特定终端的 terminfo 条目,您可以尝试在 Internet 上搜索(但您找到的可能更糟)。如果您的新 terminfo 条目比旧条目更好,并且看起来稳定(您已使用一段时间且没有问题),那么您应该将副本发送给 terminfo 的维护者,如 terminfo(或 termcap)的源文件开头所述。
terminfo 中通常包含几个初始化字符串,这些字符串可能会发送到终端以对其进行初始化。这可能会更改屏幕的外观,更改终端所处的模式,和/或使终端模拟另一个终端。没有初始化字符串会自动发送到终端以对其进行初始化。人们可能期望 getty 程序应该这样做。如果它这样做,人们可以更改存储在终端内部的设置,但此更改不会发生,因为初始化字符串会覆盖它。应用程序似乎也没有初始化(每个 terminfo 发送一个初始化字符串)。
要实际发送初始化字符串,您必须使用命令行(或 shell 脚本(例如 /etc/profile))中给出的命令。此类命令包括:“reset”、“tset”、“tput init”或“setterm -initialize”。有时不需要发送初始化字符串,因为终端在通电时可能会自行正确设置(使用用户已设置并保存在终端非易失性存储器中的选项/首选项)。
环境变量 TERM 应设置为您正在使用的终端的名称。如果 TERM 尚未设置,并且您不知道终端的名称,请参阅 我的终端的 terminfo 名称是什么?。它通常由传递给 getty 程序的 terminal_type 参数设置(在 /etc/inittab 文件中查找)。此名称必须在 Terminfo 数据库中。只需在命令行键入“set”即可查看 TERM 设置为什么(或键入:tset -q)。在控制台(监视器)上,TERM 设置为“linux”,它是模拟名为“linux”的虚构终端模型的 PC 监视器。由于“linux”接近 vt100 终端,并且许多文本终端也是如此,因此“linux”指定有时可以用作文本终端的临时权宜之计。
如果多种类型的终端可以连接到同一端口 (/dev/ttyS...)(例如,如果有一个开关允许不同类型的终端使用同一串口,或者如果端口连接到调制解调器,人们可以通过不同类型的终端呼叫进来),那么每次有人连接到串口时都需要设置 TERM。通常有一个查询转义序列,以便计算机可以询问终端的类型。另一种方法是要求用户键入(或选择)他/她正在使用的终端类型。您可能需要使用 tset 或编写一个简短的 shell 脚本来处理此问题。
一种方法是使用“reset”(与“tset”相同;请参阅手册页)。reset 尝试确定您正在使用的终端的终端名称。然后,它在 terminfo 中查找数据并向您的终端发送初始化字符串。它还可以设置 TERM 的值。例如,用户拨号登录。.profile 登录脚本被执行,其中包含以下语句:eval `tset -s ?vt100`。这导致:用户被询问是否正在使用 vt100。用户要么回答是,要么键入他/她正在使用的实际终端类型。然后“reset”发送初始化字符串并将 TERM 设置为此终端名称(类型)。
本节是关于在使用终端时控制终端-计算机接口和/或更改终端设置。它解释了(或指向解释)终端用户如何控制和检查接口,以及如何使用设备驱动程序提供的各种命令。它没有解释如何使用许多应用程序、shell 或大多数 Linux 实用程序。终端上常用的两个命令是
当然,终端要工作必须通电。如果您没有看到登录提示符,请按几次“return”(或“enter”)键。然后键入您的帐户名(后跟 return/enter),并在提示时键入您的密码(也后跟 return/enter)。确保不要全部键入大写字母。如果您这样做,计算机可能会认为您拥有无法发送小写字母的旧终端,并且串行驱动程序可能会将自身设置为仅向终端发送大写字母。
如果没有任何反应,请确保主机计算机和终端都正常。如果主机计算机已关闭(未通电),您在终端键盘上键入的内容可能会显示在屏幕上,因为计算机上的发送和接收引脚可能连接在一起,从而导致“关闭”计算机回显字符。如果主机计算机正在运行时您无法登录,请参阅 故障排除。
在命令行键入时,shell(例如 Bash shell)正在读取您键入的内容并对其做出反应。您键入的内容首先会通过操作系统终端驱动程序部分。此驱动程序可能会转换某些字符(例如,将“return”键生成的“return”字符更改为 Linux 文件的“换行符”)。它还会识别您可能在键盘上键入的某些控制代码,例如 ^C 以中断程序的执行。它通常还会将您键入的内容回显到显示器。Stty 可用于配置此终端驱动程序的行为方式,包括禁用其某些(或全部)功能。
在某些终端上同时使用 emacs 和 vi 可能会出现一些问题。少数终端没有 escape 键 (ESC),因此您可能需要键入 Ctrl-[ 以获取 ESC。
如果存在软件流控制,则 emacs 中的 ^S 命令将冻结显示。^Q 命令将解冻显示。一种解决方法是将此映射到另一个按键,通过以这种方式配置 emacs。一些终端具有元键,尽管您可能需要设置终端以创建元键。
Vi 使用 esc 键作为退出插入模式的命令。不幸的是,对于大多数终端,箭头键会向主机发送转义序列(以 ESC 字符开头)。Vi 必须区分 ESC 的这两个含义。一个智能的 vi(例如 vim,如果为此配置)能够通过注意 ESC 和下一个键之间的时间来检测差异。如果时间很短,则很可能是按下了光标键。在 vim 中使用“help cursor-keys”查找更多信息。
这是另一种解决此问题的方法。在 VT 终端上,左箭头键可以设置为发送 ESC [ D 或 ESC O D。其他箭头键类似,但使用 A、B 和 C 代替 D。如果您遇到问题,请选择 ESC [ D,因为另一个替代方案中的“O”可能会被 vi 解释为“打开一行”的命令。“[”应被 vi 解释为表示已按下箭头键。只要未设置“光标键应用程序模式”,就会发送 ESC [ D。ESC [ D 通常是默认设置,因此一切看起来都正常。除非许多 termcap 包含一个字符串(不是初始化字符串),它设置您想要避免的内容:“应用程序模式”。编辑器可能会在编辑器启动时将此字符串发送到终端。现在您遇到麻烦了。
此字符串具有 termcap 代码“ks”(terminfo 中的 smkx),意思是启用功能(和相关)键(包括箭头键)。应用程序通过向终端发送“ks”字符串来启用这些键。编写 termcap 的人推断,如果应用程序想要启用这些键,那么它们应该放入“应用程序键模式”,因为这是一个“应用程序”,但您不希望这样。
Linux 控制台没有“ks”字符串,因此您不会在控制台中陷入此陷阱。对于其他终端,您可能需要编辑 termcap(或 terminfo)或使用另一个 termcap 条目。您不仅需要更改“ks”字符串,还需要更改 kd、kl、kr、ku 的 termcap 定义。然后运行 tic 以安装它。
对于 vim (vi iMproved),有一种方法可以将其设置为使用 ESC O D 正常工作(因此您无需编辑 termcap):请参阅 vim 帮助中的“vt100-cursor-keys”。您可以运行“gitkeys”,然后按光标键查看它们发送的内容,但当您在编辑器中时,它们可能会设置为发送不同的内容。
文本终端的滚动速度受串行线路速度的限制。这种限制在一个方面是好的,因为滚动速度足够慢,您几乎可以在屏幕上的内容消失在屏幕底部之前阅读它。
但这也有一个缺点。例如,如果您复制大量文件(例如硬盘驱动器上的所有内容)并使用选项显示每个复制文件的完整名称(路径名),则串行线路的速度限制可能仅在屏幕上每秒显示 30 个文件。但是您的硬盘驱动器可以比这快很多倍地复制,但终端会将传输速度降低到终端可以显示的速度。它通过 流控制 来做到这一点。
解决方法是禁用屏幕上显示的“进度”信息,以防止其减慢“进度”。如果它只是每秒或更少次数更新进度数字,则应该不是问题。
仍然存在的一个问题是,如果某些终端键发送高位设置为 1 的字节,那么 Bash 似乎会忽略 terminfo 条目中定义的含义。这可能是因为,除非使用 7 位 ASCII,否则高位设置为 1 的字节可能代表非英文字母。我将此报告为 Bash 中的错误(但在几年后意识到它可能不是错误)。诸如 vim 编辑器和 lynx 浏览器之类的其他程序使用此类键可以正常工作(当它们设置为使用 7 位 ASCII 时)。
为了解决此问题,可以定义这些键在 Bash 中应执行的操作,方法是将此类定义放入 /etc/inputrc.
例如,当按下箭头键时,Wyse 60 将发送 D0-D3,前提是终端处于“应用程序键模式”。在修改 terminfo 以反映这一点后,它们仍然无法在 Bash shell 的命令行上工作。因此,我在 /etc/inputrc
中明确定义了箭头键,如下所示
# Arrow keys in 8 bit keypad mode: Sends d0-d3. -ap means application.
$if term=wy60-25-ap
set enable-keypad on
"\xd0": backward-char
"\xd1": forward-char
"\xd2": next-history
"\xd3": previous-history
$endif
如果终端已经处于“应用程序键模式”,则无需“set enable-keypad on”。enable-keypad 将向终端发送 terminfo 中名为 smkx 的转义序列(对于 wyse60 是 \E~3),并使箭头键发送 D0-D3。许多其他应用程序(Bash 以外)都会发送此序列,而无需被告知这样做。
Bash shell 的 readline 接口存在问题。Bash 2.01 (1998) 有一个 readline 接口,如果您使用哑终端,该接口会非常损坏。这在以后的版本中得到了修复。
如果 ls
使用颜色功能损坏了您的终端仿真,请将其关闭。ls --color
和 ls --colour
都使用颜色功能。某些安装默认情况下将 ls
设置为使用颜色。检查 /etc/profile
等中是否有 ls
别名。请参阅 ls 功能示例,了解如何使 ls
为控制台使用颜色,为终端使用单色。
终端挂起的症状是您键入的内容不显示在终端上(或者在某些情况下显示但没有任何作用)。如果您键入的内容不可见(或没有任何作用),请键入 ^Q 以重新启动流(如果流控制停止了它)。挂起也可能是由于
发送终端二进制文件 或 异常退出程序
如果您没有执行这两项操作中的任何一项,那么您正在运行的程序可能有错误,或者您与它的交互严重非法。
如果您想退出正在运行的程序,并且无法通过常用方法执行此操作(某些程序有您必须按下的特殊键才能退出),请尝试使用“top”或“kill”从另一个终端杀死它。如果进程拒绝死亡,则使用 top 中的信号 9 杀死它(或在命令行上使用“kill”)。“9”类型的强制退出可能会留下一些临时文件以及损坏的接口。如果这不起作用,杀死登录 shell 应该会导致 getty 启动并显示新的登录提示符。如果所有其他方法都失败,您可能需要重新启动计算机甚至关闭电源。仅仅重新启动可能不会改变串行端口硬件寄存器中可能已损坏的内容。
Linux 新手可能会无意中按下 Ctrl-S (^S)(或“No Scroll”键),这会神秘地冻结屏幕(尽管如果您使用软件流控制,这就是此键应该执行的操作)。要恢复正常的屏幕交互,请按 Ctrl-Q (^Q)。请注意,在“冻结”期间键入的所有内容都会被执行,但在您点击 ^Q 之前,您不会看到任何关于此的报告。因此,当它被冻结时,不要键入任何可能破坏文件等的剧烈操作。使用硬件流控制的一个论点是防止此类冻结。
这包括上一节的“冻结显示”=“终端挂起”的情况。
当显示看起来不正确,或者当您键入的内容未正确显示(如果显示),或者当您键入命令时没有任何反应时,您可能遇到了损坏的终端接口。在极少数情况下,当串行端口硬件自身损坏时,唯一的解决方法可能是循环电源(关闭 PC 并重新启动)。在某些情况下,仅循环终端电源即可修复它。有时重新登录可以解决问题。为此,请杀死在终端上运行的 shell 进程(或在运行 getty 时杀死 getty)。您可以从另一个终端执行此操作。一旦被杀死,一个新的 getty 进程会重新生成,这有望结束损坏。为终端循环电源(或重置)也可能有帮助。
损坏可能是由于以下原因造成的
如果向您的终端发送某些转义序列或控制字符,它将更改其特性。如果您不小心尝试显示二进制文件,它可能会偶然包含此类序列,这些序列可能会使您的终端进入某种奇怪的运行模式,甚至使其无法使用。始终使用为此目的设计的程序查看或编辑二进制文件,以避免这种情况发生。大多数编辑器和寻呼机都可以正常处理二进制文件,以免损坏接口。有些可能会显示一条消息,告诉您他们无法编辑二进制文件。但是,如果您执行以下操作,则很可能会损坏内容:“cat ....”或“cp .... /dev/tty..”或运行将二进制输出发送到“标准输出”的程序(除非您使用 > 等重定向此类输出)。
当使用通信程序时,远程计算机可能会向您的屏幕发送二进制文件,也可能发生损坏。还有许多其他可能发生这种情况的方式,因此请做好准备。即使是所谓的文本文件也可能包含不需要的控制代码。
要解决此问题,请重置终端。键入“reset”或“tset”或“setterm -reset”(当然,后跟 <return> -- 您键入的内容可能在屏幕上不可读)。这将从 terminfo 条目向终端发送重置字符串。作为替代方法,如果正确的设置已保存在终端内部,那么按下特殊键(可能在设置模式下)可能会恢复设置。如果您使用“reset”来设置终端,那么您可能仍然需要使用“reset”来发送初始化字符串。
请注意,在 2000 年,“reset”命令对于需要设置“clocal”的终端似乎已损坏,因为“reset”似乎取消设置了“clocal”。在 2001 年,它似乎已修复,因此您可能不需要阅读本段的其余部分。如果您遇到此问题,使用“reset”只会通过禁用终端和计算机之间的通信使情况变得更糟。您可能需要重新登录并希望 getty 设置“clocal”。如果您在没有要求的情况下看到登录提示符,那么您很幸运。否则,请参阅 症状和一些修复,了解如何获取登录提示符。您应该在需要它之前试用“reset”,如果“reset”使您注销或以其他方式无法正常工作,请使用“setterm -reset”。我在 2000 年 3 月提交了一个错误报告,但从未收到“已修复”通知。
对于您看到奇怪的“图形”字符而不是正常字符的情况,按 ^O 可能会切换回正常字母。“reset”命令也可以做到这一点,但它也会重置所有其他内容。
还有一种情况是,所有字母都具有错误的属性(太暗、太亮、闪烁,甚至不可见 :-),但制表符字符创建的空格是正常的。这是由设置此属性的转义序列引起的,但该属性不适用于制表符字符创建的空格。通过重置等修复。
大型应用程序(例如编辑器)通常在其代码中使用 stty 命令(或类似命令)来在您运行程序时临时更改 stty 配置。这可能会使设备驱动程序进入“原始”模式,以便您键入的每个字符都直接通过应用程序。驱动程序的回显被禁用,因此您在屏幕上看到的所有内容都直接来自应用程序。因此,许多控制命令(例如 ^C)可能在此类应用程序中不起作用。
当您告诉此类应用程序退出时,应用程序首先将 stty 设置恢复为应用程序启动之前的状态。如果您异常退出程序,那么您可能仍然处于命令行上的“原始模式”。当您键入的内容不再显示在屏幕上时,您应该怀疑发生了这种情况。
要退出原始模式并恢复正常的 stty 设置,请键入“stty sane”。但是,您必须在“return”之后键入此内容,并以“return”结尾。但是,按“return”键不起作用,因为“return”代码不再转换为 shell 正在等待的换行符。因此,只需键入换行符 (^J) 而不是“return”。“sane”终端接口可能与正常接口不完全相同,但通常可以工作。“stty sane”也可能有助于摆脱由其他原因引起的损坏的接口。
您可以在键盘上键入的许多控制字符被终端驱动程序“捕获”并执行各种任务。要查看这些控制命令,请键入:stty -a 并查看第 2-4 行。它们在 stty 手册页中得到了简洁的解释。可以使用 stty 命令将它们更改为不同的控制字符或禁用它们。因此,您的控制字符可能与下面描述的不同。它们用于命令行编辑、中断、滚动以及透明地传递下一个字符。
虽然终端驱动程序有一些用于命令行编辑的命令,但某些 shell 具有内置的真实编辑器(例如 Bash shell 中的“readline”)。此类编辑器通常默认开启,因此您无需执行任何操作即可启用它。如果它可用,您不需要学习以下许多命令,尽管它们通常仍然与命令行编辑器一起工作。最重要的是要学习 ^C(中断)、^D 以及如何停止滚动。
如果您想要查看的内容滚动到屏幕底部之外,您可以通过向主机发送“停止”信号(^S 或 Xoff)来阻止这种情况(前提是启用了 Xon-Xoff 流控制)。发送“启动信号以恢复 (^Q 或 Xon)。一些终端具有“No Scroll”键,该键将交替发送 Xoff 和 Xon 或可能发送硬件流控制信号 ?? 以下是 ctrl-S (^S) 和 ctrl-Q (^Q) 的作用
如果您既要停止滚动又要退出,请使用 ^C。如果您要停止滚动以执行其他操作,但想将生成输出的程序保留在内存中以便稍后可以恢复滚动,请使用 ^Z 暂停。
另一种滚动方法是通过寻呼机(如 more、less 或 most)管道输出。但是,输出可能不是标准输出,而是寻呼机无法识别的错误输出。要解决此问题,您可能需要使用重定向“2>&1”以使寻呼机正常工作。除非您需要向后滚动,否则通常只需使用 ^S 和 ^Q 即可,这更简单。
在 PC 控制台(模拟终端)上,您可以使用 Shift-PageUp 向后滚动。这通常是需要的,因为滚动速度通常太快而无法使用 ^S 停止。一旦您向后滚动,Shift-PageDown 将再次向前滚动。
^V 将下一个键入的字符(通常是控制字符)直接通过设备驱动程序发送,而无需任何操作或解释。回显的是两个 ASCII 字符,例如 ^C。
一些“文本”文件是 8 位 Latin1 (=ISO-8859-1)。请参阅 字符集。如果您的终端无法显示 Latin1(或未安装 Latin1 字符集),则某些符号(例如项目符号)将显示错误。在查看手册页(它们是 Latin1)时,您可以为 man 提供选项 -7,以便将所有内容转换为 ASCII。是否有某些寻呼机可以进行这些翻译?
如果使用“man”命令查看手册页,但将输出重定向到文件,则该文件将包含叠印。叠印是指某些打印字符通过在同一位置打印两次而显得粗体。因此,要打印叠印字符,文件在字符后包含一个退格键,然后重复相同的字符。如果这在文件中,如果您要在打印机上打印它,那就很好(除非打印机的正常输出太暗,以至于叠印几乎没有改善)。但如果您想使用该文件通过电子邮件发送或编辑,则不太好。
消除叠印的一种方法是使用“ul”(下划线)命令。您键入:ul -t dumb my_overstruck_file > output_file ul 命令将叠印转换为指定终端的粗体,并向 output_file 添加转义序列以生成粗体。但是“dumb”类型的终端没有转义序列,因此您会获得所需的结果。还有其他方法可以做到这一点,但这可能是“dumb”类型的终端的一种用途。
这些实用程序将提供有关终端接口的信息
终端设置通常在安装终端时使用终端手册中的设置程序设置一次。但是,某些设置可能会在终端使用时更改。您通常不会在使用终端时给出任何“stty”或“setserial”命令,因为它们很可能会损坏终端接口。但是,您可以更改终端屏幕的外观或其行为,而不会破坏接口的完整性。有时,这些更改由应用程序自动完成,因此您可能不需要处理它们。
进行此类更改的一种直接方法是在终端上使用设置键(或类似键),然后使用菜单(或类似菜单)进行更改。为此,您可能需要熟悉终端。 其他 3 种方法是从计算机向终端发送转义序列以进行更改。以下 3 个示例显示了设置反向视频的不同方法
这是最容易使用的命令。它使用长选项(但不使用它们之前的正常 --)。它查询 terminfo 数据库以确定要发送的代码。您可以更改颜色、亮度、自动换行、键盘重复、光标外观等。
“tput”命令类似于“setterm”,但不是使用普通单词作为参数,您必须使用 terminfo 使用的缩写。许多缩写都非常简洁且难以记住。
在“echo ^[[7m”示例中,要设置反向视频,^[ 是转义字符。要键入它,请键入 ^V^[(或 ^V 后跟 escape 键)。要使用此“echo”方法,您必须从终端手册或 terminfo 或 termcap 中找出要使用的代码。如果您在命令行上键入,则使用 setterm 或 tput 更简单。由于“echo ...”执行速度更快(因为它不进行任何查找),因此非常适合在启动时等运行的 shell 脚本中使用。
当您关闭终端时,您所做的更改将丢失(除非您通过进入设置模式并保存将其保存在非易失性终端存储器中)。如果您想再次使用它们而无需重新键入它们,请将命令放入 shell 脚本或使其成为 shell 函数。然后在您想要进行更改时运行它。使更改半永久性的一种方法是将命令放入每次登录或启动计算机时运行的文件中。
“screen
”软件包运行多个会话,类似于控制台上的虚拟终端:请参阅 控制台:/dev/tty?。您可以在会话之间来回切换。非免费的 Facet Term 软件也执行此操作。请参阅 FacetTerm
要注销,请键入“logout”或“exit”。在某些情况下,您的请求将被拒绝,但您应该被告知原因。拒绝的原因之一是如果您不在您登录的同一个 shell 中。另一种注销方法是按 ^D。由于 ^D 也用于其他目的,您可能不希望它使您注销。如果您在 Bash shell 中设置 IGNOREEOF,则 ^D 将不再使您注销。
如果两名用户登录到同一主机上的终端并想要相互聊天,他们可以使用“write”或“talk”(更好)程序。可以使用“mesg”命令阻止任何人(超级用户除外)向他们的终端写入(发送消息)。
要监视其他人在他们的终端上做什么,请使用“ttysnoop”程序。在“ttysnoop”中,两个终端具有相同的状态,并且在任一键盘上键入的任何内容都会出现在两个屏幕上(在相同的位置)。因此,如果您真的在监视并且不想被发现,则不应键入任何内容。
“ttysnoop”可以用于培训,指导员和学员并排坐在各自的终端旁。指导员可以观看学员的键入内容,并通过正确键入来纠正任何错误。学员可以观看指导员的键入内容,然后尝试键入。这就像他们使用一个终端,两个人同时将手放在键盘上一样。
“ttysnoop”有一个缺点,即所涉及的终端应全部为(或模拟)相同类型的终端(例如 vt100)。由于控制台(监视器)完成的“Linux”模拟以及“minicom”(或“picocom”)模拟都接近 vt100,因此可以使用两台 PC 使用 ttysnoop,其中一台 PC 运行模拟终端的“minicom”。
有一个非自由程序名为“DoubleVision”,它有点像 ttysnoop,但功能更多。终端可以是不同类型的,它可以记住和回放终端上的会话,以便您可以观察过去发生的事情。网页地址是 http://www.tridia.com。
可以将同一个串行端口同时用于文本终端和另一个串行设备,例如打印机或调制解调器。使用以下方法之一可以轻松实现物理连接
当您不将串行端口用于终端时,则需要确保不会错误地将打算用于终端的字符发送到另一个设备。一种不安全的方法是让终端上运行的程序继续运行,前提是当您使用另一个设备时,它们不会向终端发送任何内容。这有时有效,因为在串行端口上运行的终端不会阻止另一个程序(进程)打开同一个端口。如果另一个设备是打印机,则有时有效。但是,如果另一个设备应向计算机上的串行端口发送字节,则仍在端口上运行的终端程序通常会发回一些用于终端的字节,这些字节实际上会作为垃圾发送到另一个设备。
为避免这种情况,最好在使用另一个设备之前终止终端上运行的所有程序(进程)。这并不像听起来那么容易。您通常在端口上运行一个 shell(例如 Bash),如果您终止 Bash(例如通过注销),则程序“getty”将在端口上启动以尝试再次让您登录。如果您终止 getty,它将重新生成并再次启动。因此,乍一看,似乎不可能终止终端串行端口上的所有进程。
解决此问题的一种方法是切换运行级别,以便端口上没有 getty 程序或 shell 运行。对于运行级别修复,您可以创建另一个运行级别,其中端口上不运行 getty 程序。然后,您进入这个新的运行级别,并将串行端口用于其他用途。要进行设置,您需要编辑 /etc/inittab
并检查和/或设置 getty 运行的运行级别。例如,行:"S1:23:respawn:/sbin/getty
..." 表示 getty 将在运行级别 2 和 3 中(在 ttyS1 上)运行。现在您可以使其仅在级别 2 中运行(通过删除“3”),然后在您想要使用另一个串行设备时转到运行级别 3。因此,要将串行端口用于其他用途,超级用户将键入“init 3”以切换到运行级别 3。键入“init 2”以返回到运行级别 2。请注意,每个运行级别可能有一组不同的初始化脚本,但如果需要,您可以更改它,以便在两个运行级别中运行相同的脚本。脚本和运行级别的工作方式取决于发行版。对于 Debian 发行版,对此的解释在 /usr/doc/sysvinit
中,但也请查看 /usr/share/doc.
。
还有一个端口的 stty 配置问题。当端口用于终端时,它具有某些配置,但是当使用“init 3”切换运行级别并禁用端口上的 getty 时,端口的原始(启动时)配置不会恢复。您很可能最终得到以“raw”模式配置的端口。这意味着串行端口可能需要通过 stty 完全重新配置,要么通过您编写的脚本,要么通过在端口上运行的下一个应用程序。某些应用程序(例如从串行端口打印)可能无法完全重新配置。旧版本的 /etc/printcap 只能部分重新配置(但“lprng”下的新版本可以)。因此,您可能需要编写一个脚本来执行此操作。终端的 stty 配置将有所不同,具体取决于 shell 是否在其上运行、它是否处于“登录”提示符等。因此,切换运行级别后的 stty 配置可能会有所不同。
有关文本浏览器的评论,请参阅 2005 年文本模式浏览器综述。
“lynx”浏览器可以与所有文本终端正确配合使用。还有一些其他文本浏览器:“w3m”、“links2”(以前是“links”和“elinks”),它们仅在 Linux 控制台、xterm 或 vt100 终端上完美运行。但是,links2 和 elinks 可以通过将类型分类为“dumb”,就像早期终端一样,与任何终端一起使用。但是,这样的界面速度较慢。
“netrik”浏览器需要彩色终端。对于“links2”和“elinks”,您必须将终端设置为 8 位,无奇偶校验。(我多年前为 elinks 提交了一个错误报告,因为它应该可以与奇偶校验一起使用,最终在 2008 年我收到一条消息,称它已在 0.13 版本中修复,并且也可能在 0.11 和 0.12 中修复)。所有浏览器(包括 netrik ??)都支持 ssl(安全套接字层)用于编码通信。
“w3m”、“links2”和“elinks”克服了“lynx”的一些缺陷。“elinks”只是一个更高级的“links”。它们通常可以更好地显示表格,并且可以并排显示框架。不幸的是,它们尝试显示的内容(对于表格和框架)的宽度通常比终端宽度宽,因此文本可能会超出屏幕的右侧。这需要横向滚动才能看到所有内容。这样做可能会导致表格行的名称从屏幕上消失。因此,在某些情况下,使用“lynx”可能会更好。
不幸的是,“w3m”、“links2”和“elinks”没有像 lynx 那样的编号链接,也没有对 cookie 的良好支持。对 Javascript 的支持可能是一个问题。Elinks 和 netrik 提供部分支持。Links2 也提供支持(全部?)。Netrik 和 links2 都具有图形模式,可在 X Window 中使用。
还有其他文本浏览器项目。其中一些似乎已经停止开发。
这将把文本终端(或模拟器 PC)变成“串行控制台”。来自系统的许多消息通常仅发送到控制台(PC 监视器)。在启动成功后,通过键入命令:dmesg,也可以在任何终端上看到启动时发送到控制台的一些消息。如果启动失败,这将毫无用处,因为没有操作系统终端无法工作。可以修改 Linux 内核,以使终端充当控制台并接收来自 Linux 的所有 intended 给控制台的消息。不幸的是,来自 BIOS 的消息(在首次启动 PC 时显示在监视器上)不会在此终端上显示(但仍会在监视器上显示)。
有一个关于此主题的 Remote-Serial-Console-HOWTO。有些人在使用没有监视器或键盘的 PC 时使用串行控制台。通常,没有键盘和显卡 PC 将无法启动,但某些 BIOS 允许这样做。如果您足够幸运拥有支持“控制台重定向”的 BIOS,则可能需要在启动 PC 时使用 CMOS 菜单设置 BIOS。
创建“串行控制台”的方法取决于您的内核版本。在任何情况下,串行支持都需要编译到内核中,而不是作为模块提供。
创建串行控制台的说明包含在内核文档中:Documentation/serial-console.txt。内核 2.4+ 具有更好的文档,并提到了需要在串行端口上运行 getty。通常,设备 /dev/console 链接到 tty0(PC 控制台)。对于串行控制台,您可以通过以下方式创建一个新的 /dev/console
mknod -m 622 console c 5 1
您还必须将有关串行控制台的语句放入 /etc/lilo.conf 中,然后运行 lilo。这是因为需要在内核加载之前尽早运行等效于“setserial”的命令,以便串行控制台可以显示启动过程。有关更多详细信息,请参阅上面提到的内核文档和 lilo.conf 的手册页。
这是一个示例 /etc/lilo.conf
文件内容(适用于 ttyS0)
prompt
timeout=50
boot = /dev/sda
vga = normal # force sane state
install = /boot/boot.b
message = /boot/message
image = /vmlinuz
root = /dev/sda1
label = console
serial = 0,9600n8
append = "console=ttyS0"
同一台 PC 可以有多个串行控制台,但在“append”语句中提到的最后一个控制台成为您与之交互的主要控制台 ?? 请参阅内核文档(但不太清楚)。
1997 年 4 月的 Linux Journal 上有一篇关于修补 Linux 内核的文章。您可以在 src/linux/drivers/char/console.c 的开头添加几个 #defines
#define CONFIG_SERIAL_ECHO
#define SERIAL_ECHO_PORT 0x2f8 /* Serial port address */
The following was not in the Linux Journal article.
In kernel 2.+ (and earlier ??) you need to also set the baud
rate (unless 9600 is OK). Find these 2 lines:
serial_echo_outb(0x00, UART_DLM); /* 9600 baud */
serial_echo_outb(0x0c, UART_DLL);
Change 0x0c in the line above (depending on the baud rate you want):
115200 baud: 0x01 19200 baud: 0x06 2400 baud: 0x30
57600 baud: 0x02 9600 baud: 0x0c 1200 baud: 0x60
38400 baud: 0x03 4800 baud: 0x18
如果您当前使用控制台来选择要启动的操作系统(使用 LILO),但希望从终端执行此操作,则需要在 /etc/lilo.conf 文件中添加一行。请参阅 lilo.conf 的手册页并搜索“serial=”。
一种方法是仅使用终端(串行控制台)作为监视器。请参阅 将串行终端设为控制台。您可能仍然需要显卡,因为许多 BIOS 都需要显卡才能启动 PC。您的 BIOS 也可能需要键盘才能启动,或者它可能有一个选项,您可以在其中设置 BIOS 为不需要键盘。
如果在没有监视器的情况下启动,请确保引导加载程序(例如 LILO 或 GRUB)不会尝试在屏幕上显示任何图像。文本终端无法显示它,并且启动可能会挂起。
如果您有一个无键盘终端,也可以通过使用 ttysnoop 程序将其用作监视器。到目前为止,它不像控制台那样工作,因为它没有获得所有初始启动时消息。请参阅 将无键盘终端用作监视器
虽然您可能认为没有键盘的终端是无用的,但可以使用它作为监视器,并在 PC 自己的键盘上键入。这可以通过使用监视程序 ttysnoop
来完成。此程序允许一个终端的人员监视(或窥探)另一个人在另一个终端(或 PC 控制台监视器)上键入的内容。
现在假设您正在监视器 tty1 上键入内容。想象一下,有人在 ttyS2 上的终端正在监视您(使用 ttysnoop),并且屏幕看起来与您的屏幕完全一样。您在 tty1 上键入的所有内容也会显示在 ttyS2 上。现在移动间谍终端(在 ttyS2 上),使其与您的监视器(在 tty1 上)并排。您在 PC 键盘上键入的所有内容现在将显示在您面前的两个屏幕上:监视器和间谍终端。现在,在键入时只看间谍终端。断开监视器和终端键盘的连接,因为您都不使用它们。因此,您现在正在使用无键盘终端作为监视器。多么简单而巧妙的解决方案!
一个可能的问题(事实证明根本不是问题)是,通常,间谍终端的类型应与被监视的终端类型相同。由于监视器通常声明为“linux”类型的终端(这与 vt100 接近),您可能会认为真实终端也应该是(或至少模拟)vt100。不一定如此!例如,如果您有 wyse60 终端,您只需谎称您在 tty1 上有一个 wyse 终端(告诉 tty1 的 getty 程序它是 wyse60)。
这就是您可以侥幸逃脱的原因。回到您面前同时拥有监视器和 wyse60 终端的场景,两者都显示相同的内容(或尝试显示)。Ttysnoop 将向 wyse60 发送与发送到监视器的相同字节。如果您错误地声称监视器是 wyse60,那么您将获得发送到监视器和 wyse60 终端(通过 ttysnoop)的 wyse60 转义序列。wyse60 上的显示效果很好,但监视器上的显示效果已损坏,因为它正在接收 wyse60 转义序列。由于您不会使用监视器(并且即将断开连接),因此这种损坏永远不会成为问题(您根本看不到它)。
这不是理想的设置,因为 ttysnoop 运行得太晚,以至于登录提示符没有出现。此示例适用于 ttyS2 上的 wyse60 终端和 tty1 上丢失的监视器/PC 键盘。它使用 Debian 发行版提供的 agetty 程序作为 getty。您的 getty 可能需要不同的格式。
在 /etc/inittab:
中:
1:2345:respawn:/sbin/getty 38400 tty1 wyse60 -ln /usr/sbin/ttysnoops
请注意,ttysnoop/ttysnoops
是客户端-服务器组合,因此“s”不是拼写错误。如果您不使用 -n,您可能看不到终端上的登录提示符。在没有 -n 的情况下,agetty 在 ttysnoop 激活之前发出提示。使用 -n,agetty 不会发出提示(但登录会发出提示)。如果您使用 -n,agetty 将不再自动检测奇偶校验,但如果您不使用奇偶校验,则一切正常。
在 /etc/snooptab:
中:
# tty snoopdev type execpgm
tty1 /dev/ttyS3 init /usr/local/bin/sterm
在上面,一个名为 sterm 的脚本用于运行 stty 程序。您可能不需要它,或者可能想要将其用于其他目的。这是 /usr/local/bin/sterm:
中的示例 sterm 脚本:
#!/bin/sh
stty rows 24
/bin/login $@
如果您怀疑问题是硬件问题,请参阅维修和诊断部分。如果是键盘问题,请参阅键盘。如果它对您键入的内容响应不正确(如果根本没有响应)。请参阅损坏的终端接口。如果问题涉及串行端口本身,请参阅 Serial-HOWTO。
以下是可能的问题列表
终端出现故障有两种情况。一种是终端最近工作正常,但突然出现故障。这将在下一小节中讨论。另一种情况是您安装终端后,一切都无法正常工作。对于这种情况,您可以跳过下一节。
当以前工作正常的终端突然出现故障时,通常很容易找到问题所在。那是因为(硬件故障除外)问题很可能是由于您所做的事情(或您使用的软件所做的事情)引起的。
问题可能很明显,例如终端首次打开时出现错误消息。如果发出奇怪的声音,则可能需要维修。请参阅维修和诊断。首先,考虑一下最近完成或更改的内容,因为它很可能是问题的原因。问题是否发生在安装新的系统软件之后或配置更改之后?
如果终端对您键入的内容响应不正确(如果根本没有响应),则可能存在损坏的终端接口。
如果您刚刚按照说明将终端连接到计算机,但它无法工作,则本节适合您。如果以前工作正常的终端现在无法工作,请参阅终端之前工作正常。如果您怀疑计算机上的串行端口可能有缺陷,您可以尝试在其上运行诊断测试程序。目前(1998 年 6 月),Linux 似乎还没有这样的诊断程序,因此您可能需要在 MS DOS/Windows 下运行诊断程序。有一些程序可以监视各种串行线路,例如 DTR、CTS 等,这可能会有所帮助。请参阅串行监视/诊断
一种方法是首先查看终端是否可以通过在最简单的情况下尝试将文件复制到终端(cp my_file /dev/ttyS?)来工作。这意味着禁用调制解调器控制线,并以不需要流量控制的显示速度运行(确保禁用任何硬件流量控制)。如果此复制有效,则使情况稍微复杂一点,看看它是否仍然有效,等等,等等。当在您进行更改后立即出现问题时,则该更改很可能是问题的根源。实际上,从简单的情况跳到最终配置的一半左右,以便测试消除大约一半剩余的可能原因,这样更有效(但更复杂)。然后对下一个测试重复此方法。这样,只需大约 10 次测试即可从一千个可能的原因中找到原因。您应该根据直觉和线索稍微偏离此方法。
许多终端在启动时会在屏幕上显示一些文字。如果这些文字没有传达任何错误消息,则可能正常。如果没有任何电源迹象(屏幕漆黑等),请重新插入计算机电源线两端的插头。确保墙壁插座(或延长线末端)有电。如果您有备用电源线,请尝试使用另一根电源线。确保终端已打开,并且其保险丝未熔断。有时只需使用旋钮或设置模式下的键盘键调高亮度和对比度即可修复空白(或昏暗)屏幕。
已存放很长时间的终端可能需要一段时间才能“预热”,因为电解电容器会在电压下自我修复。如果仍然无法工作,请参阅维修和诊断,了解有关维修的提示。
如果终端启动正常,但您怀疑它可能存在问题,请进入“本地模式”,它就像打字机一样工作,并尝试在其上键入内容。请参阅本地模式。在遇到问题之前,您应该找出如果硬件出现故障,您的终端是否会显示错误消息。测试终端是否出现这种情况的一种方法是在键盘未插入的情况下将其打开,看看它是否显示错误消息。
如果终端上正确显示了几行或文本,然后停止而未完成(在单词中间等)或如果丢失了大量文本,则您可能存在流量控制问题。如果您无法立即弄清楚是什么原因造成的,请降低速度。如果这可以解决问题,则可能是流量控制问题。可能是流量控制根本不起作用,原因是未能正确配置它,或者由于不正确的电缆布线(对于硬件流量控制)。请参阅流量控制
如果您可以在终端上正常键入,但是当文本发送到终端时,发送的每 16 个字符中只有大约 1 个字符通过,那么您可能为 setserial 提供了错误的 UART。如果端口是过时的 16550(或更低版本),但您已告知 setserial 它是 16550A 或更高版本,则会发生这种情况。
如果缺少单个字符,则可能是串行端口被过快的速度溢出。尝试较低的波特率。
如果您的设备低于 1200 波特(可能是一个非常慢的旧式硬拷贝终端或打印机)并且文本被截断,则问题可能出在串行设备驱动程序中。有关如何解决此问题的信息,请参阅 Printing-HOWTO 中的“串行设备”。
这是您需要多次按键才能使其工作(并在屏幕上看到您键入的字母)的情况。如果您键入一个单词,屏幕上可能会缺少某些(甚至所有)字母。如果命令中缺少字母,则它不起作用,即使所有字母都存在,您也可能需要多次按回车键才能使命令执行。
这可能是由于两个不同的进程打开串行端口造成的。两者都尝试读取您键入的内容。有时一个进程(正确的进程——可能是 shell)读取您键入的内容,而另一些时候另一个进程读取您键入的内容。一个示例是另一个进程用于串行鼠标(例如 gpm),它不回显您键入的内容。因此,在同一 ttySx 上运行的另一个进程正在吞噬您键入的一些内容。要解决此问题,请使用“ps -alx”查看 ttySx 上还在运行的其他内容并终止该进程。
您可能会认为锁定文件会阻止两个程序同时使用同一个串行端口。但是,终端和 gpm 鼠标程序都不使用锁定文件。由于其他人可能需要写入您的终端,因此不使用锁定文件是合理的。请参阅 Serial-HOWTO 中的锁定文件。
您在控制台上看到类似以下消息:“Getty respawning too fast: disabled for 5 minutes”。它可能显示一个标签(例如:Id "S2")而不是“Getty”,其中 S2 是 /etc/inittab 中调用 getty 的行的标签。
当 getty 启动时,它会尝试向串行端口发送登录消息。但是,如果出现严重问题,getty 将立即被终止。由于 /etc/inittab 文件中用于 getty 的行说“respawn”,因此 getty 会再次启动,但又会被终止,依此类推。因此,getty 会一遍又一遍地快速重生。但是操作系统会介入并阻止这种胡闹(5 分钟)。以下各节显示了可能的原因和解决方法。
确保 /etc/inittab 中调用 getty 的行是正确的。“ttySx”(或 uugetty 的“DTxxxx”)或“getty”中的拼写错误可能会导致此问题。
如果终端没有在串行端口的某个引脚上向 PC 发送 CD 信号,则除非 getty 使用了“local”选项,否则 getty 将被终止。因此,快速解决方法是仅使用“local”选项(agetty 的 -L,getty_ps 的 /etc/gettydefs 中的“CLOCAL”)。
另一种方法是确定为什么 CD 没有被断言。在许多情况下,连接到终端的电缆根本没有 CD 引脚的电线,因此您必须使用“local”选项。如果存在 CD 引脚的电线,则在终端通电之前,其上可能没有任何信号。请注意,CD 引脚信号有时由终端(或 PC)的 DTR 引脚通过使用连接器内部的跳线提供。
如果设备(例如 /dev/ttyS2)是伪造的(物理上不存在或已被禁用),则 getty 将被终止。您可以使用“scanport”(仅限 Debian ??)和/或“setserial”来探测设备或尝试另一个 ttyS。设备可能已在 CMOS 中禁用。请参阅“Serial-HOWTO”。
Linux 通过在编译内核时选择串行支持或通过加载串行模块 serial.o 来提供串行支持。如果串行支持既未构建到内核中,也未由串行模块提供,则会发生此“重生”错误。您可以使用“lsmod”命令查看是否已加载串行模块。要查看串行支持是否已构建到内核中,请检查内核配置文件(在 /boot 中、在源树中等)。
getty 重生速度过快的另一个可能原因是键盘按键短路。如果按键卡在按下位置,则可能会发生这种情况。启用自动重复后,这会向登录提示符“键入”数千个字符。查找充满相同字符(在某些情况下,具有 2 个或更多不同字符)的屏幕。
如果您可以正常登录,但在登录后无法使用终端,则可能是因为登录 shell 的启动通过某人放入登录和 shell 启动时运行的文件之一中的命令重新配置了终端(为不正确的设置)。这些文件包括 /etc/profile 和 ~/.bashrc。查找以“stty”或“setserial”开头的命令,并确保它是正确的。即使在一个初始化文件中正确完成,也可能在您不知道的另一个初始化文件中错误地重置它。进入系统进行修复的方法是使用另一个终端或控制台、使用救援软盘或在 lilo 提示符下键入:“linux single”,这会将您置于单用户模式,而无需运行启动文件。
如果您获得登录提示符,但对您的登录尝试没有响应(或可能出现乱码响应),则可能的原因是通信单向从终端到计算机不良。这可能是电缆/连接器不良或接线错误。如果您尚未使用 getty 的“local”选项,请这样做以禁用调制解调器控制线。请参阅Getty(在 /etc/inittab 中使用)。如果启用了硬件流量控制,您也可以禁用它 (stty -crtscts)。如果现在工作正常,则您的调制解调器控制线可能未正确接线,或者您的设置存在错误。某些终端允许为发送和接收设置不同的值(例如波特率),因此接收可能正常,但发送可能不良。
您也应该尝试在另一个终端(例如控制台)中使用“stty -F /dev/ttyS1”(或 ttyS 任何设备)来查看它是否已正确设置。它通常会处于原始模式(这可能没问题),带有 -icanon 和 -echo 等。如果终端错误地设置为半双工 (HDX),那么您在键入时看到的一组字符来自终端本身。如果字符重复,则来自计算机的回显正常,您可以切换到全双工来解决此问题。但是,如果设置为半双工,而您只看到看起来像正常的“回显”,那么它们不是像应该的那样来自计算机。
如果您收到类似“login failed”(登录失败)的消息,那么如果键入或密码没有错误,则可能是登录存在一些限制,不允许您登录。遗憾的是,此消息可能不会告诉您失败的原因。请参阅 登录限制
这可能是由于使用了错误的字符集、波特率过高导致的传输错误、不兼容的波特率、不兼容的奇偶校验或每个字节的位数错误造成的。如果是各种奇怪的字符,那么您使用了错误的字符集,或者高位被错误地设置了。如果单词拼写错误,请尝试降低波特率。对于波特率、奇偶校验或位/字符不兼容的情况,您会看到很多相同的“错误字符”,这些字符代表一个真实的字符,但由于奇偶校验或波特率错误而无法正确显示。“错误字符”可能是倒问号或其他一些奇怪的字符,例如矩形。
如果您正在使用 agetty(通常仅命名为 getty),agetty 程序将在您键入内容时检测并设置奇偶校验和/或位/字符。尝试使用回车键看看是否可以修复它。
如果在按几次回车键后没有显示登录提示符,请检查以下内容:使用“top”或“ps”程序确保 getty(或 login)进程实际上正在终端上运行。终端是否正在供电?空调制解调器电缆是否已插入终端和计算机上的正确端口?
检查 getty 是否因为没有 CD 信号(或电缆中没有 CD 线)而挂起。如果不存在这样的 CD 信号,您应该通过以下方式向 getty 指定“local”:
如果 getty(或 login)没有运行,请仔细检查 /etc/inittab 中调用 getty 的格式。确保它包含当前的运行级别(通过键入命令“runlevel”显示),并且对于您的 getty 版本有效。有时终止 getty 或 login(它将自动重启)会有所帮助。
虽然硬件故障是可能的,但问题很可能是某人错误操作造成的。是否有人做了可能导致电缆松动的事情?是否有人修改了 /etc/inittab 或对软件进行了其他更改,以阻止终端登录?如果这没有揭示原因,请继续阅读。
上述方法应解决大多数情况(除非您刚刚安装了终端)。其他原因包括硬件或电缆(必须是文件传输电缆)有缺陷、终端波特率设置错误、终端处于本地模式等。此时,有两种不同的方法(您可以同时采取多种方法)。
一个测试是尝试将某些内容复制到终端(最好在设置 getty 之前的安装过程开始时尝试此操作)。您可以使用 Linux 复制命令,例如:“cp file_name /dev/ttyS1”。或者您可以使用:“echo any_word > /dev/ttySx”。如果它不起作用,请使用 stty 使接口尽可能简单,并禁用所有功能(例如硬件流控制:-crtscts;奇偶校验和调制解调器控制信号:clocal)。确保波特率和位/字节相同。如果没有任何反应,请使用电压表验证端口是否正常,如下一节所述。
如果您手头有电压表,请检查文件传输电缆终端侧的引脚 3 或 2(接收数据)是否有负电压(-4v 至 -15v)。仪表的正极应连接到良好的接地(电缆末端的金属连接器可能未接地)。如果不存在这样的负电压,则检查计算机上的发送引脚 (TxD) 是否有负电压(有关引脚排列,请参阅 DB9-DB25)。如果计算机上的发送引脚存在负电压,但终端上的接收引脚 (RxD) 没有,则电缆坏了(连接松动、断线或不是文件传输电缆,即空调制解调器电缆)。如果计算机上没有此电压,则其串行端口已损坏。使用软件诊断测试对其进行测试或更换它。
如果串行端口正常,您可能需要向其发送文件(禁用调制解调器控制),并使用电压表(或其他电子设备)观察信号。要使用电压表检查发送的信号,请在线路空闲时检查是否有稳定的负电压。然后开始发送文件(或启动 getty)。在模拟仪表上,您应该看到指针下降到接近 0,并在 0 附近波动,因为它测量的是比特流的短期平均值。在数字仪表上,您不会很好地看到波动,但您可以切换到 AC 刻度来查看比特流产生的 AC 电压。如果您的仪表在 AC 刻度上无法阻止 DC(大多数模拟仪表的默认设置),那么当您查看 AC 刻度上 -12v(或 -5v)的空闲 DC 时,您可能会获得错误的较高 AC 读数。如果没有仪表,您可以将已知良好的设备(例如另一个终端或外部调制解调器)连接到串行端口,看看它是否工作正常。
不要将此与 显示转义序列 混淆。如果您键入或在屏幕上看到的内容与预期不符,但看起来像外文字母、数学符号、线条字符等,那么可能是发送到终端的许多字节都设置了高位(当不应该设置时)。您正在查看设置了高位的字符集(或字符集的一部分)。如果您使用了错误的波特率或错误的奇偶校验设置(通过 stty),则可能会发生这种情况。如果您通过 stty 设置了奇偶校验,但在终端内部它是 8 位无奇偶校验,那么高位(= 奇偶校验位)通常会被错误地设置。尝试从另一个终端使用 stty -F /dev/ttyS? 来检查波特率和奇偶校验是否正确。
可能是安装了错误的字符集(字体)。发送到终端的错误转义序列可能已切换字符集。如果您正在使用 mapchan 程序来更改键盘映射,则它可能不正确。
您可能会看到类似“5;35H22,1”或“3;4v”或“1;24r”或“^[[21;6H”等等。当然,数字和字母会有所不同。它们会分散在各处(随机地或以奇怪的顺序)。显示看起来会很混乱,并且可能还有其他缺陷。某些应用程序和命令会导致显示损坏。
您看到的是发送到终端以控制终端的转义序列(或其片段),但您的终端无法识别它们,并将它们传递到屏幕上。很可能是您正在使用的程序错误地认为您正在使用另一种类型的终端。因此,它发送了您的终端不理解的转义序列。这有时会对您的显示造成奇怪的影响。检查 TERM 环境变量是否已正确设置(键入:echo $TERM)。
如果您使用 telnet,正确设置 TERM 的问题可能会更复杂。Telnet 不会模拟终端,而是将 TERM 变量的值传递给远程计算机。如果远程计算机不支持您的终端类型,或者将 TERM 的值更改为错误的值(在远程计算机上),则会出现问题。Telnet 最初应该在远程计算机上正确设置 TERM 的值。但是,对 TERM 值(在远程计算机上)的更改可能是由那里不正确的 shell 配置文件引起的。首先要做的是检查 TERM 的值,包括在您的计算机上和远程计算机上。以上内容过于简化,因为您的 telnet 客户端可能会向远程服务器提供您的计算机支持的可能 TERM 值列表(如果 telnet 知道您的计算机可以模拟多种终端类型)。
另一个可能的原因是您的终端恰好处于特殊模式,在该模式下它显示转义序列而不是执行它们。然后您也会在屏幕上看到它们,但它们将以有序的方式显示。这种模式更准确地说是一种显示控制代码的模式。但由于每个转义序列都以控制代码(“转义”字符)开头,因此整个转义序列不会被终端识别,而是传递到屏幕上。请参阅 控制代码。
您可能错误地设置了中断> 请参阅 Serial-HOWTO 中以“Slow:”开头的章节
当您期望光标移动到下一个字符,但实际上它似乎跳到另一个字符时,就会发生此错误。当您选择“showmatch”以突出显示匹配的括号(或圆括号)时,可能会在 vim 编辑器中发生这种情况。终端没有问题,光标也没有跳动,但看起来好像是这样。
正在发生的情况是光标是反相视频,突出显示也是反相视频。因此,假设您通过反相视频突出显示(或强调)一个字符,然后在该字符上放置一个反相视频光标。光标的反相视频将反转字符的现有反相视频,并产生正常视频。结果是光标和字符突出显示都从该字符中消失了,并且光标是不可见的(直到您将其移动到非突出显示的字符)。
好的,所以光标突然消失了,但是什么导致它跳动?对于 vim “showmatch”,当您将光标移动到左括号时,它也会突出显示右括号。因此,右括号突然变成反相视频,看起来就像光标跳到了那里,但它并没有。当您将光标移动到右括号(或圆括号)时,也会发生类似的“幻觉”。当您反转反相视频时产生的这种幻觉也发生在除了刚刚介绍的 vim 示例之外的其他情况下。
一个原因可能是 terminfo 出现问题。另一个原因可能是您超出了为终端设置的滚动区域。一些愚蠢的程序只是假设您的终端有 24 行,并为 24 行设置滚动区域(通过发送到终端的转义序列),而没有查阅 terminfo 以查看实际有多少行。然后,当您使用另一个程序时,它可能会将光标留在第 25 行,光标会在那里被困住,并且终端将不会滚动。为了避免这个问题,请创建一个环境变量“export LINES=25”,并使用“stty -F /dev/ttySx rows 25”。然后,假设有 24 行的程序有望使用 25 行并相应地设置滚动区域。
一些 Linux 程序将监控调制解调器控制线,并指示它们是正电平 (1) 还是负电平 (0)。
在本地模式下,终端与计算机断开连接,其行为类似于打字机(只是它不在纸上打字,而是在屏幕上打字)。返回在线模式会重新连接到计算机,使您可以从进入“本地”时离开的位置继续活动。这对于测试终端和用于教育目的都很有用。对于某些终端,没有“本地模式”,但“块模式”可以替代它。如果没有“块模式”,“半双工”模式可能会起作用,但您键入的内容也会发送到计算机。在这种情况下,计算机可能会回显发送给它的字符,导致您键入的每个字符在屏幕上显示两个字符。为了防止这种情况,您可以关闭计算机,断开 RS-232 电缆等。
在本地模式下,您可以键入转义序列(以 ESC 键开头)并观察它们的作用。如果终端在本地模式下工作不正常,则它不太可能在连接到计算机时工作正常。如果您不完全确定转义序列的作用,可以在本地模式下试用它。您也可以使用它来试用待售的终端。要进入某些终端的本地模式,您首先需要进入设置模式,然后从菜单中选择“local”(本地)(或按某个键)。请参阅 进入设置(配置)模式。
虽然对于少数几个串行端口来说,万用表(用作电压表)可能就足够了,但已经制造出简单的专用测试设备来测试串行端口线路。有些被称为“分线盒...”,其中分线盒是指从电缆中分出导体。这些设备有几个连接器,可以连接到串行端口连接器(在串行电缆的末端或 PC 的背面)。有些具有用于连接电压表的测试点。另一些具有 LED 指示灯,当某些调制解调器控制线被置为有效(打开)时,这些指示灯会亮起。指示灯的颜色可能指示信号的极性(正电压或负电压)。还有一些具有跳线,因此您可以将任何导线连接到任何导线。有些具有开关。
Radio Shack(在 2002 年)销售一种“RS-232 Troubleshooter”(以前称为“RS-232 Line Tester”),货号 #276-1401。它检查 TD、RD、CD、RTS、CTS、DTR 和 DSR。绿灯表示开启 (+12 v),红灯表示关闭 (-12 v)。他们还销售一种“RS-232 Serial Jumper Box”,货号 #276-1403。这允许您以您选择的任何方式连接引脚。这两件商品都属于“外围设备连接助手”。不幸的是,它们没有列在印刷目录的索引中。它们与 D 型连接器在同一页上,因此请在索引中查找“连接器,计算机,D-Sub”。名为“Active Components”的连锁店可能有售。
任何电压表或万用表,即使是最便宜的,售价约为 10 美元,也应该可以正常工作。尝试使用其他方法检查电压是很棘手的。不要使用 LED,除非它具有串联电阻以降低 LED 两端的电压。对于 20 ma LED,使用 470 欧姆电阻(但并非所有 LED 都是 20 ma)。LED 仅在特定极性下才会亮起,因此您可以测试正电压或负电压。是否有人制造用于汽车电路测试的这种设备?? 如果您尝试使用逻辑探针,可能会损坏它们,因为它们设计的 TTL 电压仅为 5 伏。尝试使用 12 V 白炽灯泡不是一个好主意。它不会显示极性,并且由于 UART 的输出电流有限,它甚至可能不会亮起。
要测量母连接器上的电压,您可以将弯曲的回形针插入所需的开口中。回形针的直径应不大于引脚,以免损坏触点。将鳄鱼夹(或类似物)夹到回形针上以进行连接。注意不要同时用任何金属物体接触两个引脚。
作为最后的手段,如果您没有测试设备并且愿意冒着触电(甚至触电身亡)的风险,您可以始终品尝电压。在用舌头接触其中一个测试引线之前,请先测试它们,以确保它们上没有高电压。同时用两根引线接触一只手,看看它们是否会电击您。如果未发生电击,则用舔舐的方式润湿皮肤接触点并重复。如果此测试给您带来电击,您当然不想用舌头。
对于 12 V 的测试,舔一下手指,并将一根测试引线握在其中。将另一根测试引线放在舌头上。如果舌头上的引线为正极,则会有一种明显的味道。您可以先用手电筒电池尝试一下,以便了解预期的味道。
维修终端与维修显示器和/或键盘有很多共同之处。有时,终端的内置诊断程序会显示在屏幕上。根据症状,通常可以将故障隔离到以下原因之一:键盘损坏、CRT 损坏、电源电子设备故障(显示失真)或数字电子设备故障。最好有维修手册,但即使您没有维修手册,通常仍然可以维修它。
Bigelow, Stephen J.: Troubleshooting & Repairing Computer Monitors, 2nd edition, McGraw-Hill, 1997。不涵盖字符生成电子设备和键盘。
FAQ http://www.repairfaq.org 适用于新闻组:sci.electronics.repair,内容冗长而全面,尽管它本身不涵盖终端。请参阅“计算机和视频显示器”部分。此信息中的大部分内容适用于终端,以下部分也适用:“测试电容器”、“测试回扫变压器”等。也许在未来,本 HOWTO 中的维修“信息”将主要由指向上述 FAQ(或类似内容)的链接组成。
CRT 使用高达 30,000 伏的高压(彩色较低,单色较低)。如果设备已开启且盖子已取下,请小心不要接触此电压。即使您接触到它,它也可能不会杀死您,因为它能提供的电流量有限。但它可能会严重烧伤和电击您等。高压可以跳过气隙并穿过破裂的绝缘层,因此请让您的手与它保持安全距离。您应该注意到连接到显像管一侧的绝缘良好的高压电缆。即使设备已关闭,显像管电缆连接上仍然有足够的残余电压给您带来相当大的电击。要在设备拔下插头时释放此电压,请使用螺丝刀(绝缘手柄),金属刀片通过跳线接地到显像管地线。不要使用底盘接地。
较低的电压(数百伏)可能更危险,因为它们不受电流限制。如果您的手是湿的,或者您佩戴金属表带、戒指等,则更加危险。在极少数情况下,有人因此丧生,因此请务必小心。只有几伏的最低电压在数字电路中是相当安全的,但在您确定之前,请勿触摸任何东西(除非使用绝缘良好的工具)。
如果显示太暗,请使用设备外部的旋钮(如果存在)调高亮度或对比度。如果宽度、高度或居中不正确,通常有用于这些的控制旋钮。对于某些较旧的终端,必须在设置模式下按箭头键(或类似键)。
您可能需要卸下盖子进行调整,尤其是在较旧的型号上。您可以安排好,使一面大镜子位于终端前面,以便在调整时在镜子中查看显示。要转动的调节器可能位于印刷电路板上。虽然可能只需要螺丝刀(可能是十字螺丝刀),但电感器可能需要特殊的电视校准工具(塑料六角扳手等)。调节器的缩写名称应印在电路板上。例如,以下是一些此类名称
更改线性度可能会更改尺寸,因此需要重新调整尺寸。长时间存放的终端可能会在屏幕上出现一个小的显示矩形,周围环绕着大片黑色。在调整之前,让终端开启一段时间,因为它可能会在使用中恢复一些(黑色边框会缩小)。
如果终端在出现故障之前(或在您打开故障后的终端时)发出一些噪音,则该噪音是问题所在的线索。如果您听到噪音或看到/闻到烟味,请立即关闭终端以防止进一步损坏。爆裂声可能是电容器爆炸或保险丝熔断。嗡嗡声可能是由于电弧放电。问题可能出在几千伏的高压电源中。
卸下盖子。查找变色和鼓包/破裂的电容器。如果坏点不明显,请再次打开它一小段时间,并查找冒烟/电弧放电。对于电弧放电,光线昏暗的房间将有助于找到它。高压电缆(在回扫变压器和显像管侧面之间运行)可能绝缘破损,导致对地放电。使用高压绝缘胶或专为 10,000 伏设计的特殊电工胶带修复它。
如果回扫变压器(高压)发生故障,可能只会发出微弱的咔哒声或火花声。您可能在将终端关闭一段时间后再次打开它时才会听到它。要追踪噪音,您可以使用一小段橡胶管(例如汽车中使用的橡胶管)作为听诊器来倾听它。但在您倾听噪音的同时,终端正在遭受更多损坏,因此请尝试快速找到它(但不要太快以至于冒着触电的风险)。
电源短路可能会导致保险丝熔断。更换熔断的保险丝可能无法解决问题,因为相同的短路可能会再次熔断保险丝。检查是否有因高温造成的任何变黑点,并测试这些组件。短路的功率晶体管可能会导致保险丝熔断。可以使用晶体管测试仪甚至欧姆表来测试它们。在欧姆表上使用低欧姆刻度,以便仪表施加的电压较低。这将减少此测试电压对良好组件造成的可能损坏。
如果终端已暴露在潮湿环境中,例如存放在潮湿的地方或靠近有烹饪蒸汽的厨房,则修复方法可能是干燥设备。用吹风机加热“故障”回扫变压器几分钟可能会使其恢复。
空白屏幕可能是由于有人将亮度控制调到最低水平或老化造成的。接下来要做的是检查电缆是否连接松动或断开。如果没有电源迹象,请在确保墙壁上的电源插座“带电”后更换新的电源线。
如果怀疑键盘有问题,请在同一类型的另一个终端上试用它,或更换一个好的键盘。晃动键盘电缆末端和插头。电缆内部的导线可能会断裂,尤其是在靠近末端的地方。如果通过晃动电缆来验证断裂(问题与晃动同步地出现和消失),那么可以更换新电缆,或者切入电缆并重新焊接断裂处等。
如果键盘工作正常,首先要做的事情之一是将终端置于 本地模式。如果它在本地模式下工作正常,则问题很可能出在与主机的连接(或不正确的接口)或终端的 UART 芯片中。
通过仔细检查电路,通常可以找到问题的原因。查找变色、裂纹等。有时可以通过用圆珠笔(当然不是金属笔尖)敲击组件来发现间歇性问题。印刷电路板导体中的断裂有时可以通过弯曲电路板来揭示。看起来像形成液滴的焊锡或焊锡量很少的焊点可能需要重新焊接。焊接可能会加热晶体管(和其他组件)并损坏它们,因此如果可行,请使用散热器。一个故障可能会导致其他故障,因此除非您找到原始原因,否则故障可能会再次发生。
如果您拥有常见品牌的终端,您可以搜索互联网(包括新闻组帖子)以找出您的终端最常出现的问题类型,以及有关如何修复它的信息。如果您发现某个组件坏了,您可以搜索此组件(例如 R214 wyse),并希望找到其他遇到相同问题的人的报告。此类报告可能会指出同时发生故障的其他组件。如果某个组件损坏严重到无法读取其值,那么您可能会在互联网上找到它。制造商可能拥有搜索引擎未索引的在线数据。
要查看数字电子设备是否工作正常,请尝试(使用好的键盘)在坏终端上键入内容。尝试使用复制命令或终端通信程序(例如 picocom)在好的终端(或控制台)上读取此键入内容。您可能需要在终端上按回车键才能发送一行。可以从另一个终端向坏终端询问其身份等。这将显示双向通信是否正常工作。
如果您在屏幕上看到错误信息,那您就走运了。这通常发生在您第一次打开终端时。
这通常意味着键盘未插入,或者连接松动。有关更严重的问题,请参阅 键盘
NVR 是“非易失性 RAM”的缩写。这意味着存储设置信息的 NVR 已损坏。终端可能仍然可以工作,但上次有人配置终端时保存的配置可能已丢失。尝试重新配置并保存。这可能会奏效。在非常旧的终端(1980 年代早期)中,有一个电池供电的 CMOS 来保存配置,因此在这种情况下,问题可能只是电池没电了。有时,EEPROM 芯片(无需电池)在保存次数过多后会损坏。可能很难找到问题所在。如果您无法修复它,您要么只能使用默认配置,要么可能在启动时向终端发送转义序列以尝试配置它。
电解电容器有一个金属外壳,如果多年未使用,可能会变得脆弱或失效。有时,只需将终端打开一段时间即可帮助部分恢复它们。如果可以,请将您存储的任何终端每年打开一段时间以进行维护。
请注意,设计用于音频电路的廉价电解电容器在用于高频水平电路时可能会失效。为此,您需要低电阻(低 ESR)电容器。用相同的电容器(或“双极性”电容器)替换无极性电容器 (NP)。
如果终端显示器需要几分钟的预热才能正常工作,那么很可能是您有一个或多个不良的电解电容器。找到坏电容器的一个技巧是将每个疑似坏的电容器与一个好的电容器并联(至少具有相同的额定电压和大致相同数量级的电容)。如果您这样做后显示效果明显改善,那么您很可能找到了坏电容器。进行此操作时请小心触电。相对于地面的实际电压可能远高于电容器的额定电压。
终端的键盘与 PC 的键盘不同。区别不仅在于按键布局,还在于按下按键时生成的代码。此外,不同品牌和型号的终端键盘并不总是可以相互互换的。有时,可以使“不兼容”的键盘在终端上部分工作:所有 ASCII 键都可以正常工作,但设置和中断等特殊键将无法正常工作。
大多数键盘只是在您按下按键时在两个导体之间建立简单的接触。键盘芯片内部的电子设备将此触点闭合转换为通过键盘外部电缆发送的代码。不是让每按键都有一根单独的电线(或导体)连接到芯片,而是使用以下方案:将导体编号为 1-10 和 A-J。例如:导体 3 连接到多个按键,导体 B 连接到多个按键,但只有一个按键同时连接到导体 3 和 B。当按下该按键时,会在 3 和 B 之间建立短路。芯片感应到此短路并知道按下了哪个按键。这种方案减少了所需的导体数量(并减少了芯片上所需的引脚数量)。它类似于所谓的“交叉开关”方案。
虽然现代键盘和旧式键盘看起来差不多,但操作 mechanics 是不同的。旧式键盘在键帽下有单独的按键开关,每个开关都封装在坚硬的塑料外壳中。现代键盘使用大张柔性塑料片(薄膜),其大小与键盘相同。一块带有孔的塑料片夹在两张其他塑料片之间,这些塑料片包含印刷电路(包括触点)。当您按下按键时,两张“印刷”片会在某个点被压在一起,从而闭合该点印刷在薄片上的触点。
如果由于缺陷,导体 3 和 4 短路在一起,则按下 3-B 键也会使 4 和 B 短路,芯片会认为按下了 3-B 和 4-B 两个键。当您只想输入一个字符时,这可能会输入 2 个不同的字符。
如果所有按键都不工作,请尝试使用另一个键盘(如果您有的话)以验证是否是键盘问题。一个原因是连接键盘和终端的电线(电缆)内部断裂。断裂最可能的位置在电线的任一端。尝试在敲击按键的同时晃动电线的末端,看看是否可以间歇性地工作。如果您发现坏点,您可以小心地用刀在坏点处切入电线并拼接断裂的导体。有时只需一滴焊锡即可拼接。用电工胶带、胶水或填缝剂密封电线。浸湿的键盘可能在干燥之前无法工作。
如果所有字符都显示为双倍,则键盘可能没有问题。相反,您的终端可能已错误地设置为半双工(HDX 或本地回显=开),并且您键入的每个字符都会从终端内部的电子设备和您的主机计算机回显。如果两个字符不同,则键盘内部可能存在短路。请参阅 按一次键输入 2 个不同的字符
当启用自动重复并按住按键(或类似情况)时,可能会发生这种情况。可能是按键卡住,或者可能是具有相同效果的电气短路。
首先尝试用力敲击几次,但这不太可能修复它。接下来,您可以卸下键帽(如果可以卸下),并在推杆上喷洒少量清洁剂,或者在向侧面推动按键的同时上下移动按键(或两者兼而有之)。如果这不起作用,您可能需要拆开开关并清洁组件。
如果您决定卸下键帽,请参阅 带有独立开关的键盘。反复按压推杆,直到它正常工作并在屏幕上显示其字符。起初,清洁剂可能会导致按键无法显示其字符。有些按键卡住是由于键帽底面发粘造成的。如果按键卡在完全按下位置,这可能是问题所在。因此您可能也需要清洁此区域。
如果您决定向侧面推动它,请使用小螺丝刀向侧面推动,同时用手指和螺丝刀上下推动按键。您应该在四个方向中的一个方向上向侧面推动,并尝试不同的方向。您这样做是为了试图挤出摩擦按键推杆侧面并使其卡住的异物颗粒。同样,问题可能会稍后再次出现。
始终在修复后立即测试按键,并在稍后短时间内再次测试。要测试按键,请非常缓慢地按下它,看看是否卡住。在按下按键时,也稍微向侧面推动它。如果您快速敲击或直接向下推动它,则可能不会观察到粘性。此测试将检测看似工作正常但以后很可能引起故障的按键。
如果您怀疑按键短路,请按照 清洁键盘触点 中的说明进行清洁。如果在登录提示符处发生此问题,请参阅 按键短路。
如果水或水状液体洒在键盘上(或者如果键盘暴露在雨水、浓雾或潮湿环境中),则某些(或所有)按键可能无法正常工作。潮湿可能会导致按键短路(就像一直被按下一样),如果启用了自动重复,您可能会看到屏幕上填满了该字母。如果键盘被弄湿然后部分(或完全)干燥,则某些按键可能由于触点表面上的沉积物而无法工作。对于现代类型的键盘,可以很容易地拆开内部的塑料片并进行干燥/清洁。对于旧式键盘,可以让其在阳光下或烤箱中干燥(低温)。干燥后,可能仍需要在某些按键上使用触点清洁剂,如下所述。
在一些较新的键盘上,塑料片(薄膜)易于拆卸,以便在需要时进行检查和清洁。您只需卸下几个螺钉即可拆开键盘并接触到薄片。在一些旧的 IBM 键盘上,如果不折断许多塑料卡舌,就无法卸下薄片,而这些塑料卡舌需要用胶水修复才能放回原位(可能不值得修复)。有时可以通过弯曲、扭曲和/或敲击包含塑料片的组件来使这种键盘工作。
以下内容适用于较旧的键盘,这些键盘的每个按键都有单独的硬塑料开关。在进行清洁电气触点的所有工作之前,首先尝试将键盘倒置并操作坏按键。这可能有助于清除污垢,特别是如果您用力快速按下按键以产生振动。按下按键并从一侧到另一侧摆动按键等通常会有所帮助。
如果这不起作用,您可以尝试使用液体触点清洁剂(在电子产品商店有售)清洁按键开关,液体触点清洁剂通常装在喷雾罐中。要接触到开关,您首先需要卸下键帽(您在打字时用手指敲击的正方形)。警告:现代键盘上的键帽无法卸下。通常,可以使用小螺丝刀向上撬起键帽来卸下键帽,螺丝刀的尖端放在键帽下方,同时用手指防止键帽过度倾斜。有一种称为键帽拔键器的专用工具,但您无需使用它也可以完成工作。键帽可能会稍微倾斜和晃动,因为它会松动。它甚至可能会飞到空中并掉到地板上。
然后,您可能有两种清洁触点的方式:直接将触点清洁剂喷雾喷到按键开关的顶部,或者拆开按键开关并清洁它(如果易于拆开,这是最佳方式)。另一种选择是用新的或旧的按键开关更换按键开关,但这通常需要更多的工作(如果您必须费力寻找替代品,则成本更高)。
直接将触点清洁剂喷入按键开关的顶部,而无需拆开开关,这是最快的方法,但清洁剂可能无法到达它应该清洁的触点。在喷洒之前,先稍微清洁其周围区域。在键盘通电的情况下(或在按键触点连接到欧姆表的情况下),使用喷雾随附的塑料管喷射清洁剂,使其进入按键开关内部。尝试在喷洒时上下移动按键推杆。不要让清洁液进入附近的按键下方,否则可能会吸附灰尘,然后(带着灰尘)渗入相邻的按键开关中。如果您犯了这个错误,您可能会修复一个按键,但损坏附近的按键。如果发生这种情况,请立即操作(反复按下)受影响的附近按键,直到它们继续正常工作。
您可以倾斜键盘,使清洁剂更好地流入触点。对于带有 Alps 键盘的 CIT101e 终端,这意味着将顶行数字键向上倾斜朝向天花板。在使用笔或小螺丝刀手柄上下移动按键开关时,避免将有毒清洁剂液体沾到皮肤上(或戴上手套)。您可以尝试在操作按键时将键盘倒置,以排出残留的清洁剂。您喷入的清洁剂越多,修复的可能性就越大,但也更有可能对塑料造成更多损坏或污染相邻的按键,因此请使用您认为足以完成工作的量。一旦按键正常工作,请稍稍上下移动它,并在半分钟后等时间隔测试它,以确保它仍然可以正常工作。
有时,当内部触点被触点清洁剂液体饱和时,按键工作正常。但是当液体在几分钟后干燥时,清洁液蒸发后在触点上留下的水垢沉积物会阻止良好接触。然后,按键可能会不规则地工作(如果可以工作的话)。当液体在内部干燥时操作按键可能会有所帮助。一些开关的触点几乎密封在内部,因此很少有触点清洁剂能够到达触点。确实到达触点的清洁剂可能会携带污染物(喷洒前清洁顶部周围区域有助于最大限度地减少这种情况)。
如果您想拆卸按键开关,请首先检查它,看看它是否可以拆开(如果可以,如何拆开)。有时,可以卸下开关的盖子,而无需从键盘上卸下开关。要执行此操作,请在撬开固定开关的薄塑料卡舌后,向上撬起(或向上拉起)按键开关的顶部。您可以使用两个小螺丝刀来执行此操作,并能够在撬开塑料固定卡舌的同时撬起开关。不要用力撬起,否则可能会损坏塑料。如果无法完成此操作,您可能必须焊下开关并将其卸下才能拆开(或更换)。一旦拆开开关,如果触点表面夹在一起(几乎接触),您仍然可能看不到触点。您可以通过在边缘喷射一些清洁剂,使其渗透到触点上来在触点上涂抹触点清洁剂。稍微插入一个小螺丝刀刀片,以便在涂抹清洁剂时撬开边缘。这将有助于清洁剂到达触点。用螺丝刀打开和关闭触点以帮助清洁它们,并注意按键是否通过查看终端屏幕来工作。
可能有一些夹子将触点表面固定在一起,需要卸下夹子才能撬开它们。拆卸按键开关时,请注意不要丢失小零件,因为它们可能会飞到空中。作为最后的手段,您可以尝试弯曲推杆推动的移动部件,以使其产生更强的接触。在我的终端中,此部件看起来像是电气触点,但它只是通过薄绝缘体推动真正的电气触点。
将按键开关放回原位时,请确保弹簧位置正确。如果在组装开关后,按键按下太硬或太容易,则弹簧很可能位置不正确。如果弹簧应该凹入推杆上的孔中,则将弹簧暂时“粘合”到推杆中的一种方法是在弹簧末端使用半滴水。然后将此端插入推杆并在水干之前快速组装。这应防止弹簧在组装过程中从推杆中掉出。您可以将键盘立起来(或倒置)而不是使用水,以防止弹簧在组装过程中掉出。
在 20 世纪的第一个十年,http://www.cs.utk.edu/ shuford/terminal_index.html 是 Shuford 在田纳西大学的网站。它是文本终端信息的主要站点,但现在(2013 年)已失效。也许可以在“Wayback”机器上找到它。http://www.cs.utk.edu/ shuford/terminal/repair_hints_news.txt 是 Shuford 关于终端维修的新闻组帖子存档。有关此网站的 vt100 部分,请参见下文,该部分仍在互联网上。
据我所知,没有关于文本终端的令人满意的书。虽然本 HOWTO 已作为一本书出版,但我建议您不要购买它,如果您可以访问在线版本,我每隔几个月左右就会对其进行改进。以下主要是历史意义
《手册...》介绍了 60 多家不同公司在 1970 年代初期制造的 100 多种不同型号的古董终端的简要规格。它还解释了它们在物理上的工作原理,但 CRT 的图表错误地显示了电子束的静电偏转(第 36 页)。终端实际上使用了磁偏转(即使在 1970 年代)。本书解释了许多先进的技术概念,例如“随机扫描”和“彩色穿透原理”。
与《手册...》形成对比,《通信...》一书忽略了终端的物理和电子细节。它有一整章解释二进制数(这在关于终端的书籍中是不需要的,因为这些信息在其他地方广泛可用)。它似乎主要涵盖旧的 IBM 终端(主要是 3270)的块和同步操作模式。它对于当今类 Unix 系统上常用的 ANSI 终端几乎没有用处。虽然它确实稍微讨论了它们,但它没有显示用于将它们连接到串行端口的各种布线方案。
这些章节几乎没有涵盖终端本身及其功能。相反,这些章节主要介绍如何设置计算机(及其终端驱动程序)以与终端一起工作。由于不同的类 Unix 系统的差异,许多信息不适用于 Linux。
《UNIX POWER TOOLS》一书有 3 个关于文本终端的简短章节。它涵盖的范围比本 HOWTO 小,但提供了更多示例来帮助您。
《高级编程...》第 11 章仅涵盖操作系统中包含的用于处理终端的设备驱动程序。它解释了人们提供给 stty 命令以配置终端的参数。
《ESSENTIAL SYSTEM ...》一书的章节更多关于终端而不是调制解调器。它似乎写得很好。
在 Microsoft 的 DOS 下,可以使用 DOS 命令“ctty COM2”,以便 DOS 命令行将显示在串行终端上(在本例中为 COM2)。不幸的是,由于 MS DOS 不是多用户操作系统,因此您将无法再使用计算机显示器。也无法使用多个终端。因此,此功能几乎(如果有的话)没有什么好处。如果您使用免费的 dosemu 在 Linux 下模拟 DOS,据报道您可以运行多个终端(多用户)。但据报道,PCTerm 仿真尚不适用于它(尚未??)。
虽然 MS 没有创建“多用户 DOS”操作系统,但其他人创建了。这允许在一个 DOS PC 上使用许多终端。它与大多数 MS-DOS 软件兼容。一种多用户 DOS 操作系统名为“REAL/32”。此处使用终端的“pcterm”仿真。也可能有一种“扫描”(扫描码)设置模式需要设置。其他操作系统(例如 PICK、PC-MOS 和 Concurrent DOS)过去/现在是多用户的并支持终端。
Linux 有 3 个程序可以让您在 Linux PC 上运行 Windows 应用程序:免费:Wine,非免费:VMware 和 NeTraverse。它们可以在 DOS 下使用文本终端吗?Wine 不能,因为它没有 DOS 模式。其他两个要求您将 MS Windows 操作系统软件作为“来宾操作系统”运行。来宾 MS Windows 操作系统具有 DOS 模式,但由于它不是多用户的,因此对于文本终端没有多大用处。
对于其他类 Unix 操作系统,用于终端的主机计算机配置通常与 Linux 的配置显着不同。以下是一些非 Linux 系统的在线手册链接。
这些有时称为“控制序列”。Text-Terminal-HOWTO 的这一部分是不完整的(并且可能永远不会完整,因为有如此大量的控制序列)。本节供参考,也许真的应该放在称为“Text-Terminal-Programming-HOWTO”的内容中。
ANSI 标准转义序列的一个示例是 ESC[5B,它将光标向下移动 5 行。ESC 是转义字符。参数 5 包含在序列中。如果是 7,则光标将向下移动 7 行,依此类推。将此序列列为“向下移动光标 x 行:ESC[xB”很容易理解。但命令术语,例如:“三级设备属性请求”不太容易理解。本节将尝试解释一些用于转义序列命令的更晦涩难懂的术语。完整列表(包括 ANSI 标准的转义序列代码)是一个“愿望清单”项目。由于许多转义序列执行与使用 设置选项 设置终端时执行的操作相同,因此此处不会重复此类转义序列选项。
请参阅 url url= "http://www.neoware.com/docs/teemtalk/t2k17pro.pdf" name="TeemTalk.2000 程序员指南 v 1.7">,格式为 pdf。但是,有些站点包含某些终端的信息。对于 VT 终端,请参阅 VT 手册。其他列表已从互联网上消失。
8 位 DEC 控制码表(十六进制)。适用于 VT2xx 或更高版本。CSI 是最常见的。
ACRONYM FULL_NAME HEX REPLACES
IND Index (down one line) 84 ESC D
NEL Next Line 85 ESC E
RI Reverse Index (one line up) 8D ESC M
SS2 Single Shift 2 8E ESC N
SS3 Single Shift 3 8F ESC O
DCS Device Control String 90 ESC P
CSI Control Sequence Introducer) 9B ESC [
ST String Terminator 9C ESC \
这些序列通常是从主机发送的请求,以请求终端的报告。终端通过向主机发送报告(实际上是另一个转义序列)来响应,该报告中嵌入了某些值,这些值告诉主机终端的当前状态。在某些情况下,即使未请求报告,也可能会向主机发送报告。这有时会在退出设置时发生。默认情况下,不应发送未经请求的报告。
光标是下一个从主机接收的字符将显示的位置。“索引光标”表示将光标向下移动一行。光标移动可以是相对于当前位置的,例如“向左移动 4 个空格”,也可以是绝对的,例如“移动到第 3 行,第 39 列”。绝对位置称为“直接光标定位”或“直接光标寻址”。
起始位置是第 1 行第 1 列(索引原点为 1)。但是,此起始位置在物理屏幕上的位置尚不完全清楚。如果设置了“光标原点模式”=“相对原点模式”,则起始位置位于滚动区域的顶部(不一定是屏幕的顶部)屏幕的左边缘。如果设置了“绝对原点模式”(与取消设置前一句中两种模式中的任何一种相同),则起始位置位于屏幕的左上角。在一些旧终端上,如果设置了“光标原点模式”,则表示它是相对的。
有关页面的说明,请参阅 页面。有许多转义序列用于处理页面。文本可以从一个页面复制到另一个页面,并且可以将光标从一个页面移动到另一个页面。切换页面可能是自动的,也可能不是自动的:当屏幕变满(第 1 页)时,来自主机的更多数据将转到第 2 页。光标一次只能在一个页面上,并且发送到终端的字符会转到那里。如果该页面未显示,则终端将接收新文本并将其放入显示内存中,但您将看不到它(直到终端切换到该页面)。
(本节的大部分内容现在可以在 Serial-HOWTO 中找到。)类 Unix 系统(和 PC)上的文本终端通常连接到计算机的异步 232 串行端口。它通常是 RS-232-C、EIA-232-D 或 EIA-232-E。这三个几乎是相同的。最初的 RS 前缀变为 EIA(电子工业协会),后来在 EIA 与 TIA(电信工业协会)合并后变为 EIA/TIA。EIA-232 规范也提供了同步(sync)通信,但 PC 上几乎总是缺少支持同步的硬件。RS 名称已过时,但仍在使用。本文将使用 EIA。
串行端口不仅仅是计算机或终端背面的物理连接器。它还包括相关的电子设备,这些设备必须产生符合 EIA-232 规范的信号。标准连接器有 25 个引脚,其中大多数未使用。另一种连接器只有 9 个引脚。一个引脚用于发送数据字节,另一个用于接收数据字节。另一个引脚是公共信号地。其他“有用”的引脚主要用于信号目的,稳定的负电压表示“关”,稳定的正电压表示“开”。
UART(通用异步接收器-发送器)芯片完成了大部分工作。如今,这个芯片的功能通常内置在另一个芯片中。
在 EIA-232 串行端口,电压是双极的(相对于地为正或负),并且幅度应约为 12 伏(较新的为 5 伏,但此处给出了 12 伏的示例)。对于发送和接收引脚,+12 伏是 0 位(有时称为“间隔”),-12 伏是 1 位(有时称为“标记”)。这被称为反向逻辑,因为通常 0 位既是假又是负的,而 1 位通常既是真又是正的。虽然接收和发送引脚是反向逻辑,但其他引脚(调制解调器控制线)是正常逻辑,正电压为真(或“开”或“置位”),负电压为假(或“关”或“复位”)。零电压没有意义(除非它通常意味着 PC 已断电)。
允许一定的电压范围。规范规定,发送信号的幅度应在 5 到 15 伏之间,但绝不能超过 25 伏。任何低于 3 伏的接收电压都是未定义的(但有些终端会接受较低的电压作为有效电压)。有时会看到错误的说法,即电压通常为 5 伏(甚至 3 伏),但在较旧的 PC 上通常为 11-12 伏。如果您在 Mac 计算机上使用 EIA-422 端口作为 EIA-232(需要专用电缆)或 EIA-423,则电压实际上仅为 5 伏。此处的讨论假设为 12 伏。互联网上关于电压的说法有很多混淆之处。
请注意,正常的计算机逻辑通常只有几伏(5 伏曾经是标准),因此,如果您尝试在 12 伏串行端口上使用为测试 3-5 伏计算机逻辑 (TTL) 设计的测试设备,则可能会损坏测试设备。
当没有发送任何内容时,发送引脚 (TxD) 在空闲时保持在 -12 V(标记)。要启动一个字节,它会跳到 +12 V(间隔)作为起始位,并在起始位的持续时间(周期)内保持在 +12 V。接下来是数据字节的低位。如果它是 0 位,则不会发生任何变化,并且线路在另一个位周期内保持在 +12 V。然后是下一位,依此类推。最后,可能会发送一个奇偶校验位,然后是一个 -12 V(标记)停止位。线路保持在 -12 V(空闲),直到下一个起始位。请注意,没有返回到 0 伏的电压,因此,对于 2 个连续位具有相同极性(均为零或均为一)的情况,没有简单的方法(除了同步信号)来判断一个位在哪里结束,下一个位在哪里开始。
第二个停止位也将是 -12 V,与第一个停止位相同。由于没有信号来标记这些位之间的边界,因此第二个停止位的唯一作用是线路必须保持在 -12 V 空闲的时间是两倍长。接收器无法检测到第二个停止位和字节之间更长的空闲时间之间的差异。因此,如果一端使用一个停止位,另一端使用 2 个停止位,则通信可以正常工作,但仅使用一个停止位显然更快。在极少数情况下,使用 1 1/2 个停止位。这意味着线路保持在 -12 V 的时间为 1 1/2 个周期(就像停止位比正常位宽 50% 一样)。
字符通常以 7 位或 8 位(数据位)传输。可能会(也可能不会)将额外的奇偶校验位附加到此结果,从而产生 7 位、8 位或 9 位的字节长度。一些终端仿真器和较旧的终端不允许 9 位。如果使用 2 个停止位,则有些会禁止 9 位(因为这会使总位数太大:总共 12 位)。
奇偶校验可以设置为奇数、偶数或无(标记和间隔奇偶校验可能是某些终端上的选项)。对于奇数奇偶校验,选择奇偶校验位,使字节中 1 位的数量(包括奇偶校验位)为奇数。如果这样的字节因位翻转而损坏,则结果将是奇偶校验为偶数的非法字节。这将检测到错误,如果它是终端的传入字节,则屏幕上将出现错误字符符号。偶数奇偶校验以类似的方式工作,所有合法字节(包括奇偶校验位)都具有偶数个 1 位。在设置期间,每字符位数通常仅表示每字节数据位数(对于真正的 ASCII 为 7 位,对于各种 ISO 字符集为 8 位)。
“标记”是 1 位(或逻辑 1),“间隔”是 0 位(或逻辑 0)。对于标记奇偶校验,奇偶校验位始终为 1 位。对于间隔奇偶校验,它始终为 0 位。标记或间隔奇偶校验只会浪费带宽,应在可行的情况下避免。“无奇偶校验”表示不添加奇偶校验位。对于不允许 9 位字节的终端,使用 8 位字符集时必须选择“无奇偶校验”,因为没有空间容纳奇偶校验位。
在通过 EIA-232 端口串行传输字节时,始终首先发送低位。PC 上的串行端口使用异步通信,其中有一个起始位和一个停止位来标记字节的开始和结束。这称为成帧,成帧的字节有时称为帧。结果,每个字节总共发送 9、10 或 11 位,其中 10 位是最常见的。8-N-1 表示 8 个数据位,无奇偶校验,1 个停止位。当计算起始位时,总共加起来为 10 位。一个停止位几乎被普遍使用。在 110 位/秒(有时在 300 位/秒)时,曾经使用过 2 个停止位,但今天第二个停止位仅在非常不寻常的情况下使用(或者由于错误,因为它看起来仍然可以正常工作)。
传统的 EIA-232 串行端口本质上是低速的,并且在距离上受到严重限制。广告经常写着“高速”,但它只能在非常短的距离内高速工作,例如到位于计算机旁边的调制解调器。所有导线都使用公共接地回流,因此如果没有额外的硬件,就无法使用双绞线技术(高速所需)。但是,某些计算机具有更现代的接口。请参阅 EIA-232 的后继者。
有点悲剧的是,1969 年的 RS-232 标准没有使用双绞线技术,这种技术可以快大约一百倍。自 1800 年代后期以来,双绞线已在电话电缆中使用。1888 年(110 多年前),“电缆会议”报告了其对双绞线(用于电话系统)的支持,并指出了其优点。但在“电缆会议”批准 80 多年后,RS-232 未能利用它。由于 RS-232 最初旨在将终端连接到附近的低速调制解调器,因此显然没有认识到对高速和更远距离传输的需求。
有关非 EIA-232 端口的更长讨论,请参阅 Serial-HOWTO 部分“其他串行设备”。已经建立了许多 EIA 标准,用于使用双绞线(平衡)技术的更高速度和更长距离。平衡传输有时可以比非平衡 EIA-232 快一百倍。对于给定的速度,使用双绞线时,距离(最大电缆长度)可能会长很多倍。似乎很少有终端支持它们。虽然许多终端也支持 EIA-423,但它几乎像 EIA-232,但只有 5 伏并且速度稍高(不使用双绞线)。双绞线包括 EIA-422、EIA-530-A、HSSI(高速串行接口)、USB(通用串行总线),当然还有以太网。
对于文本终端,EIA-232 速度足够快,但可用电缆长度通常太短。平衡技术可以解决这个问题。使用文本终端获得平衡通信的常用方法是在串行线路中安装 2@ 线路驱动器,以将非平衡转换为平衡(反之亦然)。它们是专用物品,如果购买新的,则很昂贵。
根据 EIA-232,发送(或接收)导线只有两种状态:标记 (-12 V) 或间隔 (+12 V)。没有 0 V 状态。因此,1 位序列的传输仅通过稳定的 -12 V,位之间没有任何标记。为了让接收器检测到各个位,它必须始终具有与发送器时钟同步的时钟信号。这样的时钟会生成与每个发送(或接收)位同步的“滴答”。
对于异步传输,同步是通过用起始位和停止位(由硬件完成)对每个字节进行成帧来实现的。接收器监听线路上的起始位,当它检测到起始位时,它开始其时钟滴答。它使用此时钟滴答来定时读取接下来的 7、8 或 9 位。(实际上,这比这稍微复杂一些,因为通常会采集一个位的多个样本,这需要额外的定时滴答。)然后读取停止位,时钟停止,接收器等待下一个起始位。因此,异步实际上在单个字节的接收期间是同步的,但是一个字节和下一个字节之间没有同步。
异步(async)表示“非同步”。在实践中,异步信号是异步串行端口发送和接收的信号,它是字节流,每个字节都由起始位和停止位分隔。同步(sync)是大多数其他情况。但这并没有解释基本概念。
理论上,同步意味着字节以恒定速率一个接一个地发送,与时钟信号滴答同步。通常有一条单独的导线或通道用于发送时钟信号。异步字节可能会以不规则的时间间隔发送,字节之间的时间间隔可能不同(例如,有人在键盘上键入字符)。
存在需要分类为同步或异步的临界情况。异步串行端口通常以稳定的流发送字节,这将使其成为同步情况,但由于它们仍然具有起始/停止位(这使得可以不规则地发送它们),因此称为异步。另一种情况是将数据字节(没有任何起始-停止位)放入数据包中,数据包之间可能存在不规则的间隔。这称为同步,因为每个数据包中的字节必须同步传输。
您是否想过 25 针串行端口连接器上所有未使用的引脚是做什么用的?它们中的大多数用于同步通信,而同步通信很少在 PC 上实现。有用于同步定时信号以及同步反向通道的引脚。EIA-232 规范同时提供了同步和异步,但 PC 使用 UART(通用异步接收器/发送器)芯片,例如 16450、16550A 或 16650,并且无法处理同步。对于同步,需要 USART 芯片或等效芯片,其中“S”代表同步。由于同步是一个小众市场,因此同步串行端口可能非常昂贵。
除了 EIA-232 的同步部分外,还有各种其他 EIA 同步标准。对于 EIA-232,连接器的 3 个引脚保留用于时钟(或定时)信号。有时,调制解调器的任务是生成一些定时信号,这使得在没有同步调制解调器(或没有称为“同步调制解调器消除器”的设备,该设备提供定时信号)的情况下无法使用同步通信。
虽然很少有串行端口是同步的,但同步通信通常确实通过使用 V.42 纠错的调制解调器在电话线上进行。这会剥离起始/停止位,并将日期字节放入数据包中,从而在电话线上实现同步操作。
块模式很少在 Linux 中使用,主要具有历史意义。在块模式下,当在终端上键入内容时,结果会保存在终端内存中,并且尚未发送到主机计算机。此类终端通常具有内置的编辑功能。当用户按下某些键(例如发送键)时,终端内存中保存的内容将发送到主机计算机。现在 Linux 编辑器 vi 和 emacs 必须立即对键入的某些键做出反应,因此块模式不可行。此类编辑器和其他交互式程序不允许将击键发送到计算机的长时间延迟,这是块模式固有的。因此,它们不能使用块模式。
旧的 IBM 大型机接口使用块模式(请参阅 IBM 终端,因此许多 IBM 终端仅限块模式,并且也是同步的(请参阅第 同步和同步 节)。
块模式本身可能具有各种子模式,例如“页面”(一次一页)和“行”(一次一行)。有些终端既具有块传输模式又具有传统的字符模式,并且可以在模式之间切换。具有块模式的异步终端包括 HP2622A、Wyse60、VT130、VT131、VT330、VT340 和 Visual500。许多后来的型号终端可以模拟块模式。但是 Linux 控制台不能。块模式可能包括表单功能,其中主机计算机向终端发送表单。然后用户填写表单并点击发送键,该键仅将表单中的数据发送回主机计算机。表单本身(不是数据)显示在屏幕上的受保护字段中,这些字段不会传输到主机。
块模式减轻了主机计算机的负载,特别是当主机计算机的硬件专为块模式设计时(如 IBM 大型机)。在字符模式下,键入的每个字符都会立即发送到串行端口,并且通常会在主机计算机上引起中断。接收字节的主机必须停止正在执行的任何操作,并从端口硬件中获取该字符。即使使用具有 FIFO 硬件缓冲区的 UART,硬件超时通常也仅为 3 个字节的传输时间,因此通常为键入的每个字符发出中断。
在真正的块模式下,接收长字符块仅使用一个中断。如果块模式与传统的异步 FIFO 串行端口一起使用,则每 14 个字节才需要一个中断,因为它们具有 16 字节的硬件缓冲区。因此,大大减少了中断处理的负载和开销,并且在使用块模式时,计算机有更多时间来执行其他任务。
如果终端通过网络连接到其主机,则块模式可以显着节省开销。在没有块模式的情况下,键入的每个字符(字节)都以自己的数据包发送,包括所有开销字节(在 Internet 上使用的 TCP/IP 数据包中为 40 个字节)。使用块模式,大量字符在单个数据包中发送。
虽然块模式更高效,但它几乎已经绝迹,并且有充分的理由。更快更便宜的计算机使得更高的效率变得不那么重要。例如,56k 调制解调器每秒会导致数百个中断(每 14 个字符),而在终端上键入内容每秒只会导致几个中断(每个键入的字符一个中断)。因此,在终端上键入内容引起的中断次数不是很重要(除非您有数百个终端连接到同一台计算机)。
另一点是,如果用户没有键入太多内容,效率就不是那么重要。编辑器是用户键入大量内容的主要示例。但是,如果您使用块模式进行编辑,则必须使用内置于终端中的粗糙编辑器。像 vim 和 emacs 这样的现代编辑器要好得多,但不能使用块模式。即使在带有终端的大型机时代,块模式也没有被广泛使用,IBM 除外。主要原因是利用它的软件没有广泛普及(IBM 除外)。terminfo 数据库似乎不包含它,这将使为其编写软件变得复杂。
(注意:第一本书涵盖的内容远不止 EIA-232。)
有关 Linux 串行端口软件(包括 getty 和端口监视器),请参阅 串行软件。
以下是按品牌名称排列的注释,这些注释对于特定终端来说太具体,无法放在 HOWTO 中的其他位置。如果您有一些关于特定终端的信息要贡献,而这些信息在其他地方没有涵盖,则可以放在此处。各种型号通常有很多共同点,因此此类通用信息只需要编写一次即可。如果对于每个终端型号,都有一组链接链接到与该型号相关的大多数文档(包括转义码),那就太好了。但这尚未完成。请注意,一些 VT (DEC) 手册现在可以在 Internet 上找到。请参阅 VT (DEC)。Wyse 将其手册中的信息放在了 Internet 上,但现在(2013 年)无法轻易找到。
Adds 终端菜单错误地使用“Xon/Xoff”来表示任何类型的流量控制。哪些型号是正确的?
制造 Adds Viewpoint 终端的 Adds 于 1994 年被 Boundless Technologies 收购,但他们继续使用“Adds”名称。
CIT 终端于 1980 年代在日本为 CIE Terminals 制造。它们在 1980 年代后期停止进口。该公司 CIE 仍然制造 CItoh 打印机(1997 年),但没有其废弃终端的零件。位于加利福尼亚州欧文市的 Ernie (714) 453-9555(1997 年)出售了一些型号 224、326 等的零件,但没有型号 80 和 101 的零件。
要在设置模式下保存设置参数,请按 ^S。cit80:对比度:终端后部的旋钮,cit101e:亮度:在设置模式下使用向上/向下箭头键。
不要将 IBM 终端与 IBM PC 显示器混淆。许多 IBM 终端不使用 ASCII,而是使用 8 位 EBCDIC 码。据称,在 EBCDIC 中,传输的位顺序与正常情况相反,高位在前。IBM 大型机通信标准是一种块模式同步通信(发送大型字符包)。两个标准是“BISYNC”和“SNA”(包括网络标准)。它们的许多终端都使用同轴电缆 (RG62A/U) 连接,天真的人可能会认为终端上的“BNC”连接器用于以太网(但事实并非如此)。
虽然此 IBM 系统实际上比 Linux 中通常使用的系统更有效,但符合此 IBM 标准的终端目前无法与 Linux 一起使用。但是,某些 IBM 终端是异步 ASCII 终端,应该可以在 PC 上的 Linux 上使用。型号 31xx 可能会工作,但 317x 和 319x 不是 ASCII 终端。在获取 IBM 终端之前,请确保它有 termcap (terminfo)。如果没有,则很可能无法与 Linux 一起使用。即使有 terminfo,也可能无法工作。例如,327x 有 termcap,但 3270 是 EBCDIC 同步终端。
3270 系列包括 3278(1970 年代后期)、带颜色和图形的 3279 以及 3274 终端控制器(类似于 3174)。它们可以用于 BISYNC 和 SNA。3290 具有分屏功能(分成四分之一)。
同步 IBM 终端不直接连接到 IBM 大型机,而是连接到“终端控制器”(有时称为“集群控制器”或“通信控制器”)。其中一些控制器可以将同步信号转换为异步信号,因此在这种情况下,同步终端可以通过其串行端口间接连接到类 Unix 的主机计算机。但仍然存在一个主要问题,那就是块传输。请参阅 块模式 节。
据称 Aux 端口是 DCE,并使用直通电缆。
这些是古董,代表最古老的终端。它们就像远程控制的打字机,但体积庞大且噪音很大。由电传打字机公司制造,第一批型号于 1920 年代制造,比计算机早 30 多年。早期的型号使用机电继电器和旋转分配器而不是电子设备。与 7 位 ASCII 相比,它们的 Baudot 代码每字符只有 5 位。请参阅 Sol Libes 的书籍“Small Computer Systems Handbook”,Hayden Books,1978 年:第 138-141 页(“电传打字机”)。
数字设备公司 (DEC) 制造了著名的 VT 系列终端,包括常用的 VT100 仿真器。
1995 年,DEC 将其终端业务出售给 Boundless Technologies。Boundless 于 2003 年破产,但于 2006 年以“Visual Technologies”部门的名义摆脱破产。然后在 2008 年,它们被 Video Display Corporation 收购,并交给了位于纽约州罗切斯特附近的 Z-AXIS 子公司。Boundless 名称和 url 已保留。
详细的 VT 终端信息、一些手册和历史记录位于 http://www.vt100.net/。
VT220:有些具有用于视频输出的 BNC 连接器(不用于输入)。有时人们错误地认为这是用于以太网连接。
VT510、520、525:支持完整的 DTR/DSR 流量控制。有些是“低辐射”型号。520 是多会话的,525 具有用于突出显示的颜色。
Dorio 是一款质量较低的型号,可以模拟许多其他终端。“sco unix 控制台”据称是使用“scoansi”terminfo 的强大仿真。
终端制造商 Links 被 Wyse 收购。
Qume 于 1990 年代初被 Wyse 收购。
有关旧终端的详细手册式信息,请参阅 http://www.wyse.com/service/support/kbase/wyseterm.asp。此信息包括规格、转义序列列表、零件列表、常见问题解答、设置信息等。感谢 Wyse 提供此信息,即使截至 2006 年他们已不再制造文本终端。
Wyse 终端的成本低于其他品牌,并且它们占据了主要的市场份额。人们对这些终端的质量表示担忧,尤其是 Wyse 50。但是,大量的故障报告(Wyse 50 除外)可能部分是由于大量使用 Wyse 终端造成的。
有关 Wyse 的历史记录,请参阅 en.wikipedia.org/wiki/Dell_Wyse。
据报告使用寿命不长。
显示调整(必须卸下盖子):亮度 VR202、高度 VR302、宽度 VR101(也影响高度)。如果您想在 Native Personality 中使用它,则箭头键代码将与 vi 中使用的代码(例如 ^L)冲突。要解决此问题,请使用 ESC ~ 3 设置“应用程序键模式”。这将导致箭头键发送 0xd0 - 0xd3。由于 Bash shell 的 readline 接口中存在错误,您需要编辑 /etc/inputrc,以便箭头键在 Bash 中工作。请参阅 Bash 中的错误
可以模拟 VT52/VT100/VT200。按 F3 进行设置。左右移动到菜单“图标”后,按空格键选择它。使用向上/向下键滚动浏览设置菜单。随时按 F3 重新进入设置(不会丢失任何设置)。
以下是 Wyse99GT(1980 年代后期)的设置菜单。请注意,TERM 表示“终止”(字符),而不是“终端”。
WYSE 99-GT Terminal Set-Up as used at the University of CA, Irvine
by David Lawyer, April 1990
F1 DISP:
COLUMNS=80 LINES=24 CELL SIZE=10 X 13
STATUS LINE=STANDARD BACKGROUND=DARK SCROLL SPEED=JUMP
SCREEN SAVER=OFF CURSOR=BLINK BLOCK DISPLAY CURSOR=ON
ATTRIBUTE=CHAR END OF LINE WRAP=ON AUTO SCROLL=ON
----------------------------------------------------------------------------
F2 GENERAL:
PERSONALITY=VT 100 ENHANCE=ON FONT LOAD=OFF
COMM MODE=FULL DUPLEX RCVD CR=CR SEND ACK=ON
RESTORE TABS=ON ANSWERBACK MODE=OFF ANSWERBACK CONCEAL=OFF
WIDTH CHANGE CLEAR=OFF MONITOR=OFF TEST=OFF
----------------------------------------------------------------------------
F3 KEYBRD:
KEYCLICK=OFF KEYLOCK=CAPS KEY REPEAT=ON
RETURN=CR ENTER=CR FUNCT KEY=HOLD
XMT LIMIT=NONE FKEY XMT LIMIT=NONE BREAK=170MS
LANGUAGE=US MARGIN BELL=OFF PRINTER RCV=OFF
----------------------------------------------------------------------------
F4 COMM:
DATA/PRINTER=AUX/MODEM MDM RCV BAUD RATE=9600 MDM XMT BAUD RATE=9600
MDM DATA/STOP BITS=8/1 MDM RCV HNDSHAKE=NONE MDM XMT HNDSHAKE=NONE
MDM PARITY=NONE AUX BAUD RATE=9600 AUX DATA/STOP BITS=8/1
AUX RCV HNDSHAKE=NONE AUX XMT HNDSHAKE=NONE AUX PARITY=NONE
(There is a main port (Modem=MDM) and an Auxiliary Port (AUX)
----------------------------------------------------------------------------
F5 MISC 1:
WARNING BELL=ON FKEY LOCK=OFF FEATURE LOCK=ON
KEYPAD=NUMERIC DEL=DEL/CAN XFER TERM=EOS
CURSOR KEYS=NORMAL MARGIN CTRL=0 DEL FOR LOW Y=ON
GIN TERM=CR CHAR MODE=MULTINATIONAL
----------------------------------------------------------------------------
F6 MISC 2:
LOCAL=OFF SEND=ALL PRINT=NATIONAL
PORT=EIA DATA SEND AREA=SCREEN PRINT AREA=SCREEN
DISCONNECT=60 MSEC SEND TERM=NONE PRINT TERM=NONE
PRINT MODE=NORMAL VT100 ID=VT100 POUND=US
----------------------------------------------------------------------------
F7 TABS: You should see several "T" characters spaced 8 dots apart.
If you don't, hit backspace.
F8 F/KEYS: Normally you will see no definitions for the Function Keys
here (unless someone has set them up and saved them). This means that
they will normally generate their default settings (not displayed here).
<ctrl><F5> shows the "user defined definition" of the F5 key, etc.
F9 A/BACK: Normally not defined: ANSWERBACK =
F10 EXIT: Selecting "DEFAULT ALL" will make the factory default settings
the default.
关于使用 WY-99GT 用户指南的提示:请注意,本指南中缺少的大部分内容都可以在 WY-99GT 程序员指南中找到。VT100 仿真(个性)被称为 ANSI,并使用 p. A-10+ 的 ANSI 键代码,即使键盘可能是 ASCII。p. A-13 上的子标题“ASCII 键盘”也与 VT100 相关,因为它在前几页有一个“ANSI KEY ...”超级标题。但并非所有 ASCII 键盘标题都与 VT100 相关,因为它们可能属于非 ANSI 个性超级标题,该标题可能在前几页找到。附录 H 是“ANSI 命令指南”,但 VT52 (ANSI) 个性在附录 G 中找到。
使用 F12 退出设置时,按空格键会将“否”更改为“是”以保存设置。此否/是左侧的句子是关于“垂直对齐”的,与此用于保存设置的否/是无关(令人困惑的菜单设计)。
具有 10x20 字符单元格。可以模拟 DEC VT320。功耗为 45 瓦。后来的型号是 185e。
型号编号后的 ES 表示低辐射:低磁场等。
文本终端 HOWTO 结束