概要
対象は次のようなものです.
- AT 互換機 + PS/2 + キーボード,PS/2 マウス + USB キーボード,USB マウス
- FreeBSD/i386 8.3 + X.Org 7.5 + xf86-input-mouse-1.6.0
概要
対象は次のようなものです.
目的は次のようなものです.
目次
moused
, hald
の挙動ここでは X.Org on AT (1), X.Org on AT (2) と同じ検討を,複数のキーボードやマウス (PS/2, USB) を挿した場合に対して行ないます. 差異は以下の通り.
なお,キーボードもマウスも,電源を入れる前に PC に接続しています.
マウスの動作は単独で用いた場合と同様でした. したがって,hald や moused の挙動を中心に述べることにします.
PS/2 と USB の両方のマウスを挿す場合,moused の複雑かつ一見奇妙な挙動を正確に把握しておく必要があります.
moused の default のパラメーターは /etc/defaults/rc.conf にて次のように指定されています.
moused_nondefault_enable="YES" # Treat non-default mice as enabled unless # specifically overriden in rc.conf(5). moused_enable="NO" # Run the mouse daemon. moused_type="auto" moused_port="/dev/psm0" moused_flags="" mousechar_start="NO"
これを変更するには,/etc/rc.conf にて,次のように設定します. ここに例示した三つのパラメーターは,接続された複数のマウスをどう取り扱うかを決めるためのものです.
moused_nondefault_enable="NO" moused_enable="YES" moused_port="/dev/ums0"
以下,(1) PS/2 マウス単独,(2) USB マウス単独,(3) PS/2 + USB の三通りに関して,これらのパラメーターと moused や hald の挙動との関係を調べます.
先ず,表の各々の項目について説明します.
以下に lshal の出力例を示す.
udi = '/org/freedesktop/Hal/devices/psm_0' freebsd.device_file = '/dev/psm0' (string) (中略) input.device = '/dev/psm0' (string)
udi = '/org/freedesktop/Hal/devices/usb_device_45e_40_noserial_if0' freebsd.device_file = '/dev/ums0' (string) (中略) input.device = '/dev/ums0' (string)
(1) PS/2 マウス単独の場合.
case | moused | default | port | boot | daemon | cursol | file | device | 備考 |
---|---|---|---|---|---|---|---|---|---|
a1 | NO | YES | psm0 | なし | 0 | なし | psm0 | psm0 | |
a2 | NO | NO | psm0 | なし | 0 | なし | psm0 | psm0 | |
a3 | NO | YES | ums0 | なし | 0 | なし | psm0 | psm0 | port 変更の効果はない. |
a4 | YES | YES | psm0 | default | 1 | PS/2 | psm0 | sysmouse | |
a5 | YES | NO | psm0 | default | 1 | PS/2 | psm0 | sysmouse | default 変更の効果はない. |
a6 | YES | YES | ums0 | default | 1 → 0 | なし | psm0 | psm0 | moused は起動して終了する. |
(2) USB マウス単独の場合.
case | moused | default | port | boot | daemon | cursol | file | device | 備考 |
---|---|---|---|---|---|---|---|---|---|
b1 | NO | YES | psm0 | ums0 | 1 | USB | ums0 | sysmouse | |
b2 | NO | NO | psm0 | なし | 0 | なし | ums0 | ums0 | |
b3 | NO | YES | ums0 | ums0 | 1 | USB | ums0 | sysmouse | port 変更の効果はない. |
b4 | YES | YES | psm0 | ums0 | 1 | USB | ums0 | sysmouse | |
b5 | YES | NO | psm0 | default | 1 → 0 | なし | ums0 | ums0 | unable to open /dev/psm0 |
b6 | YES | YES | ums0 | ums0 | 1 | USB | ums0 | sysmouse | |
b7 | YES | NO | ums0 | default | 1 | USB | ums0 | sysmouse |
(3) PS/2 + USB マウスの場合.
case | moused | default | port | boot | daemon | cursol | file | device | 備考 |
---|---|---|---|---|---|---|---|---|---|
c1 | NO | YES | psm0 | ums0 | 1 | USB |
psm0 ums0 | psm0 sysmouse | |
c2 | NO | NO | psm0 | なし | 0 | なし | psm0 ums0 | psm0 ums0 | |
c3 | NO | YES | ums0 | ums0 | 1 | USB |
psm0 ums0 | psm0 sysmouse |
port 変更の効果はない. |
c4 | YES | YES | psm0 | ums0 default | 2 | PS/2 USB |
psm0 ums0 | sysmouse sysmouse |
sysmouse が重複しているが, 動作に問題はない |
c5 | YES | NO | psm0 | default | 1 | PS/2 |
psm0 ums0 | sysmouse ums0 | |
c6 | YES | YES | ums0 | ums0 | 1 | USB |
psm0 ums0 | psm0 sysmouse |
port 変更の効果がある. |
c7 | YES | NO | ums0 | default | 1 | USB |
psm0 ums0 | psm0 sysmouse |
以上の結果から分かるように,USB マウス専用のパラメーター moused_nondefault_enable が存在することにより,PS/2 と USB とは moused の挙動に関して「対称性」がありません. 特に,default の場合,PS/2 だけ (一般的には USB 以外のマウスだけ) ならば moused は起動しないのに,USB が挿さっていると moused が起動する点がややこしいです.
X Window System においては,上記のすべての場合において hald による自動設定 (上記の表の "device") に任せれば,正常に動作します.
目的が動作の試験であるような場合を除けば選択肢は次のようになり,目的と都合と好みに応じて選べば良いでしょう.
(1) PS/2 マウス単独の場合,a1 or a4 から選ぶ.
(2) USB マウス単独の場合,b1 or b2 から選ぶ.
(3) PS/2 + USB マウスの場合,c1 or c2 or c5 (or c4?) から選ぶ.
(注) xf86-input-mouse が 1.6.0 から 1.7.1 へと更新されましたが,これを xorg-server-1.7.7 と共に用いると,マウスの情報が hald から X server に渡されずに動作に不具合が生じます.
→ [FreeBSD-users-jp 94008],[94009],[94017] を御覧下さい.
[FreeBSD-users-jp 94010] に下保さんによる xf86-input-mouse-1.7.1 の patch (動作検証中) が提示されています.
→ この問題は少なくとも FreeBSD 8.4-RELESE に対応する ports においては解決されております.
(ちなみに,xorg-server-1.7.7, xf86-input-mouse-1.7.1 の構成はそのままです.)
ここでは取り扱いませんが,パラメーターを mouse-sysmouse.fdi にて設定する場合には,device の部分を間違えないように注意が必要です. 例えば b1 の場合において device として /dev/ums0 を与えると以下のようにエラーになります.
(EE) xf86OpenSerial: Cannot open device /dev/ums0
Device busy.
この場合には当然,/dev/ums0 でなく /dev/sysmouse を使う必要があります.
c1 の場合には,X Window System の log には次のように出力されます. USB マウスの部分は,
(**) Microsoft 3-Button Mouse with IntelliEyeTM: Device: "/dev/sysmouse" (==) Microsoft 3-Button Mouse with IntelliEyeTM: Protocol: "Auto" (**) Microsoft 3-Button Mouse with IntelliEyeTM: always reports core events (**) Option "Device" "/dev/sysmouse" (==) Microsoft 3-Button Mouse with IntelliEyeTM: Emulate3Buttons, Emulate3Timeout: 50 (**) Microsoft 3-Button Mouse with IntelliEyeTM: ZAxisMapping: buttons 4 and 5 (**) Microsoft 3-Button Mouse with IntelliEyeTM: Buttons: 9 (**) Microsoft 3-Button Mouse with IntelliEyeTM: Sensitivity: 1 (II) XINPUT: Adding extended input device "Microsoft 3-Button Mouse with IntelliEyeTM" (type: MOUSE) (**) Microsoft 3-Button Mouse with IntelliEyeTM: (accel) keeping acceleration scheme 1 (**) Microsoft 3-Button Mouse with IntelliEyeTM: (accel) acceleration profile 0 (II) Microsoft 3-Button Mouse with IntelliEyeTM: SetupAuto: hw.iftype is 4, hw.model is 0 (II) Microsoft 3-Button Mouse with IntelliEyeTM: SetupAuto: protocol is SysMouse
また PS/2 マウスの部分は,
(II) config/hal: Adding input device PS/2 Mouse (**) PS/2 Mouse: Device: "/dev/psm0" (==) PS/2 Mouse: Protocol: "Auto" (**) PS/2 Mouse: always reports core events (**) Option "Device" "/dev/psm0" (==) 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) acceleration profile 0 (II) PS/2 Mouse: SetupAuto: hw.iftype is 3, hw.model is 4 (II) PS/2 Mouse: SetupAuto: protocol is IMPS/2 (II) PS/2 Mouse: ps2EnableDataReporting: succeeded
一方,c4 の場合には USB マウスのデータがなく,また PS/2 マウスの psm0 が sysmouse に変わります.
(**) PS/2 Mouse: Device: "/dev/sysmouse" (中略) (**) Option "Device" "/dev/sysmouse"
複数個の接続の場合に,設定に xorg.conf を使う場合は未検討.
設定に hald と mouse-sysmouse.fdi を使う場合,後者で指示できるのは「使用するマウス」でなく「そのマウスの device」なのか?
なお,USB デバイスに関しては Hot Plug (活線挿抜) や suspend/resume の際の挙動も見ておく必要がありますが,今回は追求しません.
別の種類のマウス (Bus Mouse etc.) も追求しません.
% man moused % man rc.conf % more /etc/rc.d/moused
未検討です.
マウスの話が予想以上に長くなってしまったので,この先ページを分けるかもしれません.