tips
- How to fix the quirk moving mouse
FreeBSDではUSBマウスに関しては特別な設定をしなくても使えるように設定されています。USBマウスはdevd(8)経由での検出およびmoused(8)の起動という流れになりますので、
/etc/ rc. confに 「moused_ enable="YES"」 といった指定も必要ありません。これは重複起動になるので、 逆に 「moused_ enable="NO"」 と書いておいたほうが良いでしょう。活線挿抜に対しても問題なく動作します。 しかし、
PS/ 2-USB変換器やKVMスイッチを使っている場合にマウスがおかしな動きをすることがあります。原因はいくつかあると思いますが、 問題の1つに存在しないマウスデバイスに対してmoused(8)が実行されているというものがあります。USBマウスを1つしか接続していないのに、 USBマウスデバイスが2つ以上生成されている場合にはその可能性があります。 % ls /dev/ | grep ums ums0 ums1 %
usbconfig(8)でUSBデバイスをチェックします。
% usbconfig ugen0.
1: <EHCI root HUB Intel> at usbus0, cfg=0 md=HOST spd=HIGH (480Mbps) pwr=SAVE ugen1. 1: <XHCI root HUB 0x1033> at usbus1, cfg=0 md=HOST spd=SUPER (5. 0Gbps) pwr=SAVE ugen2. 1: <EHCI root HUB Intel> at usbus2, cfg=0 md=HOST spd=HIGH (480Mbps) pwr=SAVE ugen0. 2: <product 0x0024 vendor 0x8087> at usbus0, cfg=0 md=HOST spd=HIGH (480Mbps) pwr=SAVE ugen2. 2: <product 0x0024 vendor 0x8087> at usbus2, cfg=0 md=HOST spd=HIGH (480Mbps) pwr=SAVE ugen2. 3: <ELECOM Wireless mouse ELECOM> at usbus2, cfg=0 md=HOST spd=LOW (1. 5Mbps) pwr=ON ugen0. 3: <USB to PS2 Adaptor V3. 10 Composite USB PS2 Converter> at usbus0, cfg=0 md=HOST spd=LOW (1. 5Mbps) pwr=ON % ugen0.
3として認識されているデバイスが実に怪しい感じです。usbconfig(8)にshow_ ifdrvを指定してデバイスを調べると、 ums1が生成されていることがわかります。ugen0. 3はPS/ 2-USB変換器なのですが、 ここで接続していないマウスデバイスが生成されているわけです。 % usbconfig -u 0 -a 3 show_
ifdrv ugen0. 3: <USB to PS2 Adaptor V3. 10 Composite USB PS2 Converter> at usbus0, cfg=0 md=HOST spd=LOW (1. 5Mbps) pwr=ON ugen0. 3.0: ukbd0: <Composite USB PS2 Converter USB to PS2 Adaptor V3. 10, class 0/ 0, rev 1. 10/ 3. 10, addr 3> ugen0. 3.1: ums1: <Composite USB PS2 Converter USB to PS2 Adaptor V3. 10, class 0/ 0, rev 1. 10/ 3. 10, addr 3> % とりあえずPS/
2-USB変換器の詳細情報を取得しておきます。 % usbconfig -u 0 -a 3 dump_
device_ desc ugen0. 3: <USB to PS2 Adaptor V3. 10 Composite USB PS2 Converter> at usbus0, cfg=0 md=HOST spd=LOW (1. 5Mbps) pwr=ON bLength = 0x0012 bDescriptorType = 0x0001 bcdUSB = 0x0110 bDeviceClass = 0x0000 bDeviceSubClass = 0x0000 bDeviceProtocol = 0x0000 bMaxPacketSize0 = 0x0008 idVendor = 0x0b39 idProduct = 0x0001 bcdDevice = 0x0310 iManufacturer = 0x0001 <Composite USB PS2 Converter> iProduct = 0x0002 <USB to PS2 Adaptor V3. 10> iSerialNumber = 0x0000 <no string> bNumConfigurations = 0x0001 % 対処方法はいくつかあります。/etc/
devd. confを直接書き換えることで対処することもできます。ここでは/usr/ local/ etc/ devd/にスクリプトを追加して対処する方法を紹介します。/etc/ devd. confを書き換えると、 システムのアップデートの度に/etc/ devd. confのマージや確認作業が必要になって面倒だからです。usbconfig(8)のdump_ device_ desc指定でプロダクトIDやベンダIDを特定してから、 次のような設定ファイルを作成して/usr/ local/ etc/ devd/にコピーします。ここではelecommouse. confとして作成しました。 attach 101 { device-name "ums[0-9]+"; match "vendor" "0x0b39"; match "product" "0x0001"; action "/etc/
rc. d/ moused stop $device-name"; }; これはPS/
2-USB変換器のマウス部分が認識されたあとに動作し、 起動されたmoused(8)を終了する処理を実施します。アタッチ/デタッチ・ 優先順位・ デバイス・ ベンダID・ デバイスIDなどで動作すべき対象とタイミングを絞り込むことができます。このようにdevd(8)の動作には後から任意のタイミングで動作する設定を追加することができますので、 結構便利です。 デバイスが認識されるタイミングと処理順序のタイミングでたまに処理に失敗することがあります。特に無線LANマウスを使っているとその傾向が見られるように思います。その場合、
一旦USBマウス側を活線挿抜するとだいたいそのまま利用できます。