xinputコマンドを使ってラップトップPCのタッチパッドの無効有効を即座に切り替える

背景

まず、キーボードを入力するとき、少し手のひらがタッチパッドに触れるとカーソルが動いてしまう。この問題について、ThinkPadを所有している(使っている)知り合いに尋ねたところ、「そもそもトラックパッドは無効化している」という返答がほとんどだった。

さよならMac | めがねをかけるんだ

タッチパッドがクソ:タッチパッドがボタンと一体になっているため、 Thinkpad 伝統のトラックポイントを使うと、認識がとても怪しくなる。そしてでかいため、指が触れて誤操作の原因になってしまう。これについては、 Mac から影響を受けたのではないかと考えている。実際に、タッチパッドのみで使っていると驚くほど Mac ユーザーにとって違和感がない。そこを従来のトラックポイントと無理に合わせようとしたため、中途半端になってしまったと思われる。実際、 X220 を使う際はトラックポイントを使っているのだが、 X240 では全く使っていない。

さよなら Mac - 表道具

そもそもThinkpadのタッチパッドは基本無効化するものなのでどうでもいい。まあそのスペース邪魔なんだよ、とは思いますがw

開発環境がLinuxに戻ってそれなりにこなれてきたので現在の環境について書く - joker1007の日記

以上のように,タッチパッドはキーボードを使うときに邪魔であることがわかります.Thinkpadを使っている人なら単純にタッチパッドを無効化すれば良いでしょう,トラックポイントでカーソルを動かせますから.

XPS 13などの普通のラップトップPCでの解決法

しかし,XPS 13を使っている私にとってはそうはいきません,トラップポイントなどXPS 13にはないからです.EmacsやFirefoxにKeySnailを使うことで,極力キーボードだけで操作をできるようにしていますが,それでもマウスカーソルが必要になってしまうことはあります.

そこで,タッチパッドの無効有効を快適に制御する必要がありました.私のncaq/.xmonadのコミットログを見ると,2014年ごろには既に私はその問題を解決していたらしいです.

xinputコマンド

xinputコマンドは,Xデバイスの設定をするコマンドです.例えばxinputを今のPCで実行すると,

% xinput
⎡ Virtual core pointer                          id=2    [master pointer  (3)]
⎜   ↳ Virtual core XTEST pointer                id=4    [slave  pointer  (2)]
⎜   ↳ SynPS/2 Synaptics TouchPad                id=12   [slave  pointer  (2)]
⎣ Virtual core keyboard                         id=3    [master keyboard (2)]
    ↳ Virtual core XTEST keyboard               id=5    [slave  keyboard (3)]
    ↳ Power Button                              id=6    [slave  keyboard (3)]
    ↳ Video Bus                                 id=7    [slave  keyboard (3)]
    ↳ Power Button                              id=8    [slave  keyboard (3)]
    ↳ Sleep Button                              id=9    [slave  keyboard (3)]
    ↳ Integrated_Webcam_HD                      id=10   [slave  keyboard (3)]
    ↳ AT Translated Set 2 keyboard              id=11   [slave  keyboard (3)]

現在繋がっているデバイスを表示してくれます.デバイスが認識されているかなどを調べるのに便利です.

そして本題はxinput --disable,xinput --enableコマンドです.これに対してデバイスの名前を渡してあげると,そのままデバイスを簡単に無効化することが出来ます.私の場合はxinput --disable SynPS/2\ Synaptics\ TouchPadです.

後はこれをお使いのデスクトップ環境のキーボードショートカットに指定してあげれば,ボタンを軽く叩くだけで,タッチパッドの無効有効を切り替えることが出来ます.xmonadの場合はspawn "xinput --enable 'SynPS/2 Synaptics TouchPad'"をプログラムに埋め込めば良いですし,gnomeの場合はそのまま独自のショートカットに指定すれば良いですね.

私はこのコマンドをf1とf2に設定して,f1で即カーソル無効,f2でカーソル有効,となるように設定しています.

すぐれたGNU/Linux環境の前では「タッチパッドが邪魔」などという問題はひとひねりだということがわかりますね.余談ですが,KDEのタッチパッド設定には「マウスを接続すると自動的にタッチパッドが無効になる」というものがあり,あれは優れていると感じました.まあ私はラップトップPCにわざわざマウスなど繋ぎませんが…