top page > X Window System > here

AT 互換機における X.Org 7 系 (PS/2)


概要

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

  1. AT 互換機 + PS/2 キーボード,PS/2 マウス
  2. FreeBSD/i386 7.2 + X.Org 7.4 および FreeBSD/i386 8.1 + X.Org 7.5

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

  1. X.Org 7.4, 7.5 における HAL の動作の情報を提示する.
  2. AT 互換機における X.Org 7.4, 7.5 の動作状況を提示する.
    (PC-98 で生じたようなトラブルの有無を点検します.)

(注) xf86-input-mouse が 1.6.0 から 1.7.1 へと更新されましたが,動作に不具合が生じています.
  X.Org 7 on AT (3) 2.2 節 の (注) を御覧下さい.


目次

1. 概要
2. HAL に関する選択肢
3. 設定 (1) について
4. 設定 (2) について
5. 設定 (3) について
6. Key Binding について
7. その他

1. 概要

ここは X.Org 7 on PC-98 (1) の前半,すなわち HAL に関する部分を AT 互換機に即して書き直したものです. Window Manager の Key Binding に関しては,そちらも参考になるかもしれません.

ここで検討を行なう対象は以下の通りです.

また,試験の状態は以下の通りです.

動作を点検する項目は以下の通りです.

[1] 後で示すように,X の log ではキーボードは "AT Keyboard" と出力されます. (マウスは "PS/2 Mouse" です.) FreeBSD の device driver でも同様です. 一方,これを "PS/2 Keyboard" としている資料もあります. このように,このキーボードの呼称に戸惑うのですが,ここでは「PS/2 キーボード」と呼ぶことにします.
  今後,正式名称が判明したら反映させます.

HAL を使うためには (その daemon を起動するためには),/etc/rc.conf に以下の 2 行を加えます.
(この順序も重要らしいです.)

dbus_enable="YES"    ← これは HAL ではなく,それに使われているものです.
hald_enable="YES"

x11-input.fdi, mouse-sysmouse.fdi の内容を変更した場合,それを反映させるためには hald を再起動させる必要があります. そのためには,OS を reboot するか,または以下のようにします.

# /usr/local/etc/rc.d/hald restart

また,lshal を用いれば HAL 関連の設定がどのようになっているのかを確認することができます.

% lshal

2. HAL に関する選択肢

HAL に関しては,先ず以下の二つの選択をしなければなりません.

  1. HAL を利用するか否か.(X.Org の default は「利用を試みる」)
  2. xorg.conf に記述されたキーボードやマウスの設定も使うか否か.(X.Org の default は「使わない」)

HAL を利用しない場合には,キーボードやマウスの設定は xorg.conf にて行なうしかないので,選択肢は三通りになります.

各々の場合の選択は,xorg.conf に次のように記して行ないます.
(# 以後はコメントなので,記述する必要はありません. それと True, False は各々 on, off でもかまいません. また,これらの OptionServerLayout section に書いてもかまいません.)

(1) HAL の利用を試みる + キーボード,マウスの設定に xorg.conf を使わない (default)

Section "ServerFlags"
#  Option   "AutoAddDevices"    "True"  ← default が True である.
#  Option   "AutoEnableDevices" "True"  ← default が True である.
#  Option   "AllowEmptyInput"   "True"  ← 上の設定により,ここは自動的に True になる.
EndSection

(2) HAL の利用を試みる + キーボード,マウスの設定に xorg.conf を使う

Section "ServerFlags"
#  Option   "AutoAddDevices"    "True"  ← default が True である.
#  Option   "AutoEnableDevices" "True"  ← default が True である.
   Option   "AllowEmptyInput"   "False"
EndSection

(3) HAL を利用しない

Section "ServerFlags"
   Option   "AutoAddDevices"    "False"
   Option   "AutoEnableDevices" "False"
#  Option   "AllowEmptyInput"   "False" ← 上の設定により,ここは自動的に False になる.
EndSection

以後,これらを「設定 (1), (2), (3)」と呼称することにします.

種々の参考資料に示された例はどの場合に相当するのかを判別し,また自分がどの場合に設定しようとしているのかを意識しておかないと,試行錯誤や質問の過程で無用の混乱に陥る可能性があります.

説明が多少重複しますが,以下に間違えやすいと思われる点を列挙します.

これらの設定と hald の起動状態とを合わせて,6 通りの組み合わせがあります. (薄い青色で示したナンセンスなものを除けば 4 通り.) 下表に,各々の動作の状態を要約します.

hald 設定 (1) 設定 (2) 設定 (3)
on 問題なく動作する キーボードの動作が鈍い 問題なく動作する
off 動作しない キーボードの動作が鈍い 問題なく動作する

要は,設定 (2) のように AllowEmptyInput に設定された default の一貫性を損ねるような変更はしないで,素直に

から選ぶのが正解なのではないか,ということです. (あくまで,今回試験した対象や環境に限定した結論ですが.)

設定 (3) は,man xorg.conf 以外の参考資料に基づいているわけではありません. 試行の過程で思い付いた組み合わせの一つに過ぎません. 検索すると,むしろ設定 (2) を見かけることが多いのですが,うちでの試行の結果を見る限りでは,その正当性に疑問を感じます.

(補足) PC によっては hald が正常に動作しない場合もあるようです. そのような PC では,設定 (2) にするとマウスを動かすまでキー入力が反映されないなど,致命的な問題が生じるそうです.

以下の節にて,各々の設定について詳しく検討します. 応答速度にも違いが生じているため,log の引用が冗長にならざるを得ませんでした. (応答速度の差異は log に現われません. だからこそ,どこかおかしいと思えるのです.)

3. 設定 (1) について

hald は起動しているものとします.
(起動していない場合,画面の表示まではされますが,キーもマウスも効きません.)

この場合には,xorg.conf にキーボードやマウスの設定を記述しても無視されるので,以下の記述でこと足ります.

Section "InputDevice"
   Identifier "Keyboard1"
   Driver     "kbd"
EndSection

Section "InputDevice"
   Identifier "Mouse1"
   Driver     "mouse"
EndSection

キーボードの設定は /usr/local/etc/hal/fdi/policy/x11-input.fdi を作成してそこに記述します.
(このファイルがない場合,HAL は接続されているキーボードを検知して,自動的に設定を行ないます. それに不満がある場合には,このファイルを作成して明示的に設定します.)

<?xml version="1.0" encoding="ISO-8859-1"?>
<deviceinfo version="0.2">
  <device>
    <match key="info.capabilities" contains="input.keyboard">
      <merge key="input.x11_options.XkbRules" type="string">xorg</merge>
      <merge key="input.x11_options.XkbModel" type="string">jp106</merge>
      <merge key="input.x11_options.XkbLayout" type="string">jp</merge>
    </match>
  </device>
</deviceinfo>

マウスの設定は /usr/local/etc/hal/fdi/policy/mouse-sysmouse.fdi を作成してそこに記述します.
(このファイルがない場合,HAL は接続されているマウスや moused の動作を検知して,各々の状況に応じた設定を自動的に行ないます. それに不満がある場合には,このファイルを作成して明示的に設定します.)

<?xml version="1.0" encoding="ISO-8859-1"?>
<deviceinfo version="0.2">
  <device>
    <match key="info.capabilities" contains="input.mouse">
      <merge key="input.x11_options.Protocol" type="string">Auto</merge>
      <merge key="input.x11_options.Device" type="string">/dev/psm0</merge>
      <merge key="input.x11_options.Emulate3Buttons" type="string"></merge>
    </match>
  </device>
</deviceinfo>

X Window System の log には次のように出力されます.

(**) |-->Input Device "Mouse1"
(**) |-->Input Device "Keyboard1"
(==) Automatically adding devices
(==) Automatically enabling devices
(中略)
(WW) AllowEmptyInput is on, devices using drivers 'kbd', 'mouse' or 'vmmouse' will be disabled.
(WW) Disabling Mouse1
(WW) Disabling Keyboard1
(中略)  hald が起動していない場合,以下の出力はされません.
(II) config/hal: Adding input device AT Keyboard
(II) Loading /usr/local/lib/xorg/modules/input//kbd_drv.so
(II) Module kbd: vendor="X.Org Foundation"
        compiled for 1.6.0, module version = 1.3.2
(**) AT Keyboard: always reports core events
(**) AT Keyboard: Protocol: standard
(**) AT Keyboard: XkbRules: "xorg"
(**) AT Keyboard: XkbModel: "jp106"
(**) AT Keyboard: XkbLayout: "jp"
(**) AT Keyboard: CustomKeycodes disabled
(II) XINPUT: Adding extended input device "AT Keyboard" (type: KEYBOARD)
(II) config/hal: Adding input device PS/2 Mouse
(II) Loading /usr/local/lib/xorg/modules/input//mouse_drv.so
(II) Module mouse: vendor="X.Org Foundation"
        compiled for 1.6.0, module version = 1.4.0
(**) PS/2 Mouse: Device: "/dev/psm0"
(**) PS/2 Mouse: Protocol: "Auto"
(**) PS/2 Mouse: always reports core events
(==) PS/2 Mouse: Emulate3Buttons, Emulate3Timeout: 50
(**) PS/2 Mouse: ZAxisMapping: buttons 4 and 5
(**) PS/2 Mouse: Buttons: 9
(**) PS/2 Mouse: Sensitivity: 1
(II) XINPUT: Adding extended input device "PS/2 Mouse" (type: MOUSE)
(**) PS/2 Mouse: (accel) keeping acceleration scheme 1
(**) PS/2 Mouse: (accel) filter chain progression: 2.00
(**) PS/2 Mouse: (accel) filter stage 0: 20.00 ms
(**) PS/2 Mouse: (accel) set acceleration profile 0
(II) PS/2 Mouse: ps2EnableDataReporting: succeeded

4. 設定 (2) について

キーボードとマウスに関する設定は xorg.conf に記述します.

Section "InputDevice"
   Identifier "Keyboard1"
   Driver     "kbd"
   Option     "XkbRules"   "xorg"
   Option     "XkbModel"   "jp106"
   Option     "XkbLayout"  "jp"
EndSection

Section "InputDevice"
   Identifier "Mouse1"
   Driver     "mouse"
   Option     "Protocol"   "Auto"
   Option     "Device"     "/dev/psm0"
   Option     "Emulate3Buttons"
EndSection

hald が起動している場合,X Window System の log には次のように出力されます.

(==) Automatically adding devices
(==) Automatically enabling devices
(中略)
(**) Mouse1: Device: "/dev/psm0"
(**) Mouse1: Protocol: "auto"
(**) Mouse1: always reports core events
(**) Mouse1: Emulate3Buttons, Emulate3Timeout: 50
(**) Mouse1: ZAxisMapping: buttons 4 and 5
(**) Mouse1: Buttons: 9
(**) Mouse1: Sensitivity: 1
(II) XINPUT: Adding extended input device "Mouse1" (type: MOUSE)
(**) Mouse1: (accel) keeping acceleration scheme 1
(**) Mouse1: (accel) filter chain progression: 2.00
(**) Mouse1: (accel) filter stage 0: 20.00 ms
(**) Mouse1: (accel) set acceleration profile 0
(II) Mouse1: ps2EnableDataReporting: succeeded
(**) Keyboard1: always reports core events
(**) Keyboard1: Protocol: Standard
(**) Keyboard1: XkbRules: "xorg"
(**) Keyboard1: XkbModel: "jp106"
(**) Keyboard1: XkbLayout: "jp"
(**) Keyboard1: CustomKeycodes disabled
(II) XINPUT: Adding extended input device "Keyboard1" (type: KEYBOARD)
(II) config/hal: Adding input device PS/2 Mouse  ← ここからが HAL によるマウスとキーボードの設定
(**) PS/2 Mouse: Device: "/dev/psm0"
(**) PS/2 Mouse: Protocol: "Auto"
(**) PS/2 Mouse: always reports core events
(EE) xf86OpenSerial: Cannot open device /dev/psm0
        Device busy.
(EE) PS/2 Mouse: cannot open input device
(EE) PreInit failed for input device "PS/2 Mouse"
(EE) config/hal: NewInputDeviceRequest failed (8)
(II) config/hal: Adding input device AT Keyboard
(**) AT Keyboard: always reports core events
(**) AT Keyboard: Protocol: standard
(**) AT Keyboard: XkbRules: "xorg"
(**) AT Keyboard: XkbModel: "jp106"
(**) AT Keyboard: XkbLayout: "jp"
(**) AT Keyboard: CustomKeycodes disabled
(II) XINPUT: Adding extended input device "AT Keyboard" (type: KEYBOARD)

このように,マウスとキーボードは 2 回設定されます. これは前節の設定 (1) と次節の設定 (3) を両方やった状態です. エラー・メッセージも出ています. キーボードは,機能こそ正常ですが,応答が鈍いです. この組合わせは NG でしょう.

なお,この状態で /usr/local/etc/hal/fdi/policy/x11-input.fdi, mouse-sysmouse.fdi を置かないようにしても,HAL はこれらを default の設定にしようとするだけで,重複設定が止まるわけではありません. 逆に,次のようにちぐはぐになるだけです.

(**) Keyboard1: XkbModel: "jp106"      ← xorg.conf による
(**) Keyboard1: XkbLayout: "jp"
(中略)
(**) AT Keyboard: XkbModel: "pc105"    ← HAL の default による
(**) AT Keyboard: XkbLayout: "us"

hald が起動していない場合には,次のように出力されます.

(**) Mouse1: Device: "/dev/psm0"
(**) Mouse1: Protocol: "auto"
(**) Mouse1: always reports core events
(**) Mouse1: Emulate3Buttons, Emulate3Timeout: 50
(**) Mouse1: ZAxisMapping: buttons 4 and 5
(**) Mouse1: Buttons: 9
(**) Mouse1: Sensitivity: 1
(II) XINPUT: Adding extended input device "Mouse1" (type: MOUSE)
(**) Mouse1: (accel) keeping acceleration scheme 1
(**) Mouse1: (accel) filter chain progression: 2.00
(**) Mouse1: (accel) filter stage 0: 20.00 ms
(**) Mouse1: (accel) set acceleration profile 0
(II) Mouse1: ps2EnableDataReporting: succeeded
(**) Keyboard1: always reports core events
(**) Keyboard1: Protocol: Standard
(**) Keyboard1: XkbRules: "xorg"
(**) Keyboard1: XkbModel: "jp106"
(**) Keyboard1: XkbLayout: "jp"
(**) Keyboard1: CustomKeycodes disabled
(II) XINPUT: Adding extended input device "Keyboard1" (type: KEYBOARD)

log を見る限りは問題なさそうなのですが,キーボードの動作が鈍いです.

5. 設定 (3) について

hald が起動していない場合には,X Window System の log には次のように出力されます.
「(中略)」より下は「hald off + 設定 (2)」の log と同じです.

(**) Not automatically adding devices
(**) Not automatically enabling devices
(中略)
(**) Mouse1: Device: "/dev/psm0"
(**) Mouse1: Protocol: "auto"
(**) Mouse1: always reports core events
(**) Mouse1: Emulate3Buttons, Emulate3Timeout: 50
(**) Mouse1: ZAxisMapping: buttons 4 and 5
(**) Mouse1: Buttons: 9
(**) Mouse1: Sensitivity: 1
(II) XINPUT: Adding extended input device "Mouse1" (type: MOUSE)
(**) Mouse1: (accel) keeping acceleration scheme 1
(**) Mouse1: (accel) filter chain progression: 2.00
(**) Mouse1: (accel) filter stage 0: 20.00 ms
(**) Mouse1: (accel) set acceleration profile 0
(II) Mouse1: ps2EnableDataReporting: succeeded
(**) Keyboard1: always reports core events
(**) Keyboard1: Protocol: standard
(**) Keyboard1: XkbRules: "xorg"
(**) Keyboard1: XkbModel: "jp106"
(**) Keyboard1: XkbLayout: "jp"
(**) Keyboard1: CustomKeycodes disabled
(II) XINPUT: Adding extended input device "Keyboard1" (type: KEYBOARD)

hald が起動している場合,この後に次のように続きますが,動作に問題は生じておりません.
(HAL からは Add しない指定なのにこのメッセージは奇妙ですが,「hald on + 設定 (2)」よりは改善されています.)

(II) config/hal: Adding input device PS/2 Mouse
(EE) config/hal: NewInputDeviceRequest failed (8)
(II) config/hal: Adding input device AT Keyboard
(EE) config/hal: NewInputDeviceRequest failed (8)

6. Key Binding

X.Org on PC-98 (2) に記したように,PC-98 では mwm (Motif Window Manager) の Key Binding に関して問題が生じました. AT 互換機 + jp106 の組み合わせで同じ問題が生じるか否かを確認するため,pc105 にないキーである <AE13> (backslash) を利用した Key Binding を設定してみました. すなわち,~/.mwmrc を次のように修正します.

Keys DefaultKeyBindings
{
        Shift<Key>Escape        window|icon             f.post_wmenu
        Alt<Key>backslash       window|icon             f.post_wmenu  ← この行を追加する

これで Alt + backslashShift + Escape と同じ動作をしたので,PC-98 と同じ問題は起きていないようです.
(試したのは PC-98 と同じ hald off + 設定 (2),(3) のみです.)

X.Org 7 系になってから,様々な Window Manager にて Key Binding が正しく機能していないという情報が多々あり,うちでも試してみましたが,結局 AT 互換機の方では問題は生じませんでした.

7. その他

/usr/ports/x11-servers/xorg-server にて make を試みると,HAL に関して

 [X] HAL     "Compile with HAL config support"

という選択肢があります. default は当然 on ですが,機会があれば off にして試してみたいです.

(補足) HAL は,X.Org 7.6 (xorg-server-1.8.0) では「推奨せず」(not recommended) になりました. そして,X.Org 7.8 までには廃止される予定です.