Logitech M535Bluetoothマウスを購入しました。傾斜ホイールがありますが、「戻る」ボタンと「進む」ボタンにマップされています。水平スクロールとして機能させるために、次のスクリプトを作成しました。
#! /bin/dash
MOUSE_ID=`xinput list | grep -o 'M535.*pointer' | sed 's/^.*id=\([0-9]*\)[\t].*$/\1/')`
xinput set-button-map $MOUSE_ID 1 2 3 4 5 8 9 6 7 10 11 12
残念ながら、このように、スコーリングボタンは繰り返されていません。
さらに、マウスには、ALT + TABを(「偽の」キーボードを介して)送信する追加のボタンもあります。
ignazio@ignazio-HP:~$ xinput | grep M535
⎜ ↳ Bluetooth Mouse M336/M337/M535 id=15 [slave pointer (2)]
↳ Bluetooth Mouse M336/M337/M535 id=16 [slave keyboard (3)]
ignazio@ignazio-HP:~$ xinput test 16
key press 64
key press 23
key release 23
key release 64
このボタンを他のものにバインドするにはどうすればよいですか?
xbindkeys
を使おうとしましたが、ALT + TABをインターセプトさせることができませんでした。さらに、できたとしても、マウスからの偽のキーボードからのみ傍受したいので、xbindkeys
でデバイスをフィルタリングする方法が見つかりませんでした。
同様のLogitechマウス用のカーネルモジュールがあることも知っていますが( https://github.com/CzBiX/logitech-m56 を参照)、これはサポートされていません。
Hwdbを使用して解決しました。 /etc/udev/hwdb.d/10-m535.hwdb
を作成しました:
evdev:input:b0005v046DpB016e1203-*
KEYBOARD_KEY_700e2=reserved
KEYBOARD_KEY_7002b=leftmeta
次に:
Sudo udevadm hwdb --update
Sudo udevadm trigger
そして、マウスのオンとオフを切り替えます。これで動作します。メタ(Windows)キーをバインドしました。
xinput set-button-map
が不要になるようにこの解決策を作成できると思います(ボタンが繰り返されないという問題を解決できるかもしれません)...しかし、ボタン6と7のキーコードが見つかりませんでした(左にスクロール)と右)。私はスキャンコードを見つけました:
evdev:input:b0005v046DpB016e1203-*
KEYBOARD_KEY_700e2=reserved
KEYBOARD_KEY_7002b=leftmeta
KEYBOARD_KEY_90004=??? (scroll left - mouse button 6)
KEYBOARD_KEY_90005=??? (scroll right - mouse button 7)
BTN_SIDE
、BTN_EXTRA
、BTN_BACK
、BTN_FORWARD
、BTN_6
、BTN_7
(/usr/include/linux/input-event-codes.h
で定義)の10進値を試しました)運がない。
水平スクロールがすぐに機能する別のマウスには、次のevtest
出力があります。
Event: time 1522616506.145899, -------------- SYN_REPORT ------------
Event: time 1522616507.105926, type 2 (EV_REL), code 6 (REL_HWHEEL), value 1
Event: time 1522616507.105926, -------------- SYN_REPORT ------------
Event: time 1522616508.191962, type 2 (EV_REL), code 6 (REL_HWHEEL), value -1
どういうわけか、hwdbファイルのキーコードの値でEV_REL
イベントを指定できますか?