Chapter 12. 终端机驱动程序

Table of Contents
12.1. wscons
12.2. pccons
12.3. pcvt

在 NetBSD 版本在 1.4 之前,使用者只有两种屏幕与键盘的驱动程序可选, pccons (只支援 i386)和 pcvt。 在 1.4 版以后,新的 wscons 平台驱动程序出现了,被用以取代两 个先前的驱动程序(仍然被支持。)

12.1. wscons

Wscons 是 NetBSD 新的终端机驱动程序。它提供虚拟的终端机,支持 多国语言的键盘,鼠标的处理,等等。wscons 的能力可依不同平台的 特性而有所改变(wscons 并不支持所有的平台):i386 版提供非常 多样性的特征。

在安装过程结束之后,wscons 被预设为启动而不需额外的工作。在 1.4 版,虚拟终端机并没有预设为执行:想要使用它们,请看 Chapter 4。其余的段落描述了 wscons 在核心设定文件中的 选项。

如果你编译了个人化的核心,要使用 wscons 你必须设定相关的选项并 并取消 pcvt 和 pccons 的选项(它们并不能同时被设定。)例如,

#pc0    at isa? port 0x60 irq 1   # pccons generic PC console driver
#vt0    at isa? port 0x60 irq 1   # PCVT console driver
    

在核心设定档你也可以一个国外式的键盘。例如,使用意大利式键盘 成为默认值:

options     PCKBD_LAYOUT="KB_IT"
    

Note: 意大利式键盘的配置并不是理想的写程序工具。要修改请看 Chapter 4

预先配置的虚拟终端机数目被以下的选项所控制

options     WSDISPLAY_DEFAULTSCREENS=4
    

藉由修改 /etc/wscons.conf 档中相关的设定, 可以增加其它的终端机:批注记号 (#) 必须从包含 "screen x" 的每一行的开头加以移除。在以下的例子中,是将第五个虚拟终端机 增加到预先配置的四个之后:

# screens to create
#       idx     screen  emul
#screen 0       -       vt100
screen 1        -       vt100
screen 2        -       vt100
screen 3        -       vt100
screen  4       -       -
#screen 4       80x25bf vt100
#screen 5       80x50   vt100
    

rc.wscons script 将为被批注的每一行转送给 wsconscfg 指令:每一行都被当成参数使用。 idx 行变成 index 参数, screen 行变成 -t type 参数 (被用来定义屏幕的型态:行与列数,颜色数,...)而 emul 行变成 -e emul 参数, 用来定义终端机仿真。例如:

screen 3       -       vt100
    

becomes a call to:

wsconscfg -e vt100 3
    

Note: 这可能会导致一个(无害的)冲突,在核心所预先配置的终端机和 经由 /etc/wscons.conf 所配置的终端机之间。 如果在开机时,系统尝试配置一个已经被配置的屏幕,则会出现以 讯息:

wsconscfg: WSDISPLAYIO_ADDSCREEN: Device busy
    

解决方法就是在 /etc/wscons.conf 相关的 行中加上批注符号。

虚拟终端机必须也在 /etc/ttys 中 做相关的设定。例如:

console "/usr/libexec/getty Pc"         pc3     off secure
ttyE0   "/usr/libexec/getty Pc"         vt220   on secure
ttyE1   "/usr/libexec/getty Pc"         vt220   on secure
ttyE2   "/usr/libexec/getty Pc"         vt220   on secure
ttyE3   "/usr/libexec/getty Pc"         vt220   off secure
...
    

这一行

ttyE3   "/usr/libexec/getty Pc"         vt220   off secure
    

/etc/ttys 中是被 X server 用来寻找尚未 被使用的终端机的。要使用不同于号码 4 的屏幕, vtn 的参数必须传给 X server。 (n 是一个用来使屏幕能被 X 所使用的 关键数字。)

例如,"screen 7" 可以在 /etc/wscons.conf 中被设定而且 X 也能 从 "vt8" 中被启动。若使用 xdm 则必须编辑 /usr/X11R6/lib/X11/xdm/Xserver。 例如:

:0 local /usr/X11R6/bin/X +kb dpms -bpp 16 dpms vt8
    

xdm3d 而言,路径是不同的: /usr/X11R6/share/xdm3d/Xservers

12.1.1. 在 wscons 中使用 50 行的文字模式

50 行的文字模式在 NetBSD 1.4.1 版时开始被使用。这个模式可以 在 /etc/wscons.conf 中设定。底下这行必 需移除批注:

font ibm  -  8  ibm  /usr/share/pcvt/fonts/vt220l.808
      

以下数行必须被修改:

#screen 0       80x50   vt100
screen  1       80x50   vt100
screen  2       80x50   vt100
screen  3       80x50   vt100
screen  4       80x50   vt100
screen  5       80x50   vt100
screen  6       80x50   vt100
screen  7       80x50   vt100
      

这个设定建立了八个屏幕,可以藉由组合键 Ctrl-Alt-Fn 来切换(在此 n 表示从 1 到 8);所使用的装置为 ttyE0..ttyE7。要使它们显示登入提示符号, /etc/ttys 必须修改:

ttyE0   "/usr/libexec/getty Pc"         vt220   on secure
ttyE1   "/usr/libexec/getty Pc"         vt220   on secure
ttyE2   "/usr/libexec/getty Pc"         vt220   on secure
ttyE3   "/usr/libexec/getty Pc"         vt220   on secure
ttyE4   "/usr/libexec/getty Pc"         vt220   on secure
ttyE5   "/usr/libexec/getty Pc"         vt220   on secure
ttyE6   "/usr/libexec/getty Pc"         vt220   on secure
ttyE7   "/usr/libexec/getty Pc"         vt220   on secure
      

screen 0 的 80x25 的设定是不能被修改的,因为要保证我们 至少有一个工作屏幕。

12.2. pccons

这是一个在 i386 开机片中能找到的终端机驱动程序。它并不能提供 虚拟的终端机和设定的工具程序而没有讨论的空间。

12.3. pcvt

Pcvt 是 VT220 终端机型态的仿真者而且比起简单的 pccons,有许多 进接的功能。它支持外国式的键盘和虚拟终端机(使用 Ctrl-Alt-F1..F8 或 F9..F12 功能键。)要设定 pcvt,底这几行必须 从核心设定档中移除批注。

# Enable only one of the following lines
#pc0    at isa? port 0x60 irq 1
vt0     at isa? port 0x60 irq 1

# Options for PCVT console driver
#options FAT_CURSOR
options PCVT_NETBSD=132
options PCVT_NSCREENS=3
    

若要使用外国式键盘,你必须在开机时启动它;这也是修正终端机 的必要选项。例如:

/usr/local/bin/kcon -m i2
TERM=pcvt25;    export TERM
    

/etc/ttys 必须做适当的修改。 例如:

#console "/usr/libexec/getty Pc"   pcvt25  on secure
ttyv0    "/usr/libexec/getty Pc"   pcvt25  on secure
    

Pcvt 意大利式键盘: i2 键盘的定义并不正确而且 /sys/arch/i386/isa/pcvt/Util/keycap/keycap.src 也必须修改。有个在 NetBSD 1.3.3 测试过的设定。

  i2|italy142|Italian 142 mapping:\
	    :A8={:A9=[:A10=]:A11=}:\
	    :A12=`:A13=~:\
	    :A17=@:A18=#:\
	    :tc=italy141:
    

要设定使用外国式键盘(以意大利式键盘为例)必须在开机时被加载, 以 /etc/rc.local 为例:

KCONP=/usr/local/bin
SCONP=/usr/local/bin
LDFNP=/usr/local/bin
ISPCP=/usr/sbin
CURSP=/usr/local/bin

set_keybd=YES

#------------------------------------------------------
# if desired, setup keyboard for italian keyboard layout
#------------------------------------------------------

if [ X${set_keybd} = X"YES" -a -x $KCONP/kcon ]
then
  echo
  echo 'switching to italian keyboard layout'
  $KCONP/kcon -m i2
fi

echo '.'
    

/etc/ttys 必须被修改:

#console  "/usr/libexec/getty Pc" pcvt25  on secure
ttyv0   "/usr/libexec/getty Pc" pcvt25  on secure
ttyv1   "/usr/libexec/getty Pc" pcvt25  on secure
ttyv2   "/usr/libexec/getty Pc" pcvt25  on secure
    

pcvt 的工具程序必须被编译及安装。

cd /sys/arch/i386/isa/pcvt/Util
make
make install
    

12.3.1. 修改屏幕尺寸

使用 pcvt,你可以改变屏幕的行与列数。以下的 script 范例 可以被用来在两个不同的设定中,做切换的工作:

#!/bin/sh
# Set the screen to # lines
case $1 in
  25)
    /usr/local/bin/scon -s 25
    /usr/local/bin/cursor -s13 -e14
    ;;
  28)
    /usr/local/bin/loadfont -c1 -f
    /usr/share/misc/pcvtfonts/vt220l.814
    /usr/local/bin/loadfont -c2 -f
    /usr/share/misc/pcvtfonts/vt220h.814
    /usr/local/bin/scon -s 28
    /usr/local/bin/cursor -s12 -e14
    ;;
  40)
    /usr/local/bin/loadfont -c3 -f
    /usr/share/misc/pcvtfonts/vt220l.810
    /usr/local/bin/loadfont -c4 -f
    /usr/share/misc/pcvtfonts/vt220h.810
    /usr/local/bin/scon -s 40
    /usr/local/bin/cursor -s8 -e10
    ;;
  50)
    /usr/local/bin/loadfont -c5 -i
    /usr/share/misc/pcvtfonts/vt220l.808
    /usr/local/bin/loadfont -c6 -i
    /usr/share/misc/pcvtfonts/vt220h.808
    /usr/local/bin/scon -s 50
    /usr/local/bin/cursor -s6 -e8
    ;;
  *)
    echo "Invalid # of lines (25/28/40/50)"
    ;;
esac