X.org 7.4, synaptics, hal

FreeBSDportsX.orgが7.4になったので, アップデート.
/usr/ports/UPDATINGを読むと, hal(hardware abstraction layer)を使うようになったとかなんとか書いてある. halにハードウェアの設定を渡しておいて, そっからXにまた渡す, ということになるようだ. とりあえずsysutils/halを入れて有効にする. /etc/X11/xorg.confでエラーが出るようになった箇所を削除したり. Xが起動したが, タッチパッド(synaptics)がなんか変. 右端を縦に動かしてスクロールしたりできない. lshalして, halに渡っている設定を見ると, Xのドライバとしてmouseを使うことになっている. これをsynapticsに書き換えてやればいいのかな, と思い, /usr/local/etc/hal/fdi/policy/11-x11-synaptics.fdiを次のように編集.

<?xml version="1.0" encoding="ISO-8859-1"?>
<deviceinfo version="0.2">
  <device>
     <match key="info.udi" string="/org/freedesktop/Hal/devices/psm_0">
        <remove key="info.addons" type="string" />
        <remove key="info.capabilities" type="strlist">input.mouse</remove>
        <append key="info.capabilities" type="strlist">input.touchpad</append>
        <remove key="input.x11_driver" type="string" />
        <merge key="input.x11_driver" type="string">synaptics</merge>
        <merge key="input.x11_options.Protocol" type="string">psm</merge>
        <merge key="input.x11_options.LeftEdge" type="int">1700</merge>
        <merge key="input.x11_options.RightEdge" type="int">5300</merge>
        <merge key="input.x11_options.TopEdge" type="int">1700</merge>
        <merge key="input.x11_options.BottomEdge" type="int">4200</merge>
        <merge key="input.x11_options.FingerLow" type="int">25</merge>
        <merge key="input.x11_options.FingerHigh" type="int">30</merge>
        <merge key="input.x11_options.MaxTapTime" type="int">180</merge>
        <merge key="input.x11_options.BMaxTapMove" type="int">220</merge>
        <merge key="input.x11_options.VertEdgeScroll" type="bool">on</merge>
        <merge key="input.x11_options.HorizEdgeScroll" type="bool">on</merge>
        <merge key="input.x11_options.VertScrollDelta" type="int">100</merge>
        <merge key="input.x11_options.HorizScrollDelta" type="int">100</merge>
        <merge key="input.x11_options.MinSpeed" type="double">0.06</merge>
        <merge key="input.x11_options.MaxSpeed" type="double">0.06</merge>
        <merge key="input.x11_options.AccelFactor" type="double">0.0010</merge>
        <merge key="input.x11_options.ScrollButtonRepeat" type="int">100</merge>
        <merge key="input.x11_options.UpDownScrolling" type="bool">on</merge>
        <merge key="input.x11_options.UpDownRepeat" type="bool">on</merge>
        <merge key="input.x11_options.LeftRightScrolling" type="bool">on</merge>
        <merge key="input.x11_options.SHMConfig" type="bool">off</merge>
        <merge key="input.x11_options.TapButton1" type="int">1</merge>
        <merge key="input.x11_options.TapButton2" type="int">2</merge>
        <!--
        <merge key="input.x11_options.CircularPad" type="bool">on</merge>
        <merge key="input.x11_options.CircularScrolling" type="bool">on</merge>
        <merge key="input.x11_options.CircScrollDelta" type="double">0.5</merge>
        -->
    </match>
  </device>
</deviceinfo>

忘れずに /usr/local/etc/rc.d/hald restartなどする. しかし, これでも動かない. (なお, mousedは使ってない. それからXのマウスやキーボードの設定はごっそり消してある.)
最終的に, /usr/ports/sysutils/hal/files/patch-hald_freebsd_probing_probe-mouse.c の以下のような箇所

+#define MOUSE_DRIVER "mouse"
+#define MOUSED_DEVICE "/dev/sysmouse"
+#define MOUSED_PROC_NAME "moused"
+#define XORG_PROC_NAME "Xorg"

を,

+#define MOUSE_DRIVER "synaptics"
+#define MOUSED_DEVICE "/dev/psm0"
+#define MOUSED_PROC_NAME "moused"
+#define XORG_PROC_NAME "Xorg"

とかしたら動いた. このパッチがあたったものは/usr/local/libexec/hald-probe-mouseになる. これにハードコードされてるせいで, さっきの設定ファイルでがんばって書き換えても無意味だったのだろうか. 例えばなんか初期化してるとか. そんな風には見えないんだけど.

これで一件落着かと思いきや, 今度はXに渡したいオプションのうち, synaptics関連のオプションが渡っていないようだ. カーソルの移動が前よりだいぶ速い. lshalしたら, halにはちゃんと渡っている. /var/log/Xorg.0.log には別途設定したキーボード関連の設定はちゃんとそう設定した, とログに残っている. synaptics関連は残っていない. うーん. とりあえずあきらめるか...

さらに, どうもクリックしてもプレスしただけで, カーソルを動かして初めてリリースするような挙動を見せたり(xevで確認しようとしたがよくわからなかった), 使いづらい.

(雑に書きなぐったので, 文章は後で手を入れるかも.)