曾经非常普遍的情况是,Unix 安装包含一台服务器和许多“哑”字符模式终端或拨号调制解调器。如今,这种安装方式已不太常见,对于许多对以这种方式操作感兴趣的人来说,这是个好消息,因为现在“哑”终端的购置成本非常低廉。拨号调制解调器配置仍然很常见,但现在它们可能更多地用于支持 SLIP 或 PPP 登录(在第 7 章和第 8 章中讨论),而不是用于简单的登录。尽管如此,这些配置中的每一种都可以使用一个名为 getty 程序的简单程序。
术语 getty 可能是“get tty”的缩写。getty 程序打开一个串行设备,对其进行适当配置,可选地配置调制解调器,并等待建立连接。串行设备上的活动连接通常通过串行设备上 Data Carrier Detect (DCD) 引脚的升高来指示。当检测到连接时,getty 程序会发出一个login提示符,然后调用 login 程序来处理实际的系统登录。Linux 中的每个虚拟终端(例如,/dev/tty1)都有一个针对它运行的 getty。
有许多不同的 getty 实现,每种实现都旨在更好地适应某些配置。getty 我们将在此处描述的名为 mgetty。它非常受欢迎,因为它具有各种使其特别适合调制解调器的功能,包括对自动传真程序和语音调制解调器的支持。我们将专注于配置 mgetty 来应答传统的数据呼叫,其余的供您在方便时探索。
mgetty 守护程序以源代码形式从 ftp://alpha.greenie.net/pub/mgetty/source/ 获取,并且几乎所有 Linux 发行版都以预打包形式提供。mgetty 守护程序与大多数其他 getty 实现的不同之处在于,它专门为 Hayes 兼容调制解调器设计。它仍然支持直接终端连接,但最适合拨号应用程序。它不是使用 DCD 线来检测来电,而是监听现代调制解调器在检测到呼叫且未配置为自动应答时生成的RING消息。
主可执行程序名为/usr/sbin/mgetty,其主要配置文件名为/etc/mgetty/mgetty.config。还有许多其他二进制程序和配置文件涵盖其他 mgetty 功能。
对于大多数安装,配置是编辑/etc/mgetty/ mgetty.config文件并将适当的条目添加到/etc/inittab文件中以自动执行 mgetty。
示例 4-6 显示了一个非常简单的 mgetty 配置文件。此示例配置了两个串行设备。第一个,/dev/ttyS0,支持 38,400 bps 的 Hayes 兼容调制解调器。第二个,/dev/ttyS0,支持 19,200 bps 的直接连接的 VT100 终端。
示例 4-6. /etc/mgetty/mgetty.config 文件示例
# # mgetty configuration file # # this is a sample configuration file, see mgetty.info for details # # comment lines start with a "#", empty lines are ignored # # ----- global section ----- # # In this section, you put the global defaults, per-port stuff is below # # access the modem(s) with 38400 bps speed 38400 # # set the global debug level to "4" (default from policy.h) debug 4 # # ----- port specific section ----- # # Here you can put things that are valid only for one line, not the others # # # Hayes modem connected to ttyS0: don't do fax, less logging # port ttyS0 debug 3 data-only y # # direct connection of a VT100 terminal which doesn't like DTR drops # port ttyS1 direct y speed 19200 toggle-dtr n # |
配置文件支持全局和端口特定的选项。在我们的示例中,我们使用了一个全局选项将速度设置为 38,400 bps。此值由ttyS0端口继承。我们应用 mgetty 的端口使用此速度设置,除非它被端口特定的速度设置覆盖,就像我们在ttyS1配置中所做的那样。
Thedebug关键字控制 mgetty 日志记录的详细程度。data-only配置中的关键字导致 mgetty 忽略任何调制解调器传真功能,仅作为数据调制解调器运行。ttyS0configuration causes mgetty to ignore any modem fax features, to operate just as a data modem. Thedirect配置中的关键字导致 mgetty 忽略任何调制解调器传真功能,仅作为数据调制解调器运行。ttyS1配置指示 mgetty 不要尝试对端口进行任何调制解调器初始化。最后,toggle-dtr关键字指示 mgetty 不要尝试通过断开串行接口上的 DTR(数据终端就绪)引脚来挂断线路;有些终端不喜欢这种情况发生。
您也可以选择使mgetty.config文件为空,并使用命令行参数来指定大多数相同的参数。随应用程序提供的文档包括对 mgetty 配置文件参数和命令行参数的完整描述。请参阅以下示例。
我们需要在/etc/inittab文件中添加两个条目才能激活此配置。inittab文件是 Unix System V init 命令的配置文件。init 命令负责系统初始化;它提供了一种在启动时自动执行程序并在程序终止时重新执行程序的方法。这非常适合运行 getty 程序的目标。
T0:23:respawn:/sbin/mgetty ttyS0 T1:23:respawn:/sbin/mgetty ttyS1 |
The/etc/inittab文件的每一行都包含四个字段,用冒号分隔。第一个字段是唯一标记文件中条目的标识符;传统上它是两个字符,但现代版本允许四个字符。第二个字段是此条目应处于活动状态的运行级别列表。运行级别是提供备用机器配置的一种方式,它使用存储在名为/etc/rc1.d, /etc/rc2.d等的目录中的启动脚本树来实现。此功能通常实现得非常简单,您应该模仿文件中的其他条目或参考您的系统文档以获取更多信息。第三个字段描述何时采取行动。对于运行 getty 程序的目的,此字段应设置为respawn,这意味着该命令应在死机时自动重新执行。还有其他几个选项,但它们在这里对我们的目的没有用处。第四个字段是要执行的实际命令;这是我们指定 mgetty 命令和我们希望传递给它的任何参数的地方。在我们的简单示例中,无论系统在运行级别 2 或 3 中的任何一个级别运行,我们都启动和重新启动 mgetty,并且仅提供我们要使用的设备的名称作为参数。mgetty 命令假定/dev/,因此我们不需要提供它。
本章是对 mgetty 以及如何向串行设备提供登录提示的快速介绍。您可以在 Serial-HOWTO 中找到更全面的信息。
编辑配置文件后,您需要重新加载 init 以使更改生效。只需向 init 进程发送挂断信号即可;它始终具有进程 ID 1,因此您可以安全地使用以下命令
# kill -HUP 1 |