xinputでマウスボタンのマッピングを変更する

提供: Akionux-wiki
Share/Save/Bookmark
移動先: 案内検索

概要

Xの入力デバイスの設定ユーティリティであるxinputを使ってマウスのボタンのマッピングを変更する。

方法

xinputを--listオプションを付けて実行すると、入力デバイス一覧が表示される:

% xinput --list
⎡ Virtual core pointer                    	id=2	[master pointer  (3)]
⎜   ↳ Virtual core XTEST pointer              	id=4	[slave  pointer  (2)]
⎜   ↳ USB       USB LASER MOUSE               	id=8	[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)]
    ↳ Power Button                            	id=7	[slave  keyboard (3)]
    ↳      SCISSORS Keyboard + 2P Hub         	id=9	[slave  keyboard (3)]
    ↳ Eee PC WMI hotkeys                      	id=10	[slave  keyboard (3)]

上記の場合では、マウスは"USB USB LASER MOUSE"で、id=8である。

入力デバイスのボタンマッピングを表示するには、

xinput get-button-map <device_id>

とする。例えば、id=8のマッピングを表示してみると、

% xinput get-button-map 8
1 2 3 4 5 6 7 8 9 10 11 12 13

となる。

このボタンマッピングの数列が意味するところは、物理ボタン番号から論理ボタン番号への対応である。 1番目の物理ボタンの対応先から順に並んでいて、

<1番目の物理ボタンに対応する論理ボタン番号> <2番目の物理ボタンに対応する論理ボタン番号> ...

という意味だ。つまり1 2 3 4 ...となっているのは物理ボタンと論理ボタンが一致しているということだ。

ちなみに、対応する論理ボタン番号を0にすると、その物理ボタンは無効になる。 すなわち、無効にしたければ、無効にしたい物理ボタンのところを0に設定すれば良い。

しかし、どのボタンがどの番号なのか確認する必要がある。

その場合は、入力デバイスの状態を問い合わせるコマンド:

xinput query-state <device_id>

を使ってみる。

マッピングを変更したいマウスのボタンを押しながら実行すると、例えば、

% xinput query-state 8
2 classes :
ButtonClass
	button[1]=up
	button[2]=up
	button[3]=up
	button[4]=up
	button[5]=up
	button[6]=up
	button[7]=up
	button[8]=down
	button[9]=up
	button[10]=up
	button[11]=up
	button[12]=up
	button[13]=up
ValuatorClass Mode=Relative Proximity=In
	valuator[0]=1245
	valuator[1]=649
	valuator[2]=-1151

というように出力される。

この場合は押されている物理ボタンは8番目ということがわかる。 つまり数列の8番目のマッピング先を0にすれば押していたボタンが無効化される。

マッピングを変更するには、

xinput set-button-map <device_id> map_button_1 [map_button_2 [...]]

という書式で実行する。

例えば8番目と9番目の物理ボタンを無効化するには、

xinput set-button-map 8 1 2 3 4 5 6 7 0 0 10 11 12 13

とする。

もちろん、無効にするだけではなくて、ある論理ボタンを複数の物理ボタンに対応させたり、入れ替えたりすることも可能だ:

xinput set-button-map 8 1 2 3 4 5 6 7 1 3 10 11 12 13

References