我剛剛購買了羅技 M535 藍牙滑鼠。它有傾斜輪,但它映射到“後退”和“前進”按鈕。為了讓它作為水平滾動工作,我編寫了這個腳本:
#! /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
.
我還知道有類似羅技滑鼠的核心模組(請參閱https://github.com/CzBiX/logitech-m560),但是不支持這個。
答案1
我透過使用key-mapper gui軟體解決了水平滾動問題,然後將左輪按鈕(BUTTON SIDE)映射到輪子(right,1);右滾輪按鈕用於滾輪(左,1)。
答案2
我用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
但沒有成功。
另一種具有開箱即用水平滾動功能的滑鼠具有以下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
具有鍵碼值的事件嗎?