Xinput 按钮映射和中键模拟

Xinput 按钮映射和中键模拟

我有一个带有 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 设置吗?

编辑:这是evtest4 个按钮的代码:

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。瞧。

相关内容