Linuxでマウスの戻る/進むボタンが効かない
先日ELECOMのHUGEというトラックボールを買いまして、8ボタンマウスで戻るボタン・進むボタンを搭載しているのですが、Linuxだと表題の通り、この戻る/進むボタンが反応してくれませんでした。調べても同様の症状に対する対処が見当たらなかったので、備忘録として書き残します。
1.ボタンの番号を調べる
Linux(というかXorg)ではマウスの各ボタンに番号を振り分けて管理しているようです。戻る・進むボタンに振り分けられている番号を調べます。 この番号を調べる方法は
- xinputを使う
- xevを使う
の2通りらしい。
xinputを使って調べる
まず
xinput list
でマウスのデバイス自体に割り振られたIDを調べます。
(ぼくの場合は
⎡ Virtual core pointer id=2 [master pointer (3)]
⎜ ↳ Virtual core XTEST pointer id=4 [slave pointer (2)]
⎜ ↳ ELECOM TrackBall Mouse HUGE TrackBall id=10 [slave pointer (2)]
(以下略)
と出力されました、HUGEの行にid=10
とあるのでIDは10です)
マウス自体のIDがわかったら次に、番号を調べたいボタンを押しながら
xinput query-state (マウスのID)
を実行します。
button[n]=down
と出力されます。これは「n番目のボタンが今押されている」という意味です。
自分の場合、戻るボタンを押しながら実行したらbutton[8]=down
と出力されたので戻るボタンの番号は8、同様に進むボタンは9とわかりました。
xevを使って調べる
たぶんこっちのほうが簡単です。
xev
を実行します。
「Event Tester」なるウィンドウが出現するのでその上で調べたいボタンをクリックすると
ButtonPress event, serial 37, synthetic NO, window 0x3800001,
root 0xd7, subw 0x0, time 40381591, (1,50), root:(595,368),
state 0x0, button 1, same_screen YES
みたいなのがターミナル上に出てくると思います。button いくつってのがボタンの番号。ぼくの場合、戻る・進むボタン以外はちゃんと出てきたんですが、何故か戻る・進むボタンのときだけButtonPress eventが表示されませんでした。
2.ボタンを割り当てる
実際にボタンに戻る・進むの機能を割り当てていきます。
xvkbd
・xbindkeys
をインストール(方法は省略)します。
自分のユーザのホームディレクトリに .xbindkeysrc
ファイルを作成し、以下のように書いて保存します。
"xvkbd -xsendevent -text "[XF86Back]""
m:0x0 + b:(戻るボタンの番号)
"xvkbd -xsendevent -text "[XF86Forward]""
m:0x0 + b:(進むボタンの番号)
(ArchWikiからの受け売り)
xbindkeys
を実行します。(ログイン時にxbindkeysを自動実行させることを忘れずに!デスクトップ環境にもよるがデスクトップ環境の設定マネージャーから設定できることが多い)
これで戻る・進むボタンは動くはず!ヤッター!!!でも動かなかった
動かなかった
手元のWindows機にこのマウスを刺して使ったら普通に動いたのでマウス側の不良というわけではなさそう。結局、なぜ反応してくれなかったのかはよくわかりませんでしたが、戻る・進むボタンを動かすことはできました。
3.ボタンの番号の割り当てを変える
自分の場合、ボタン8、9はなぜか反応してくれなかったので、戻る・進むボタンをボタン8、9以外の番号(ぼくのマウスは1〜12のボタンを使っていたので、戻る・進むボタンをそれぞれ未使用だった13、14に割り当てました)に振り分け直してから、新しい番号に戻る・進むの機能を割り当てたところうまくいきました。
ボタンの番号の振り分けを変えるには xinput
を使います。ボタンの番号を調べたときにも使ったやつです。
xinput get-button-map (マウスのID)
で現在のマウスの番号の割り当てがわかります。手つかずなら、1 2 3 4 5 6 7 8 9 10 11 12
みたいに順に出力されると思います。ここでボタンaの割り当てをbに変えたいなら、a番目の数字をbに変えて、
xinput set-button-map (マウスのID) (新しい割り当て)
を実行します。自分の場合、ボタン8→13に、ボタン9→14に変えたかったので、8番目の数字を13に、9番目の数字を14に置き換えた、xinput set-button-map 10 1 2 3 4 5 6 7 13 14 10 11 12
を実行しました。これでボタンの番号の割り当てが変わっているはず。あとは2.ボタンを割り当てるでやったことを新しく割り当てた番号でやり直せば動きます。
(ただしログアウトしたら設定したことは全部まっさらになります。ログイン時にxinput set-button-mapとxkeybindを自動実行させることを忘れずに!!!)