27.3 终端

Contributed by Sean Kelly.

警告: 从 FreeBSD 8.0 开始, 用于串口的设备节点从 /dev/cuadN 改为了 /dev/cuauN; 从 /dev/ttydN 改为了 /dev/ttyuN。 FreeBSD 7.X 用户需要根据实际情况对这份文档中的例子进行必要的调整。

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

27.3.1 终端的用法和类型

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

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

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

  对于FreeBSD,有三种终端:

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

27.3.1.1 哑终端

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

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

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

27.3.1.2 充当终端的PC

  假如 哑终端 的功能仅限于显示、 发送和接收文本的话, 那么显然任何一台闲置的个人计算机, 都完全能够胜任哑终端的工作。 因此您需要的是合适的线缆, 以及一些在这台计算机上运行的 终端仿真 软件。

  这种配置在家庭中应用十分广泛。 例如, 如果您的爱人正忙于在您的 FreeBSD 系统的控制台上工作时, 您就可以将一台功能稍弱的计算机挂在这个 FreeBSD 系统上来同时完成一些文本界面的工作。

  在 FreeBSD 的基本系统中至少有两个能用于进行串口连接的工具: cu(1)tip(1)

  如果要从运行 FreeBSD 的计算机上通过串口连接到另一系统, 可以使用:

# cu -l 串口设备

  此处 “串口设备” 表示您计算机上某个串口对应的设备名。 /dev/cuauN

  此处的 “N” 表示串口的编号。

注意: 请注意在 FreeBSD 中设备的编号是从零而非一开始的 (这一点与另一些系统, 如基于 MS-DOS® 的系统不同)。 因此, 在基于 MS-DOS 系统中的 COM1 在 FreeBSD 中通常叫做 /dev/cuau0

注意: 其他一些人可能喜欢使用另一些来自 Ports 套件的程序。 Ports 中提供了几个与 cu(1)tip(1) 类似的工具, 例如 comms/minicom

27.3.1.3 X 终端

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

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

27.3.2 配置

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

  在 第 13 章 中曾经提到, 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) 的联机手册了解更多信息。

27.3.2.1 添加一个记录到/etc/ttys

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

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

例 27-1. 在 /etc/ttys 中增加终端记录

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

ttyu1(1)  "/usr/libexec/getty std.38400"(2)  wy50(3)  on(4)  insecure(5)
ttyu5   "/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 或一个相似的机制来获得超级用户的权限。

27.3.2.2 重新读取/etc/ttys来强制init

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

# kill -HUP 1

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

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

27.3.3 您的连接可能出现的问题

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

27.3.3.1 没有登录命令出现:

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

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

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

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

# ps -axww|grep getty

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

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

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

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

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

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

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

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

本文档和其它文档可从这里下载:ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.

如果对于FreeBSD有问题,请先阅读文档,如不能解决再联系<questions@FreeBSD.org>.
关于本文档的问题请发信联系 <doc@FreeBSD.org>.