Linux Mint で Kensington トラックボールにキーボードショートカットを割り当てる(その1)

追記: Bluetooth(再)接続時に設定を反映させるように変更した。

タイトルで説明しきれていないが、実はやりたいことが 2 つありまして

  • 1つ目は、ボタンの配置を変更したい。
  • 2つ目は、ボタンの一つにブラウザのタブを閉じるショートカットを割り当てる。

ちょっと長くなるので前半の「その1」でボタンの配置変更、「その2」でショートカットキーの割当てを記事にしていきます。

使うツールがいつくかあるので少し整理していきます。

xinput:
ここでは、マウスボタン再割当て、無効化をします。
xev:
マウスボタンが xinput のどの番号にアサインされているか確認します。

最終的な割当状態

今回設定する Kensignton Slimblade トラックボール には、4つの物理ボタンがあります。

ほぼすべてのトラックボール製品でボール部分のクリックはできないので便宜上別のボタンにマウスでいう中央クリックの役割をもたせています。でも中央クリックって使わなくないですか?少なくとも自分は使いません。

なのでそれを以下のように設定していきます。

上段戻るタブを閉じる(Cntrol + W)
下段左クリック右クリック


Mac や Windows で Kensington のトラックボールを使用する際はメーカー製の GUI ソフトでよしなにできるのですが、それに近い結果を目指します。

ボタン配置の変更

配置の変更にかかる前に現状を把握していきます。

$ xinput -list
⎡ Virtual core pointer                    	id=2	[master pointer  (3)]
⎜   ↳ Virtual core XTEST pointer        	id=4	[slave  pointer  (2)]
⎜   ↳ ETPS/2 Elantech Touchpad      	id=12	[slave  pointer  (2)]
⎜   ↳ ETPS/2 Elantech TrackPoint    	id=13	[slave  pointer  (2)]
⎜   ↳ SlimBlade Pro                           	id=15	[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 Camera: Integrated C         	id=10	[slave  keyboard (3)]
    ↳ AT Translated Set 2 keyboard            	id=11	[slave  keyboard (3)]
    ↳ ThinkPad Extra Buttons                  	id=14	[slave  keyboard (3)]

; SlimBlade Pro id=15 が見つかったので、そのボタンの割当状況を確認します。
$ xinput get-button-map 15
1 2 3 4 5 6 7 8 9

でここで出てきた 1 – 9 はこんなボタンがあるって意味らしい

1: 左クリック
2: 中央クリック
3: 右クリック
4: ホイール前
5: ホイール後
6: ホイール左右のどちらか
7: ホイール左右のどちらか
8: 戻る
9: 進む
10以上: Fn1、Fn2って続くらしい。。(ここ と StackOverFow でそんな書き込みを見た、出典知っている人がいたら教えてほしい)

でこの番号がどのボタンに割り当てられているか確認する必要がある。(動かした時の挙動でおおよそわかるはずだが確認しておく。)

xev を起動すると小さなウィンドウが表示される。ここにカーソルを持っていき、ボタンをクリックすると下のような感じでログメッセージが流れる。

$ xev -event button
Outer window is 0x5800001, inner window is 0x5800002

ButtonPress event, serial 25, synthetic NO, window 0x5800001,
    root 0x6ca, subw 0x0, time 66502224, (113,56), root:(2007,2320),
    state 0x0, button 1, same_screen YES

ButtonRelease event, serial 25, synthetic NO, window 0x5800001,
    root 0x6ca, subw 0x0, time 66502252, (113,56), root:(2007,2320),
    state 0x100, button 1, same_screen YES

クリックしたボタンによって、button1 の部分がそれぞれ異なるものが出てくる。

まとめるとこんな感じに割り当てられていることがわかった。

2 | 8 上段は、2: 中央クリック、8 戻る
——-
1 | 3 下段は、1:左クリック、3: 右クリック

上段左に「戻る」、右に「fn1」 を割り当てる

$ xinput set-button-map 15 1 8 3 4 5 6 7 10  9

このあと、上段右の 10 は他のキーコードを割り当ててしまうので本当はなんでもいいかもしれない。

これを再起動時にも反映させるために ~/.profile に以下の行を追加した。

有線の場合は、起動時に必ずアクティブなので .profile や .xprofile でいいようだが Bluetooth 接続の場合はサスペンドから復帰した時や、省電力モードに入って接続が切れると元に戻ってしまうようだ。

$ cd ~
$ vi .profile

; 以下を追加

;  自分のマウスにより変更してください
mouse_id='SlimaBlade Pro'
xinput set-button-map "$mouse_id" 1 8 3 4 5 6 7 10 9

:wq

Arch のページを参考に /etc/udev/rules.d/90-slimblade-wakeup.rule を作成した。 lsusb でPC 側のBluetoothデバイスの Vendoer:Product が 8087:0029 だと確認できたのでルールは以下のようにした。

$ cd /etc/udev/rules.d
$ vi 90-slimblade-wakeup.rule
SUBSYSTEM="usb",ATTRS{iVendor}=="80807",ATTRS{iProduct}=="0029" RUN=+"/home/[ユーザー名]/slimblade.sh"
:wq

以前 .profile に追加した設定部分を slimblade.sh に切り出す

$ cd 
$ touch slimblede.sh ; chmow 755 slimblade.sh
$ vi slimblade.sh
mouse_id='SlimBlade Pro'
xinput set-button-map "$mouse_id" 1 8 3 4 5 6 7 10 9

参考

Bluetooth – ArchWiki

Linuxでマウス/トラックボールのボタン割当て変更 – がとらぼ

Linuxでマウスのクリックボタンを変更| xinput set-button-map – shangtian’s blog

LinuxでKensington Expert Mouseのボタン配置を変更する | fukata.dev