20.3. 终端

Contributed by Sean Kelly.

当您在计算机控制台或是在一个连接的网络上时, 终端提供了一个方便和低成本的访问FreeBSD系统的方法。 这节描述了如何在FreeBSD上使用终端。

20.3.1. 终端的用法和类型

早期的 UNIX® 系统没有控制台。 人们通过将终端连接到计算机的串口来登录和使用程序。 它很像用 modem 和一些终端软件来拨号进入一个远程的系统, 只能执行文本的工作。

今天的 PC 已经可以使用高质量的图形了, 但与今天的其他UNIX操作系统一样,建立一个登录会话的能力仍然存在。 通过使用一个终端连接到一个没有使用的串口, 您就能登录和运行任何文本程序或在 X 视窗系统中运行一个 xterm 窗口程序。

对于商业用户,您可以把任何终端连接到 FreeBSD 系统, 然后把它们放在员工的桌面上。 对于家庭用户,则可以使用一台比较老的 IBM PC 或 Macintosh 运行一个终端连接到一台运行 FreeBSD 的高性能机器上。

对于FreeBSD,有三种终端:

下面一小节将描述每一种终端。

20.3.1.1. 哑终端

哑终端需要专门的好几种硬件,让您通过串行线连接到计算机。 它们被叫做 “哑” 是因为它们只能够用来显示, 发送和接收文本。 您不能在它上面运行任何程序。

有好几百种哑终端,包括Digital Equipment Corporation 的VT-100和Wyse的WY-75。只有几种可以在FreeBSD上工作。 一些高端的终端可以显示图形,但只有某些软件包可以使用这些高级特性。

哑终端被广泛用于那些不需要图形应用的工作中。

20.3.1.2. 充当终端的PC

如果一个 哑终端 有足够的能力来显示,发送和接收文本, 那任何个人计算机都可以作为一个哑终端。 您所需要的只是适当的线缆和一些终端模拟软件。

这样一个配置被广泛运用于家庭。例如,如果您的妻子忙于在您的 FreeBSD 系统控制台上工作,您也可以从一台低档的个人计算机登录到 FreeBSD 系统执行一些文本的工作。

20.3.1.3. X 终端

X终端是最复杂的终端系统。它们通常需要使用以太网来连接。 它们能显示任何X应用程序。

我们介绍X终端只是为了感兴趣。然而, 这章不会涉及X终端的安装,配置或使用。

20.3.2. 配置

这节描述了您在一个终端上启用一个登录会话,需要在 FreeBSD 系统上配置些什么。假设您已经配置好了内核来支持串行端口,您就可以连接了。

Chapter 12 中曾经提到, init 进程依赖于系统启动时所有的处理控制和初始化。 通过 init 来执行的一些任务将先读取 /etc/ttys文件, 然后在可用的终端上启用一个 getty 进程。 getty 进程可用来阅读一个登录名和启动 login程序。

然而,要为您的FreeBSD系统配置终端,您需要以 root 身份执行下面的步骤:

  1. 如果它不在那儿,您需要为串行端口在 /dev目录下添加一行记录到 /etc/ttys

  2. 指定 /usr/libexec/getty 在端口上运行, 然后从 /etc/gettytab 文件指定适当的 getty 类型。

  3. 指定默认的终端类型。

  4. 设置端口为 “on”。

  5. 确定端口是否为 “secure”。

  6. 迫使init 重新读取 /etc/ttys文件。

作为可选的步骤,您可以通过在 /etc/gettytab 中建立一个记录,在第2步创建一个定制的 getty 类型来使用。这章不会介绍如何做。 您可以参考 gettytab(5)getty(8) 的联机手册了解更多信息。

20.3.2.1. 添加一个记录到/etc/ttys

/etc/ttys文件列出了您 FreeBSD系统上允许登录的所有端口。 例如, 第一个虚拟控制台 ttyv0 在这个文件中有一个记录。 您可以使用这个记录登录进控制台。 这个文件也包含其他虚拟控制台的记录,串口,和伪 ttys 终端。 对于一个硬连线的终端, 只要列出串行端口的 /dev 记录而不需要 /dev部分 (例如, /dev/ttyv0 可以被列为 ttyv0)。

默认的 FreeBSD 安装包括一个支持最初四个串口 ttyd0ttyd3/etc/ttys 文件。 如果您从那些端口中某一个使用终端,您不需要添加另一个记录。

Example 20-1. 添加终端记录到/etc/ttys

假设我们连接两个终端给系统: 一个 Wyse-50 和一个老的运行 Procomm 终端软件模拟一个 VT-100 终端的286IBM PC。 在 /etc/ttys 文件中的相应的记录是这样的:

ttyd1(1)  "/usr/libexec/getty std.38400"(2)  wy50(3)  on(4)  insecure(5)
ttyd5   "/usr/libexec/getty std.19200"  vt100  on  insecure
     
(1)
第一部分指定了终端指定文件的名称, 它可以在 /dev中找到。
(2)
第二部分是在这行执行的命令,通常是 getty(8)getty 初始化然后打开一行,设置速度, 用户名的命令和执行登录程序。

getty 程序在它的命令行接收一个参数 (可选), getty 类型。 一个 getty 类型会在终端行描述一个特征, 像波特率和奇偶校验。 getty 程序从 /etc/gettytab 文件读取这些特征。

文件/etc/gettytab 包含了许多老的和新的终端行记录。 在很多例子中,启动文本 std 的记录将用硬连线终端来工作。 这些记录忽略了奇偶性。 这是一个从110到115200 bit/s的 std 记录。 当然,您可以添加您自己的记录到这个文件。 gettytab 的联机手册提供了更多的信息。

当在/etc/ttys中设置 getty 类型的时候, 确信在终端上的通讯设置匹配。 在我们的例子中, Wyse-50 不使用奇偶性, 用38400 bit/s 来连接。286 PC不使用奇偶性,用19200bit/s来连接。

(3)
第三部分是通常连接到那个tty行的终端类型。对于拨号端口, unknowndialup 通常被用在这个地方。 对于硬连线的终端,终端类型不会改变, 所以您可以从termcap数据库文件中放一个真正的终端类型。

在我们的例子中, Wyse-50 使用真正的终端类型, 而运行 Procomm 的286 PC将被设置成在VT-100上的模拟。

(4)
如果端口被启用,可以指定第四个部分。在第二部分, 把它放在这儿将执行初始化进程来启动程序 getty。如果您在这部分拖延, 将没有getty,在端口上因此就没有登录。
(5)
最后部分被用来指定端口是否安全。 标记一个安全的端口意味着您信任它允许用 root 帐户从那个端口登录。 不安全的端口不允许 root登录。 在一个不安全的端口上, 用户必须用无特权的帐户登录, 然后使用 su 或一个相似的机制来获得超级用户的权限。

20.3.2.2. 重新读取/etc/ttys来强制init

/etc/ttys文件做一个必要的修改后,您必须发送一个 SIGHUP 信号给初始化进程来迫使它重新读取配置文件,例如:

# kill -HUP 1

Note: init 总是系统运行时的第一个进程,因此它总是PID 1。

如果能够正确设置,所有的线缆都是适当的,终端将可以启用了, 然后一个 getty 进程将在每个终端运行, 您将在您的终端上看到登录命令行。

20.3.3. 您的连接可能出现的问题

即使您小心翼翼地注意细节,您仍然可能会在设置终端时出错。 这有一个有关问题和解决办法的列表:

20.3.3.1. 没有登录命令出现:

确定终端被嵌入和打开了。如果把一台个人计算机充当一个终端, 确信终端模拟软件运行在正确的串口上。

确信线缆被稳固地连接在终端和 FreeBSD 计算机上。 确信用了正确的电缆。

确定终端和 FreeBSD 的传输速度和奇偶设置已经一致了。 如果您有一个图像显示终端,确信对比度已经调节好了。 如果它是一个可打印的终端,确信纸张和墨水已经就绪了。

确定一个 getty 进程正在运行和服务终端。 例如, 可以用ps 命令得到运行 getty 程序的列表,键入:

# ps -axww|grep getty

您将看到一个终端的记录。例如,下面的显示表明一个getty 正在第二个串行端口 ttyd1 运行, 正在/etc/gettytab中使用 std.38400 的记录:

22189  d1  Is+    0:00.03 /usr/libexec/getty std.38400 ttyd1

如果没有 getty 进程运行, 确信您已经在/etc/ttys中启用了端口。 在修改完/etc/ttys文件后,记得运行 kill -HUP 1

如果 getty 进程确实在运行, 但终端上仍然没有显示出登录提示, 或者虽然显示了单缺不允许您输入, 您的终端或电缆可能不支持硬件握手。 请尝试将 /etc/ttys 中的 std.38400 改为 3wire.38400 并一定能够记得在改完 /etc/ttys 之后 kill -HUP 1)。 3wire 记录和 std 类似, 但忽略硬件握手。 您可能需要在使用 3wire 时减少波特率或启用软件流控制以避免缓冲区溢出。

20.3.3.2. 出现一个 “垃圾” 而不是一个登录命令行

确信终端和 FreeBSD 使用相同的 bit/s 传输率和奇偶校验设置。 检查一下 getty 进程确信当前使用正确的 getty 类型。 如果没有, 编辑/etc/ttys然后运行kill -HUP 1

20.3.3.3. 当键入密码时,字符两个两个出现

将终端 (或终端模拟软件) 从 “半双工” 或 “本地回显” 换成 “全双工”。