概要
対象は次のようなものです.
- キーボード,マウスは PC-98 専用 および AT 互換機 (PS/2 および USB)
- FreeBSD は 4 系以降
ここは現在作成中です.
概要
対象は次のようなものです.
目的は次のようなものです.
目次
kbdmux
kbdmux
off の場合kbdmux
on の場合moused
先ず PC の BIOS の設定を確認する,または変更する場合を考えます. 「BIOS 設定画面」に入る方法は PC ごとに異なります. たいていは,何かのキーを押しながら PC の電源を入れるか reboot する,または FreeBSD の boot が始まる前の BIOS による初期画面が映っている間に何かのキーを押すというような操作によります.
例えば,うちの PC では次のような操作をします.
要するに,この段階で K/B の然るべきキーが効かないと,「BIOS 設定画面」には入れません.
その後,もしも同じ HDD に複数の OS を install してある場合,boot manager がその選択を求めて来ます. その操作にも K/B が必要です. 例えば,
この時点で問題なのは,接続された K/B の種類がどう扱われるのかと,USB K/B が効くか否かです. それらは BIOS によります. 例えば,
すなわち,BIOS が扱っていない種類の K/B を接続している場合には要注意です.
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 と区別されていない状態です.) 個別に設定の変更等ができないなど使い甲斐がありませんし,特異な例だと考えますので,これ以上言及しません.
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 の方が優先です. すなわち,
なお,USB K/B を抜くと,自動的に PS/2 K/B の方が効くようになります.
(補足) Libretto にて screen saver を使うと,それは USB K/B からでは解除できません. キーが効かない状態であっても本体の K/B を使って解除することになります.
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 の設定をいじらない方が良いでしょう.
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 ができないので.)
うちの 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メニュー」にて,どちらか一方を選択できます.
キーボードの切り換えは,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 が使われます.
現時点では off でしか使ったことがありません. 今後試す機会があったらここに書きます.
X Window System は複数の K/B の接続をサポートしていますが,試したことはありません.
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"
キーボードに関連する FreeBSD の driver 等のソースは次のところにあります.
FreeBSD 4 系,5 系 :
FreeBSD 6 系, 7 系, 8 系 :
mouse と moused に関しては,次のところに資料があります. (ソースは見ていません.)
% jman moused % jman rc.conf ← "moused" を探して下さい.