2007年12月11日火曜日

マウスボタンの割り当て変更

設定:マウスのボタンを通常の割り当てと入れ替える場合(1を3と入れ替える。4ボタンの場合)
$ xmodmap -e "pointer = 3 2 1 4" # 通常は1 2 3 4。
元に戻すには
$ xmodmap -e "pointer = default"

私は家のPCではマウスではなくトラックボールを使っています。
で、巷に売ってるトラックボールのほとんどがそうなんですが、ホイールがありません。それはまぁ大した問題ではないのですが、これがないと地味に困ります。
スクロールできないから困るのではありません。真ん中ボタンが不在なのです><
真ん中ボタンは、タブブラウザでリンクを新規タブで開きたいときとか、タブを閉じたい、そんなときに結構使います。また、Linuxでは反転したテキストをコピペしたいときなんかにも使うため、Win以上に使用頻度は高いボタンです。
で、トラックボールは真ん中ボタンがない代わりに、4〜6個のボタンを搭載してます。例えば、3番目のボタンを押しながらボールを転がしたらスクロール、とかいう機能を提供してるわけですね。
しかし、当然そーゆー機能はメーカーがドライバとともに配布しているユーティリティによって実現されます。そして大抵の場合、Linux向けにそのユーティリティが配布されることはありません。NA☆KE☆RU!
で、Linuxでは2ボタンマウスで3ボタンマウス機能をエミュレーションできるよう、左右ボタン同時クリックを真ん中ボタンクリックとする機能が標準で搭載されてます(オプションで変更可能)。私は仕方なくその機能を利用していたんですが、今日たまたま、マウスのボタン割り当て変更の方法を知ったので紹介しました。備忘録とも言う。
私の環境の場合、真ん中ボタンに割り当てたいボタンが8だったので(ボタン4つしかないくせに制御信号は1 2 3 8 9だった!)次のようなコマンドで設定しました。
$xmodmap -e "pointer = 1 8 3 4 5 6 7 2 9"

9番目のボタンはほとんど使っていないので放置しておきました。また、4〜7は存在自体不明です。つかそんなボタンねぇ。多分、上位機種はそんだけのボタンがあったのでしょう。基盤を使いまわしているものと思われます。
ちなみに、マウスのボタンの制御コードを調べるには「xev」コマンドを用います。このコマンドを実行すると、四角の描かれたウィンドウが現れますので、その上でマウスのボタンをクリックします。そうすると、その際に実行されるイベントがコンソールにダダダーッ!と表示されますので、そこからボタン情報を探します。
ボタンの押す、放す両方の行為でログが流れますので注意。また、カーソルを移動してもログが流れます。キーボードのボタンを押してもです。そのウィンドウ上で発生するイベントすべてをログとして表示するので、調べたいボタン操作以外はしないこと。わけ分からなくなります。
一応、これによりマウスのボタンを好きにカスタマイズできます。まぁそんなことをする必要がある人はそうそういないとは思いますが^^;
ちなみに、xmodmapコマンドはキーボードの配置も変更できます。というか、むしろこっちがメインです。CapsキーとCtrlキーを入れ替えるとか、親指シフトキーにするとか。キーボードの配置変更はマップキーを保存しなくちゃいけなかったっけ。
ってことはマウスのボタン変更もどっかに保存しないとあかんかな。xorg.confあたりだろか。
まぁ、明日起動してみて、元に戻っているようならもうちょっと調べてどっかに書いておこう。X起動時にスクリプト走らせてもいいけど、もっとスマートな方法があるだろう、きっと。
しかし、FC6だったか、その頃は特に何の設定をしなくても8番のボタンに真ん中ボタンの機能が割り当てられてたのになぁ。BerryLinuxとかはそうしてくれてた。ディストリビューションによって違うとか謎だわ。Berrylの場合、xorg.confにも何も書いてなかったからなぁ。なんなんだろ。
あぁ、そう言えば真ん中ボタンとして認識してくれなくなった頃、マウスドライバの変更ユーティリティがなくなったんだっけか。なんか仕様変更でもあったんかねぇ?
Microsoftのインテリマウスとして認識させたらいけると思うんだが・・・、どうなんだろ? そのあたり、今度暇な時に調べてみるかー。