在 Wayland 中重新映射鼠标按钮

在 Wayland 中重新映射鼠标按钮

我有两个罗技轨迹球、一个 Wireless TrackMan FX 和一个 Marble Mouse。两者都在evtest: BTN_LEFTBTN_RIGHTBTN_MIDDLE、中报告相同的按钮集BTN_SIDE,尽管BTN_EXTRA它们各自只有四个物理按钮。 TrackMan FX 发送我想要的确切事件:左、右、中和侧。但是,Marble Mouse 发送BTN_EXTRA而不是BTN_MIDDLE,所以我想重新映射它。

这个答案似乎完全涵盖了我想要的内容,而 hwdb 看起来是执行此操作的正确位置。唉,它只起作用了一半,我不知道为什么;我怀疑这与单击生成的两个不同的输入事件有关。evtest报告来自 FX 的工作中点击,如下所示(为了清楚起见,省略了不相关的时间戳):

type 4 (EV_MSC), code 4 (MSC_SCAN), value 90003
type 1 (EV_KEY), code 274 (BTN_MIDDLE), value 1

来自 MarbleMouse 的未经修改的点击:

type 4 (EV_MSC), code 4 (MSC_SCAN), value 90005
type 1 (EV_KEY), code 276 (BTN_EXTRA), value 1

所以我的99-marblebutton.hwdb文件是这样做的:

evdev:input:b0003v046DpC408*
 ID_INPUT_KEY=1
 KEYBOARD_KEY_90005=btn_middle

由此产生的输入事件被修改:

type 4 (EV_MSC), code 4 (MSC_SCAN), value 90005
type 1 (EV_KEY), code 274 (BTN_MIDDLE), value 1

因此,我确实收到了一个BTN_MIDDLE事件,但关联的MSC_SCAN值仍然错误,这似乎会产生影响,因为中间点击在任何地方都无法识别。事实上,它甚至似乎根本不被视为有效的输入事件:使用libinput debug-events我可以看到未修改的事件:

event7   POINTER_BUTTON          +97.374s      BTN_EXTRA (276) pressed, seat count: 1

完成 hwdb 配置后,当我按下同一按钮时不会报告任何内容,因此wev也看不到事件。

我尝试过的其他事情包括在 swaywm 中重新映射,这种方法有效,但仅在某些应用程序中:

set $MOUSE "1133:50184:Logitech_USB_Trackball"
bindsym --input-device=$MOUSE --whole-window BTN_EXTRA seat - cursor press BTN_MIDDLE
bindsym --input-device=$MOUSE --whole-window --release BTN_EXTRA seat - cursor release BTN_MIDDLE

拦截工具让我编写一个可以“修复”EV_KEYEV_MSC事件的过滤器,但效果类似于 hwdb:事件显示正常,evtest但 libinput 甚至看不到它们。

Solaar 似乎不支持我的任何设备,而且我太胖了,无法让输入重新映射器做任何有用的事情。

相关内容