Ubuntu 12.04 で特定のポインティングデバイスからの入力だけマッピングを変更する方法

.Xmodmap を使ってマウスのボタンのマッピングを変更すると、すべてのポインティングデバイスからの入力を一律で変更してしまいます。

たとえば、トラックパッドが付いているノートパソコンに USB マウスもつないでいる状態だと、ポインティングデバイスが 2 つある状態になりますが、.Xmodmap で書いた pointer 設定は両方のデバイスからの入力に適用されてしまいます。

そうなると、「トラックパッドは natural scrolling にしたいけどマウスは従来通りにしたい」というような希望があったとしたらそれが実現できないことになってしまいます。

そこで xinput コマンドを使用します。

まずは

xinput list

で自分の PC に接続されている入力デバイスの一覧を取得します。

そしてその中からターゲットとなるポインティングデバイスの id を見つけます。

つぎに以下のようなコマンドを入力します。

xinput set-button-map <ID> 1 2 3 4 5 6 7 8 9 10 11 12


<ID> には xlinput list で調べた ID を入れます。
その後ろの 1 〜 12 はボタンの設定です。(ホイールを回した時も、回転方向に応じたボタンが押されていることになっているようです)

私のマウスの場合は 4 と 5 がスクロールの上下に対応していたので、そこを入れ替えれて natural scrolling が実現できました。