![Linux 中的 Logitech M535](https://linux22.com/image/1557340/Linux%20%E4%B8%AD%E7%9A%84%20Logitech%20M535.png)
我刚买了一个 Logitech 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
。
我还知道有类似的 Logitech 鼠标的内核模块(请参阅https://github.com/CzBiX/logitech-m560),但是这个不受支持。
答案1
我使用 key-mapper gui 软件解决了水平滚动问题,然后将左滚轮按钮(按钮侧)映射到滚轮(右,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
然后关闭并打开鼠标。现在可以正常工作了,我绑定了 meta (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
具有键码值的事件吗?