top page > X Window System > here

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


概要

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

  1. AT 互換機 + PS/2 + キーボード,PS/2 マウス + USB キーボード,USB マウス
  2. FreeBSD/i386 8.3 + X.Org 7.5 + xf86-input-mouse-1.6.0

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

  1. X.Org 7.5 において,複数のキーボードやマウス (PS/2, USB) を挿した場合の動作の情報を提示する.
  2. AT 互換機における X.Org 7.5 の動作状況を提示する.

目次

1. 概要
2. 複数のマウスの接続
2.1 moused, hald の挙動
2.2 X における動作
2.3 残課題
2.4 参考資料
3. 複数のキーボードの接続

1. 概要

ここでは X.Org on AT (1), X.Org on AT (2) と同じ検討を,複数のキーボードやマウス (PS/2, USB) を挿した場合に対して行ないます. 差異は以下の通り.

なお,キーボードもマウスも,電源を入れる前に PC に接続しています.

2. 複数のマウスの接続

マウスの動作は単独で用いた場合と同様でした. したがって,haldmoused の挙動を中心に述べることにします.

2.1  moused, hald の挙動

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 の三通りに関して,これらのパラメーターと mousedhald の挙動との関係を調べます.

先ず,表の各々の項目について説明します.

  • case
    場合分けのための番号付け. 数字が同じならば,以下の三つのパラメーターは同じです. これらのパラメーターの選択肢は各々二つあります. それゆえ 8 通りの組み合わせが可能なのですが,意味のないものは省きました.
    単独のマウス (a, b) では意味のないようなパラメーターの組み合わせも,複数のマウス (c) と対比させる目的で行なっております.
  • moused (moused_enable)
    USB も含めたすべてのマウスに対するパラメーターです. default の NO ならば,moused を起動しません. YES にすれば起動します.
  • default (moused_nondefault_enable)
    USB マウス専用のパラメーターです. default の YES ならば,USB マウスが挿さっていれば moused を起動します. (moused_enable="NO" であってもです.) NO にすれば,それが抑制されます.
    moused_enablemoused_nondefault_enable とは,同一の USB マウスを二重に認識しないなどの融通は効いていますが,動作は独立です.
  • port (moused_port="/dev/****"*** の部分.)
    moused_enable 専用のパラメーター.
    以上の三つのパラメーターは,default から変えた場合には赤字で示します.
  • boot
    OS の boot 時に,moused が起動した際に現われるメッセージ Starting *** moused. のうち *** の部分.
    defaultmoused_enable に関連したもの,ums0moused_nondefault_enable に関連したものである.
    これは dmesg の出力には現われない. 画面が行き過ぎてしまったら,[Scr Lk] キーを押せば上向きのカーソル・キーにより逆スクロールができる. もう一度 [Scr Lk] キーを押せば元の状態に戻る.
    複数ある場合は,moused が複数起動したということ. 画面には連続して現われないので,探す場合には要注意である.
  • daemon
    moused がいくつ起動しているか.
  • cursol
    console に現われる矢印型のマウス・カーソルがどのマウスの操作に反応するか. 両方に反応する場合もある.
  • file
    lshal の出力の中の freebsd.device_file = '/dev/*****' の内容. (psm0, ums0 のいずれかで,dmesg で得られる情報です.)
  • device
    それに対応する input.device = '/dev/****' の内容. (psm0, ums0, sysmouse のいずれか.)
    hald は,各々の場合に対して X server に渡すパラメーター Option "Device" "/dev/****" をここに示したように決めている. xorg.confmouse-sysmouse.fdi を用いて指定する場合にも,これに一致していなければならない.

以下に 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 備考
a1NOYESpsm0 なし0なしpsm0psm0
a2NONOpsm0 なし0なしpsm0psm0
a3NOYESums0 なし0なしpsm0psm0 port 変更の効果はない.
a4YESYESpsm0 default1PS/2psm0sysmouse
a5YESNOpsm0 default1PS/2psm0sysmouse default 変更の効果はない.
a6YESYESums0 default1 → 0なしpsm0psm0 moused は起動して終了する.

(2) USB マウス単独の場合.

case moused default port boot daemon cursol file device 備考
b1NOYESpsm0 ums01USBums0sysmouse
b2NONOpsm0 なし0なしums0ums0
b3NOYESums0 ums01USBums0sysmouse port 変更の効果はない.
b4YESYESpsm0 ums01USBums0sysmouse
b5YESNOpsm0 default1 → 0なしums0ums0unable to open /dev/psm0
b6YESYESums0 ums01USBums0sysmouse
b7YESNOums0 default1USBums0sysmouse

(3) PS/2 + USB マウスの場合.

case moused default port boot daemon cursol file device 備考
c1NOYESpsm0 ums01
USB
psm0
ums0
psm0
sysmouse
c2NONOpsm0 なし0なし psm0
ums0
psm0
ums0
c3NOYESums0 ums01
USB
psm0
ums0
psm0
sysmouse
port 変更の効果はない.
c4YESYESpsm0 ums0
default
2PS/2
USB
psm0
ums0
sysmouse
sysmouse
sysmouse が重複しているが,
動作に問題はない
c5YESNOpsm0 default1PS/2
 
psm0
ums0
sysmouse
ums0
c6YESYESums0 ums01
USB
psm0
ums0
psm0
sysmouse
port 変更の効果がある.
c7YESNOums0 default1
USB
psm0
ums0
psm0
sysmouse
  • ?3, ?6 は,moused_portmoused_enable 専用のパラメーターであることを確認するためのものです. ?3 はすべて ?1 と同じ結果になります.
  • a6 と a4,c6 と c4 には差が出ています. b6 と b4 に差が出ないのは,どちらも moused_nondefault_enable により起動される moused が先行し,それらに差がないためです.
  • a5 は,moused_nondefault_enable が PS/2 には効かないことを確認するためのものです.

以上の結果から分かるように,USB マウス専用のパラメーター moused_nondefault_enable が存在することにより,PS/2 と USB とは moused の挙動に関して「対称性」がありません. 特に,default の場合,PS/2 だけ (一般的には USB 以外のマウスだけ) ならば moused は起動しないのに,USB が挿さっていると moused が起動する点がややこしいです.

2.2  X における動作

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 マウスの psm0sysmouse に変わります.

(**) PS/2 Mouse: Device: "/dev/sysmouse"
(中略)
(**) Option "Device" "/dev/sysmouse"

2.3  残課題

複数個の接続の場合に,設定に xorg.conf を使う場合は未検討.
設定に haldmouse-sysmouse.fdi を使う場合,後者で指示できるのは「使用するマウス」でなく「そのマウスの device」なのか?

なお,USB デバイスに関しては Hot Plug (活線挿抜) や suspend/resume の際の挙動も見ておく必要がありますが,今回は追求しません.

別の種類のマウス (Bus Mouse etc.) も追求しません.

2.4  参考資料

% man moused
% man rc.conf
% more /etc/rc.d/moused

3. 複数のキーボードの接続

未検討です.

マウスの話が予想以上に長くなってしまったので,この先ページを分けるかもしれません.