29.3.终端

终端提供了一种当不在计算机的控制台或连接的网络上时,可以访问 FreeBSD 系统的方便且低成本的方式。这一节介绍了如何在 FreeBSD 中使用终端。

最初的 UNIX® 系统并没有控制台。作为替代,用户通过连接到计算机串口的终端来登录和运行程序。

今天,几乎所有类 UNIX® 操作系统,包括 FreeBSD 都有在串口上建立登录会话的能力。通过使用连接在未使用的串口上的终端,用户可以登录并运行任何通常可以在控制台或 xterm 窗口中运行的文本程序。

许多终端可以连接到同一个 FreeBSD 系统上。可以将一台旧的备用计算机用作终端,连接到一台运行 FreeBSD 的更强大的计算机。这可以把本来是单用户的计算机变成一个强大的多用户系统。

FreeBSD 支持三种类型的终端:

哑终端

哑终端是通过串行线与计算机连接的专用硬件。它们被称为“哑巴”,因为它们的计算能力只够显示、发送和接收文本。没有程序可以在这些设备上运行。但是哑终端可以连接到运行所需程序的计算机。

有许多制造商生产的数百种哑终端,几乎所有的哑终端都可以在 FreeBSD 上工作。一些高级终端甚至可以显示图形,但只有某些软件可以利用这些高级功能。

哑终端在工作环境中很受欢迎,因为工人不需要访问图形应用程序。

充当终端的计算机

由于哑终端只有足够的能力来显示、发送和接收文本,任何备用计算机都可以成为哑终端。所需要的只是适当的电缆和一些在计算机上运行的终端仿真软件。

这种配置可能是有用的。例如,如果一个用户正忙于在 FreeBSD 系统的控制台工作,另一个用户可以从一台功率较小的个人计算机上作为终端连接到 FreeBSD 系统上,同时进行一些纯文本的工作。

在 FreeBSD 的基本系统中,至少有两个工具可以用来通过串行连接工作:cu(1)tip(1)

例如,从一个运行 FreeBSD 的客户系统连接到另一个系统的串行连接:

# cu -l /dev/cuauN

端口的编号从 0 开始。这意味着 COM1/dev/cuau0

其他的程序可以通过 ports 获得,例如 comms/minicom

X 终端

X 终端是目前最复杂的一种终端。它们通常不连接至串行端口,而是连接到一个像以太网一样的网络。它们可以显示所有的 Xorg 应用程序,而不是局限于纯文本应用程序。

本章不包括 X 终端的设置、配置或使用。

29.3.1.终端配置

这一节说明了如何配置 FreeBSD 系统,使其能够在串行终端上进行登录会话。它假定系统能够识别终端所连接的串口,并且终端是用正确的电缆连接的。

在 FreeBSD 中,init 读取 /etc/ttys 并在可用终端上启动一个 getty 进程。getty 进程负责读取登录名并启动登录程序。FreeBSD 系统上允许登录的端口都列在 /etc/ttys 中。例如,第一个虚拟控制台,ttyv0,在这个文件中有一个条目,允许在该控制台登录(login)。这个文件还包含其他虚拟控制台、串行端口和伪 tty 的条目。对于一个硬接线终端,串行端口的 /dev 条目被列出,但不包括 /dev 部分。例如,/dev/ttyv0 被列为 ttyv0

默认的 /etc/ttys 配置了对前四个串口的支持,即 ttyu0ttyu3

ttyu0   "/usr/libexec/getty std.9600"   dialup  off secure
ttyu1   "/usr/libexec/getty std.9600"   dialup  off secure
ttyu2   "/usr/libexec/getty std.9600"   dialup  off secure
ttyu3   "/usr/libexec/getty std.9600"   dialup  off secure

当把一个终端连接到这些端口之一时,修改默认条目以设置所需的速度和终端类型,打开(on)设备,如果需要,改变端口的安全(secure)设置。如果终端连接到另一个端口,为该端口添加一个条目。

配置终端条目在 /etc/ttys 中配置了两个终端。第一个条目配置了一个连接到 COM2 的 Wyse-50。第二个条目配置了一台运行 Procomm 终端软件模拟 VT-100 终端的旧电脑。这台计算机连接到一个多端口串行卡上的第六个串行端口。

例 43. 配置终端入口

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

第一个字段指定了串行终端的设备名称。

第二个字段告诉 getty 初始化并打开线路,设置线路速度,提示用户名,然后执行登录(login)程序。可选的 getty 类型(getty type)配置了终端线路的特性,如 bps 速率和奇偶性。可用的 getty 类型在 /etc/gettytab 中列出。几乎在所有情况下,以 std 开头的 getty 类型都适用于硬接线终端,因为这些条目忽略了奇偶性。从 110 到 115200 的每个 bps 速率都有一个 std 条目。更多信息请参考 gettytab(5)。当设置 getty 类型时,确保与终端使用的通信设置相匹配。在这个例子中,Wyse-50 使用无奇偶校验,以 38400 bps 连接。计算机使用无奇偶校验,以 19200 bps 连接。

第三个字段是终端的类型。对于拨号端口,通常使用未知(unknown)或拨号(dialup),因为用户几乎可以用任何类型的终端或软件进行拨号。由于硬接线终端的终端类型不会改变,可以从 /etc/termcap 中指定一个真实的终端类型。在这个例子中,Wyse-50 使用真实的终端类型,而运行 Procomm 的计算机被设置为模拟 VT-100。

第四个字段指定该端口是否应被启用。要在这个端口上启用登录,这个字段必须设置为开(on)。

最后一个字段用于指定该端口是否安全(secure)。将一个端口标记为安全意味着它被信任到足以允许 root 从该端口登录。不安全的端口不允许 root 登录。在不安全的端口上,用户必须从非特权账户登录,然后使用 su 或类似的机制来获得超级用户的权限,如超级用户账户中所述。出于安全考虑,建议将此设置改为不安全(inscure)。

在对 /etc/ttys 进行任何修改后,向 init 进程发送一个 SIGHUP(挂起)信号,迫使它重新读取其配置文件:

# kill -HUP 1

由于 init 总是第一个在系统上运行的进程,它的进程 ID 总是 1。

如果一切设置正确,所有电缆都已到位,终端也已通电,现在每个终端上都应该有一个 getty 进程在运行,每个终端上都应该有登录提示。

29.3.2.排除连接的故障

即使对细节有最细微的关注,在设置终端时仍可能出错。这里列出了一些常见的症状和一些建议的解决方法。

如果没有出现登录提示,请确保终端已插上插头并接通电源。如果是作为终端的个人电脑,确保它在正确的串行端口上运行终端仿真软件。

确保电缆与终端和 FreeBSD 计算机都连接牢固。确保它是正确的电缆。

确保终端和 FreeBSD 在 bps 速率和奇偶校验设置上一致。如果是视频显示终端,确保对比度和亮度控制被调高。如果是一个打印终端,确保纸张和墨水的供应充足。

使用 ps 确保 getty 进程正在运行并为终端服务。例如,下面的列表显示一个 getty 正在第二个串口 ttyu1 上运行,并使用 /etc/gettytab 中的 std.38400 条目:

# ps -axww|grep ttyu
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 13wire 条目与 std 类似,但忽略了硬件握手。在使用 3wire 时,可能还需要降低 bps 或启用软件流控制,以防止缓冲区溢出。

如果出现的是垃圾而不是登录提示,请确保终端和 FreeBSD 在 bps 速率和奇偶校验设置上达成一致。检查 getty 进程,确保使用了正确的 getty 类型。如果没有,编辑 /etc/ttys 并运行 kill -HUP 1

如果字符出现双倍,并且输入密码时出现,请将终端或终端仿真软件从“半双工”(“half duplex”)或“本地回声”(“local echo”)切换到”全双工“(“full duplex”)。