いるねすのブログ

働きたくない系SEが無駄に遊んだ記録

TrackPointの中ボタンでスクロール

わりと上手くいってたFreeBSD9.1 on ThinkPad T420の設定だが、実はTrackPointの中心ボタンでスクロールができてなかった。 特にできなくて困る事態もなく、そもそもちょっと前まで気付いてすらいなかったわけだが、設定できてないのは気になるので直しておく。

まずはXorgの設定を見てみる。BIOSでタッチパッドは無効化してるのでTrackPointの設定のみ。

Section "InputDevice"
        Identifier  "TrackPoint"
        Driver      "mouse"
        Option      "Device" "/dev/sysmouse"
        Option      "Protocol" "auto"
        Option      "Emulate3Buttons" "true"
        Option      "ZAxisMapping" "4 5"
        Option      "EmulateWheel" "true"
        Option      "EmulateWheelButton" "2"
EndSection

ちゃんと設定しているんだから上手く動きそうなものだが、実際は上手くいかない。 /var/log/Xorg.0.logを見てみると、

 [   758.670] (WW) Hotplugging is on, devices using drivers 'kbd', 'mouse' or 'vmmouse' will be disabled.
 [   758.670] (WW) Disabling TrackPoint

などと出ている。どうもmouseドライバ使ってる設定は読み飛ばされているっぽい。とはいえmouseドライバ以外に選択肢とか特にない。 途方にくれてたが、どうもFreeBSD9.1ではマウスとかの処理をぜんぶhaldでやってるらしいと知り、んじゃあhalの設定で解決すりゃいいじゃんと思いついた。

ということで、 /usr/local/etc/hal/fdi/policy/10-mouse-sysmouse.fdi を編集してやる。

<?xml version="1.0" encoding="UTF-8"?>
<deviceinfo version="0.2">
  <device>
    <match key="info.udi" contains="/org/freedesktop/Hal/devices/psm_0">
      <merge key="input.x11_options.EmulateWheel" type="string">true</merge>
      <merge key="input.x11_options.EmulateWheelButton" type="string">2</merge>
      <merge key="input.x11_options.XAxisMapping" type="string">6 7</merge>
      <merge key="input.x11_options.YAxisMapping" type="string">4 5</merge>
      <merge key="input.x11_options.ZAxisMapping" type="string">4 5</merge>
      <merge key="input.x11_options.Emulate3Buttons" type="string">true</merge>
    </match>
  </device>
</deviceinfo>

/usr/local/share/hal/fdi/policy/10osvendor/10-mouse-sysmouse.fdi にデフォルト設定があるので、それをもとに編集するとラク。 <match ...>contains="..." 部分に入る値は、環境によってちがうかもしれない。lshalコマンドでhalが認識してるデバイスの情報一覧がべろっと出るので、そこから自分の設定したいデバイスをみつけて、そいつのinfo.udiの値と同じものを設定値とする。

あとは hald を restart して、 Xorg を再起動すればスクロールが有効になる。

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

ぬるっと動く。これはこれで気持ちいい。