Chapter 13. コンソールドライバー

目次
13.1. wscons
13.2. pccons
13.3. pcvt

NetBSD は 1.4 以前のバージョンでは、キーボードとスクリーンドライバーに 2つのドライバーを選べました。 pccons ( i386 特有) と pcvt です。 バージョン 1.4 で 新しく wscons ドライバーがプラットホーム非依存のドライバーとしてでき、 以前の2つのドライバー(まだサポートされているけども)を 置き換えました。

13.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    

カーネルコンフィグファイルで、外国のキーボードを有効にできます。 たとえば、 italian キーボードを標準で使うには:

options     PCKBD_LAYOUT="KB_IT"    

註: italian キーボードの配列は、プログラムを作るというほどの事では ありません。 変更するには Chapter 4 を見てください。

あらかじめ割り当てられている仮想コンソール数は 次のオプションで制御されていて

options     WSDISPLAY_DEFAULTSCREENS=4    

ほかのコンソールも /etc/wscons.conf ファイルの関連行を有効にすることで追加でき: "screen x" で始まる行の コメントマーク (#) を外してください。 次の例ではすでにある4つのコンソールに、 5番目のコンソールを追加します:

# 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 スクリプトはコメント化されていない 各行について wsconscfg コマンド実行のための変換をし: 列の値はコマンドのパラメーターになります。 idx 列は index パラメーターで、 screen 列は -t type パラメーター (画面のタイプを定義し: 行数列数、色数、 ...) 、そして、 emul 列は -e emul パラメーターでエミュレーションの定義をします。 例えば:

screen 3       -       vt100    

は次の処理をします:

wsconscfg -e vt100 3    

註: カーネルによって あらかじめ割り当てられているコンソールと 起動時に /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
...    

/etc/ttys

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

行は、 X サーバーが空いているターミナルを見つけるのに使います。 4番ではない画面を使うには、 書式のパラメーター vtn は X サーバーに帰属する必要があります (n は X が画面を activate するのに使う ファンクションキーの番号)。

例えば、 /etc/wscons.conf で "screen 7" を有効にすることができ、 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 です。

13.1.1. wscons での 50 行テキストモード

NetBSD では、 1.4.1 以降 50行テキストモードが使えるようになりました。 このモードは /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      

この設定では、 8画面が有効で、 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      

スクリーン 0 で 80x25 を変更できないようにしているのは、 たぶん、何か問題があった場合でも、常にスクリーンが動作する 保証のためでしょう。

13.2. pccons

これは、 i386 インストールフロッピーに入っているコンソールドライバーです。 これは仮想コンソールも設定用のユーティリティープログラムも ありませんが、サイズが非常に小さいです。

13.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 italian キーボード: 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:    

外国のキーボードの設定 (たとえば italian キーボード) は起動時に読み込まれる必要があり、例えば、 /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    

13.3.1. 画面サイズの変更

pcvt では画面の行数と桁数を変更できます。 次のスクリプトの例では、 異なる設定の間で自動的に切り替えてくれます。:

#!/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