ThinkPad T460s Ubuntu でトラックパッドを無効化

5ヶ月ほど ThinkPad T460s を Ubuntu(Xubuntu) で使ってます。

ちょっと前に さよならMac | めがねをかけるんだ という ThinkPad をdisった記事が話題になりましたが、自分はあんまり不満はありません。 ノートPCでLinuxを使う時の鬼門だった無線LANやサスペンドもまったく問題ありません。 当然トラックパッドは無効にしています。

唯一の不満がこのトラックパッド無効化です。

トラックパッドを無効にしようとBIOSで無効に設定しても無効になりません。

しょうがないので、Xubuntu の設定の「マウスとタッチパッド」でタッチパッドの設定を無効化します。

f:id:tmtms:20170218135347p:plain

これでトラックパッドが無効になってめでたしめでたし。

…と思ったのですが、しばらく使ってると、時折トラックポイントのボタンをクリックしても効かないことがあります。

どうやらトラックパッドに触れているとボタンのクリックイベントを取りこぼすようでした。 トラックパッドを無効にしていたので、それが原因だとなかなか気がつきませんでした。

トラックパッドに二本以上の指が触れているとかなりの確率でボタンのクリックイベントを取りこぼしてしまいます。

どうやら psmouse ドライバのインストール時に proto=bare を指定するとトラックパッドを完全に無効化できるようです。 というより proto=bare ではトラックパッドを扱えないというだけな気がします。

# modprobe -r psmouse
# modprobe psmouse proto=bare

これでトラックパッドに触れていてもボタンクリックを取りこぼすことはなくなりました。

…が、もうひとつ問題が。

proto=bare ではトラックポイントの感度と速度の調整ができません。

proto=bare を指定しない時は、次のようにして感度と速度を調整できました。

# echo 200 > /sys/devices/platform/i8042/serio*/serio*/sensitivity
# echo 200 > /sys/devices/platform/i8042/serio*/serio*/speed

proto=bare で psmouse をインストールした時は、この sensitivity, speed ファイル自体ありません。

色々試行錯誤したところ、proto=bare をつけずに psmouse をインストールして、感度と速度を調整した後に proto=bare をつけて psmouse を再インストールすると感度と速度が保持されたままになることがわかりました。

とりあえず、簡単なシェルスクリプトを作って、電源ON時やサスペンドからの復帰時に走らせてます。

#!/bin/bash
DIR=/sys/devices/platform/i8042
SPEED=200
SENSITIVITY=200

# echo が刺さることがあるので1秒でタイムアウトさせる
sub() {
    (echo $1 > $2) &
    pid=$!
    (sleep 1; kill $pid) &
    pid2=$!
    wait $pid
    kill $pid2
}

modprobe -r psmouse
modprobe psmouse proto=any
while :; do
    sleep 0.3
    speed=$DIR/serio*/serio*/speed
    test -f $speed || continue
    sens=$(dirname $speed)/sensitivity
    test -f $sens || continue
    sub $SPEED $speed
    test "$(cat $speed)" -eq $SPEED || continue
    sub $SENSITIVITY $sens
    test "$(cat $sens)" -eq $SENSITIVITY || continue
    break
done
modprobe -r psmouse
modprobe psmouse proto=bare