我有一个带有 4 个物理按钮的鼠标(Kensington Slimblade Trackball),我们称它们为 ABCD,加上 3 个轴:鼠标 X、Y 和滚轮。
按钮 A 和 B 开箱即可用作主按钮(按钮 1)和右键单击按钮(按钮 3)。同时按下 A + B 会产生中键单击(按钮 2),这也很棒。
现在我想出于自己的目的映射按钮 C 和 D,但是我找不到如何从 A+B 模拟中单独映射按钮 C。
使用默认按钮映射,我得到以下映射:
physical buttons: A C B D
xinput button-map: 1 2 3 4 5 6 7 8 9 10 11 12
如果我尝试将按钮 C 映射到 8,将 D 映射到 9,xinput set-button-map
那么按 A+B 也会映射到按钮 8!
physical buttons: A C B D
xinput button-map: 1 8 3 0 0 0 0 9
^
A+B emulation becomes 8 too!
如何将按钮 C 映射到任意按钮编号,同时保持 A+B 模拟为按钮 2?
我应该在比 Xinput 更低的级别上工作吗?如何?我应该使用不同的 Xinput 设置吗?
编辑:这是evtest
4 个按钮的代码:
A:
type 4 (EV_MSC), code 4 (MSC_SCAN), value 90001
type 1 (EV_KEY), code 272 (BTN_LEFT), value 1
B:
type 4 (EV_MSC), code 4 (MSC_SCAN), value 90002
type 1 (EV_KEY), code 273 (BTN_RIGHT), value 1
C:
type 4 (EV_MSC), code 4 (MSC_SCAN), value ff000001
type 1 (EV_KEY), code 274 (BTN_MIDDLE), value 1
D:
type 4 (EV_MSC), code 4 (MSC_SCAN), value ff000002
type 1 (EV_KEY), code 275 (BTN_SIDE), value 1
答案1
我最终修补了 Xorg evdev 驱动程序以添加 Emulate3Button 选项,该选项配置中间按钮模拟发出的按钮编号。 (我把补丁提交到邮件列表了,迟早应该会合并的。)
然后我添加了这段配置:
Section "InputClass"
Identifier "SlimBlade Trackball"
Driver "evdev"
Option "ButtonMapping" "1 8 3 4 5 6 7 9 0 2"
Option "Emulate3Button" "10"
EndSection
这使得中间按钮仿真发出按钮编号 10,然后将按钮 C 映射到 8、D 映射到 9、10 映射到 2。瞧。