top page > Klaviatur > here

PC との接続


ここは現在作成中です.

概要

対象は次のようなものです.

  1. キーボード,マウスは PC-98 専用 および AT 互換機 (PS/2 および USB)
  2. FreeBSD は 4 系以降

目的は次のようなものです.

  1. PC とキーボード,マウスの接続に関わる話題を提示する.

目次

1. power on から boot の終了まで
1.1 power on から BIOS の設定まで
1.2 FreeBSD の boot の開始から終了まで
1.3 device driver による検知
1.4 kbdmux
1.5 APM との関係
2. PC-98
3. AT 互換機
3.1 kbdmux off の場合
3.2 kbdmux on の場合
3.3 mouse の選択と moused
4. 資料

1. power on から boot の終了まで

1.1  power on から BIOS の設定まで

先ず PC の BIOS の設定を確認する,または変更する場合を考えます. 「BIOS 設定画面」に入る方法は PC ごとに異なります. たいていは,何かのキーを押しながら PC の電源を入れるか reboot する,または FreeBSD の boot が始まる前の BIOS による初期画面が映っている間に何かのキーを押すというような操作によります.

例えば,うちの PC では次のような操作をします.

  • PC-98 では,[Help] を押しながら電源を入れると「システムセットアップメニュー」または「98NOTEメニュー」になります.
  • Libretto では,[ESC] を押しながら電源を入れるか reboot します.
  • うちの自作 AT 互換機 (M/B は Supermicro 製) では,BIOS による初期画面の映っている間に [DEL] を押します.

要するに,この段階で K/B の然るべきキーが効かないと,「BIOS 設定画面」には入れません.

その後,もしも同じ HDD に複数の OS を install してある場合,boot manager がその選択を求めて来ます. その操作にも K/B が必要です. 例えば,

  • PC-98 の「固定ディスク起動メニュー」を使うには,カーソル・キーと [Enter] の入力が必要です.
  • AT 互換機 + boot0 (boot manager) の の場合,[F1], [F2] 等の入力が必要です.

この時点で問題なのは,接続された K/B の種類がどう扱われるのかと,USB K/B が効くか否かです. それらは BIOS によります. 例えば,

  • Libretto 単体の場合,本体の K/B は jp106 扱いです.
  • Libretto + USB K/B の場合,本体と USB の両方の K/B が効きます. どちらも jp106 扱いです.
  • うちの自作 AT 互換機 + PS/2 K/B の場合,us101 扱いです.
  • うちの自作 AT 互換機 + USB K/B の場合は確認していません.

すなわち,BIOS が扱っていない種類の K/B を接続している場合には要注意です.

1.2  FreeBSD の boot の開始から終了まで

FreeBSD の boot の過程において K/B が必要になるのは,FreeBSD の boot の開始直後のメニューにおいて,default 以外の選択をする場合です. (default ならばキーに触れる必要はないので.)

boot の前半においては,/etc/rc.conf による K/B の選択や諸設定は未だ効いていません. この段階で,接続された K/B の種類がどう扱われるのかと USB K/B が効くか否かは前節と同じです.

ただし,自作 AT 互換機 + USB K/B の場合,この時点では FreeBSD の古い version だと効きませんが,新しい version では効きます. 種類は us101 扱いです. (境目の version が何なのかは,記録していません. 5 系のどこかだと思うのですが.)

(補足) Libretto は FreeBSD の boot 終了後も USB driver なしで USB K/B が使えます. この場合,本体の K/B も同時に使えます. (正確には,PC の側からは本体の K/B と区別されていない状態です.) 個別に設定の変更等ができないなど使い甲斐がありませんし,特異な例だと考えますので,これ以上言及しません.

1.3  device driver による検知

FreeBSD を起動する際に出力される log のうち K/B と mouse の部分を見てみます.

PC-98 では,次のように出力されます.

mse0: <Bus/InPort Mouse> at port 0x7fdf,0x7fdd,0x7fdb,0x7fd9 irq 13 on isa0
pckbd0: <PC-98 Keyboard> at port 0x43,0x41 irq 1 on isa0
kbd0 at pckbd0

AT 互換機では,PS/2 K/B と PS/2 mouse とが接続された状態で起動すると,次のように出力されます.

atkbdc0: <Keyboard controller (i8042)> at port 0x60,0x64 on isa0
atkbd0: <AT Keyboard> flags 0x1 irq 1 on atkbdc0
kbd0 at atkbd0
psm0: <PS/2 Mouse> irq 12 on atkbdc0
psm0: model Generic PS/2 mouse, device ID 0

Happy Hacking Keyboard Lite2 (英語配列) を USB port に挿すと,それは次のように認識されます.

uhub1: Chicony Generic USB Hub, class 9/0, rev 1.10/1.00, addr 2
uhub1: 3 ports with 2 removable, bus powered
ukbd0: Chicony PFU-65 USB Keyboard, rev 1.10/1.00, addr 3, iclass 3/1
kbd1 at ukbd0

OS を起動する前から PS/2, USB の両方の K/B を挿しておいても,PS/2 の方が kbd0 になります. また,USB K/B のみを挿した場合,これが kbd0 になります.

これを抜くと,次のように表示されます.

uhub1: at uhub0 port 1 (addr 2) disconnected
ukbd0: at uhub1 port 1 (addr 3) disconnected
ukbd0: detached
uhub1: detached

参考までに,usbdevs を実行すると次のように出力されます.

# usbdevs -v
Controller /dev/usb0:
addr 1: full speed, self powered, config 1, OHCI root hub(0x0000), NEC(0x0000), rev 1.00
 port 1 addr 2: full speed, power 90 mA, config 1, Generic USB Hub(0x0065), Chicony(0x0472), rev 1.00
  port 1 addr 3: full speed, self powered, config 1, PFU-65 USB Keyboard(0x0065), Chicony(0x0472), rev 1.00

複数の K/B が接続されている場合,キーが効くのは USB の方が優先です. すなわち,

  • OS の起動前から PS/2, USB の両方の K/B を接続した場合,起動直後に効くのは USB の方である.
  • PS/2 K/B のみを接続して OS を起動し,その後に USB を挿した場合,効く K/B は PS/2 から USB へと自動的に切り換わる.

なお,USB K/B を抜くと,自動的に PS/2 K/B の方が効くようになります.

(補足) Libretto にて screen saver を使うと,それは USB K/B からでは解除できません. キーが効かない状態であっても本体の K/B を使って解除することになります.

1.4  kbdmux

FreeBSD 6 系以降は,複数の K/B を同時に使えるようにする kbdmux という機能があります. AT 互換機に対しては default は on です.

これを off にしたいならば,/boot/device.hints に次の行を加えます.

hint.kbdmux.0.disabled="1"

以下の解説では,kbdmux のない FreeBSD 6 系よりも前を「"kbdmux off"」と同じに扱います.

キーマップの書き換え等,自前の変更を行なう場合には,先ず "kbdmux off" にて試すのが無難と考えます.

(2020.3.12) ST180E + FreeBSD 11.3 にて "kbdmux off" にしたら,console の K/B が効かなくなりました.(X は試しておりません.) 一方,NP25S + FreeBSD 12.1 では console でも X でも問題は生じません.
  この状態になったら,別の PC から ssh で入って,device.hints を修正し,reboot するしかないです. それができない環境では,kbdmux の設定をいじらない方が良いでしょう.

1.5  APM との関係

USB の K/B, mouse を使用中に APM の suspend を行なうと,resume した際にそれらが効かなくなります. しかも,自動的に PS/2 の K/B, mouse に切り替わってくれるわけでもありません.

network 経由で

# kbdcontrol -k /dev/kbd0 < /dev/console

とすれば K/B は PS/2 側に切り替えることができます. しかし,USB K/B を使える状態に戻すには reboot するしかありません. (USB K/B の抜き挿しは試していません.)

なお,ACPI との関係は試していません. (うちの Note PC では ACPI ができないので.)

2. PC-98

うちの PC-98 には USB port がないので,複数の K/B の接続を試みることができません. AT 互換機用の USB K/B は,使えるような気はしますが,保証の限りではありません.

kbdmux は default で off ですが,その source を見る限り AT 互換機しか考慮されていないので,PC-98 用の K/B はうまく動作しないと想像します.

一方,PC-9821 La13 ですが,ポートバーを介して desk top の PC-98 用の K/B と Mouse を繋ぐことができます. この場合,それらと本体の K/B と 98スライドパッド (=mouse) の両方が同時に使えます. (正確には,「PC 本体が二つの K/B や mouse を区別していない状態」になります.) マニュアルには,これら外付けのデバイスと APM との関係に言及されていますが,suspend/resume して困ったことが起きた経験はありません.

K/B は「98NOTEメニュー」にて,どちらか一方を選択できます.

3. AT 互換機

3.1  kbdmux off の場合

キーボードの切り換えは,console にて行ないます.

PS/2 から USB (kbd1) へとキーボードを切り換えるには,次のようにします.

# kbdcontrol -k /dev/kbd1 < /dev/console
# kbdcontrol -l us.iso                    ← keymap を変える場合にはこのようにする.

USB から PS/2 (kbd0)に切り換えるには,次のようにします.

# kbdcontrol -k /dev/kbd0 < /dev/console
# kbdcontrol -l jp.106

X Window System も,ここで選択された方の K/B が使われます.

3.2  kbdmux on の場合

現時点では off でしか使ったことがありません. 今後試す機会があったらここに書きます.

X Window System は複数の K/B の接続をサポートしていますが,試したことはありません.

3.3  mouse の選択と moused

moused は,mouse の状態を console driver に送るものです. 私は console では mouse を使わないので,これが立ち上がらないようにしています. 先ず /etc/defaults/rc.conf ですが,OS の起動時に moused を立ち上げないように設定されています.

moused_enable="NO"

ただし,このままでは USB mouse を繋げた場合に (OS の起動前から繋がっていた場合も含む),moused が立ち上ります. それは /etc/rc.conf にて次のように指定して抑制することができます.

moused_nondefault_enable="NO"

USB mouse を X Window System にて使う場合には,xorg.conf を次のようにします. (関連部分のみ示す.)

Section "InputDevice"
   Identifier "Mouse1"
   Driver     "mouse"
   Option     "Protocol"   "auto"
   Option     "Device"     "/dev/ums0"
EndSection

参考までに,PS/2 mouse を使う場合には次のようにします. (関連部分のみ示す.)

   Option     "Protocol"   "PS/2"
   Option     "Device"     "/dev/psm0"

キーボードと異なり,PS/2 mouse と USB mouse とを切り換える機能はありません. その都度 console に戻り,xorg.conf を書き換え,X Server を再度立ち上げなければなりません. (まあ,キーボードを切り換える場合にも一度 console に戻るには違いありませんが.)

一方,moused を立ち上げる場合には次のようにします. USB mouse を使う場合,/etc/rc.conf に次のように記述します. 同時に moused に種々の option を与えます. (ここに示した option はあくまで一例です.)

moused_enable="YES"
moused_type="auto"
moused_port="/dev/ums0"
moused_flags="-3"
allscreens_flags="-m off"

PS/2 mouse を使う場合は,moused_port の部分を次のようにします. このようにしても,USB mouse が接続されていると moused はそれも認識してしまうので,そうならないように moused_nondefault_enable を off にします.

moused_nondefault_enable="NO"
moused_port="/dev/psm0"

以上のように選択した mouse を X Window System にて使う場合には,mouse の種類によらず xorg.conf を次のようにします. (関連部分のみ示す.)

   Option     "Protocol"   "auto"
   Option     "Device"     "/dev/sysmouse"

4. 資料

キーボードに関連する FreeBSD の driver 等のソースは次のところにあります.

FreeBSD 4 系,5 系 :

FreeBSD 6 系, 7 系, 8 系 :

mouse と moused に関しては,次のところに資料があります. (ソースは見ていません.)

% jman moused
% jman rc.conf      ← "moused" を探して下さい.