27.3. 终端
上一页 | 第 27 章 串口通讯 | 下一页

## 27.3. 终端

Contributed by Sean Kelly.

### 警告:

从 FreeBSD 8.0 开始， 用于串口的设备节点从 `/dev/cuad`N`` 改为了 `/dev/cuau`N``； 从 `/dev/ttyd`N`` 改为了 `/dev/ttyu`N``。 FreeBSD 7.X 用户需要根据实际情况对这份文档中的例子进行必要的调整。

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

### 27.3.1. 终端的用法和类型

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

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

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

对于FreeBSD，有三种终端：

- 哑终端

- 充当终端的PC

- X 终端

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

#### 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/cuau`N``。

此处的 “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 章 FreeBSD 引导过程 中曾经提到， `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 安装包括一个支持最初四个串口 `ttyu0` 到 `ttyu3` 的`/etc/ttys` 文件。 如果您从那些端口中某一个使用终端，您不需要添加另一个记录。

例 27.1. 在 `/etc/ttys` 中增加终端记录

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

ttyu1 "/usr/libexec/getty std.38400" wy50 on insecure ttyu5 "/usr/libexec/getty std.19200" vt100 on insecure

| 第一部分指定了终端指定文件的名称， 它可以在 `/dev`中找到。

第二部分是在这行执行的命令，通常是 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来连接。

| 第三部分是通常连接到那个tty行的终端类型。对于拨号端口， `unknown` 或 `dialup` 通常被用在这个地方。 对于硬连线的终端，终端类型不会改变， 所以您可以从termcap数据库文件中放一个真正的终端类型。 在我们的例子中， Wyse-50 使用真正的终端类型， 而运行 Procomm 的286 PC将被设置成在VT-100上的模拟。
| 如果端口被启用，可以指定第四个部分。在第二部分， 把它放在这儿将执行初始化进程来启动程序 `getty`。如果您在这部分拖延， 将没有`getty`，在端口上因此就没有登录。
| 最后部分被用来指定端口是否安全。 标记一个安全的端口意味着您信任它允许用 `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. 当键入密码时，字符两个两个出现

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

上一页 | 上一级 | 下一页
27.2. 介绍 | 起始页 | 27.4. 拨入服务

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

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