FreeBSD 8.0 で SOTEC C103 のタッチパッドを hald を用いて設定する方法

xorg をインストールし、/etc/rc.conf を編集

 Xorg を ports や packages からインストールすれば、その依存関係によって、hald や dbus などもインストールされたと思う。xorg をインストールし終わったら、まず、/etc/rc.conf に以下の二行を記述する。これで、マシンの起動時に hald や dbus が起動するようになる。

hald_enable="YES"
dbus_enable="YES"

 ところで去年、FreeBSD 7.2 をインストールしたときに、packages から xorg などもいっしょにインストールしたのだけど、haldaemon などのユーザが /etc/passwd に作られていなかったような記憶がある。もしこれらのユーザが、/etc/passwd に存在せずに、そのために不具合がでるようなら、手動でこれらのユーザを作成する必要があるかもしれない。

x11/libsynaptics と x11-drivers/xf86-input-synaptics のインストール。

 もうこれだけでも、マシンを再起動して、その後 startx などで X を起動すれば、タッチパッドやキーボードなどの最低限の機能は有効になっていたように思う。しかし、これからさらに色々な設定するためには、以下の二つの ports/packages をインストールする必要があったような気がする。 x11/libsynaptics x11-drivers/xf86-input-synaptics

 というわけで、以上の二つをインストールしたことを前提に先に進もう。

mouse-sysmouse.fdi の作成。

 hald に読み込ませるための /usr/local/etc/hal/fdi/information/mouse-sysmouse.fdi というファイルを作成。その中身は以下のようにした。

<?xml version="1.0" encoding="ISO-8859-1"?>
<deviceinfo version="0.2">
  <device>
    <match key="info.capabilities" contains="input.mouse">
      <match key="info.udi" string="/org/freedesktop/Hal/devices/psm_0">
        <merge key="info.capabilities" type="strlist">input</merge>
        <append key="info.capabilities" type="strlist">input.touchpad</append>
      </match>
    </match>
  </device>
</deviceinfo>

x11-synaptics.fdi ファイルの作成。

 つぎに hald に読み込ませるためのファイル /usr/local/etc/hal/fdi/policy/x11-synaptics.fdi を作成する。ここにタッチパッドの設定を記述する。その中身は、私は以下のようにしてみた。

<?xml version="1.0" encoding="ISO-8859-1"?>
<deviceinfo version="0.2">
  <device>
    <match key="info.capabilities" contains="input.touchpad">
      <merge key="input.x11_options.Protocol" type="string">psm</merge>

      <merge key="input.x11_options.LeftEdge" type="string">1300</merge>
      <merge key="input.x11_options.RightEdge" type="string">5500</merge>
      <merge key="input.x11_options.TopEdge" type="string">1300</merge>
      <merge key="input.x11_options.BottomEdge" type="string">4800</merge>

      <merge key="input.x11_options.FingerLow" type="string">25</merge>
      <merge key="input.x11_options.FingerHigh" type="string">30</merge>

      <merge key="input.x11_options.MaxTapTime" type="string">180</merge>
      <merge key="input.x11_options.MaxTapMove" type="string">220</merge>

      <merge key="input.x11_options.VertEdgeScroll" type="string">true</merge>
      <merge key="input.x11_options.HorizEdgeScroll" type="string">true</merge>

      <merge key="input.x11_options.VertScrollDelta" type="string">100</merge>
      <merge key="input.x11_options.HorizScrollDelta" type="string">100</merge>

      <merge key="input.x11_options.MinSpeed" type="string">0.06</merge>
      <merge key="input.x11_options.MaxSpeed" type="string">0.06</merge>
      <merge key="input.x11_options.AccelFactor" type="string">0.0010</merge>

      <merge key="input.x11_options.ScrollButtonRepeat" type="string">100</merge>
      <merge key="input.x11_options.UpDownScrolling" type="string">true</merge>
      <merge key="input.x11_options.UpDownRepeat" type="string">true</merge>
      <merge key="input.x11_options.LeftRightScrolling" type="string">true</merge>
      <merge key="input.x11_options.LeftRightRepeat" type="string">true</merge>

      <!-- "SHMConfig on" seems good works with synclient(1).  But this
           options is insecure.  I recommended "off" as default. -->
      <merge key="input.x11_options.SHMConfig" type="string">true</merge>
      <!-- If you use circular touchpad, uncomment them. -->
      <merge key="input.x11_options.CircularPad" type="string">true</merge>
      <merge key="input.x11_options.CircularScrolling" type="string">true</merge>
      <merge key="input.x11_options.CircScrollTrigger" type="string">8</merge>
    </match>
  </device>
</deviceinfo>

/boot/loader.conf の設定。

 つぎに /boot/loader.conf に以下の一行を追加する。

hw.psm.synaptics_support=1

あとは再起動して、X を起動するだけ。

 これで、マシンを再起動し、startx などで X を起動するだけでタッチパッドが使用できるようになっていると思う。

SHMConfig を有効にしているのなら、X を起動後、動的にタッチパッドの挙動を変更することができる。

 X の起動後、タッチパッドの挙動が気に入らなければ、synclient コマンドで、各値を動的に変更することができる。

> synclient LeftEdge=0

 上の例では、LeftEdge に 0 の値を動的に設定している。ただ、この synclient コマンドによる動的な設定を使用するためには、あらかじめ上の x11-synaptics.fdi のファイル上で、SHMConfig の値を有効にしておく必要がある。

 この SHM を用いた動的な設定は、便利ではあるが危険もともなうそうだ。この SHMConfig を有効にしていると、ルートにならなくても、一般のユーザがタッチパッドの各値を動的に好きなように変更できる。なので、多人数で一台のマシンを共用しているときは、オフにしておいたほうが良いようだ。*1

 またもう一つの注意点としては、この synclient によって動的に変更した値は、上記の x11-synaptics.fdi という xml ファイルに保存されるわけではない。なので、X を再起動したりすると、すべて xml ファイルに記述した値に戻ってしまう。

 なので、満足のいく設定ができたら、以下の -l オプションで、現在の状態を出力し、その出力結果を参考に、xml ファイルを書き換えると良いと思う。

> synclient -l

 出力結果は、リダイレクトなどを使って、ファイルに保存しておくのも良いかもしれない。

> synclient -l > mySynclientList.txt

 下のように awk を使って、出力結果を整形してやれば、xml ファイルに反映させるときに便利かもしれない。

> synclient -l | awk '/=/{printf "      <merge key=\"input.x11_options.%s\" type=\"string\">%s</merge>\n",$1,$3}'

 なお、X だけを再起動したとしても、hald を再起動していなければ、書き換えた xml ファイルの値は、有効にならない。xml ファイルに設定した値を有効にするためには、以下のコマンドで hald を再起動させよう。そうすれば、hald は変更後の xml ファイルを読み込んでくれる。(もっと簡単な方法があるかもしれないけれど、よくわからない)

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

 hald を再起動させたあとで、X を起動すれば、変更後の xml の値も有効になる。でも一番、単純明快な方法は、マシン自体を再起動させてしまうことかもしれない。

タッチパッドの微調整。synclient -m を利用する。

 以下のコマンドを用いれば、タッチパッドの現在の状態を50ミリ秒ごとに監視できる。

> synclient -m 50

 これを参考にしながら、設定すると良いかもしれない。この機能を使用するときも、SHMConfig を有効にしておく必要がある。

付録・SOTEC C103 における Xorg 7.4 の設定。

 最後に、Xorg 自体の設定方法についても少しだけ。hald と DBus を有効にしておけば、とくに /etc/X11/xorg.conf ファイルを作成する必要もないようだ。私は xfce4 や gnome2 を portupgrade でインストールしたのちに、ホームディレクトリに ~/.xinitrc というファイルを作った。ファイルの中には、このように記述した。

export LANGUAGE=ja
export LANG=ja_JP.UTF-8

export XMODIFIERS='@im=SCIM'
scim -d &

startxfce4
#gnome-session
#exec startkde

 上記は、xfce4 をデスクトップ環境にするための設定。gnome2 を起動したい場合には、上記の startxfce4 の行の先頭に # をつけてコメントアウトし、かわりに現在コメントアウトしている #gnome-session の行の先頭についている # の文字を削除する。kde を起動したいときも、おなじように startxfce4 の先頭に # をつけてコメントアウトし、かわりに #exec startkde の行の # の文字を削除。

 なお、私は日本語を入力するために japanese/scim-anthy をインストールしている。scim -d & の行はなくても gtk2 を用いた大部分のソフトウェアで日本語を入力できるけれど、この行で scim をデーモン・モードで起動しておくと、たとえば Java の swing を使ったソフトウェアなどでも日本語を入力できるようになるようだ。

 上記のようなファイルを用意し、以下のように入力すれば、Xorg が起動する。

> startx

 X については、以下のページなどを見ると良いと思う。
X Window System
The X Window System

*1:以下は、synclient(1) から抜粋。"WARNING: The SHM mechanism is not secure if you are in an untrusted multiuser environment. All local users can change the parameters at any time." 以下、その意訳。"注意: もしあなたが複数のユーザとマシンを共有しているのなら、この SHM メカニズムは安全ではありません。ローカルユーザなら誰でも、これらのパラメータをいつでも好きなように変更することができるからです。"