我在 x86_64 系统上使用 Ubuntu 22.04.2,带有 Xorg 和 libinput。
我有一个 Logitech MX Master 鼠标(第一个型号),我注意到滚动时出现一些异常行为。鼠标有一个自由转动的滚轮,可以设置为“凹口”模式,为每个滚动事件提供独特的触觉反馈。
问题是有时会错过滚动事件。例如,滚动浏览 Firefox 或 IDE 窗口,有时将滚轮移动一个格子没有视觉效果,但后续的格子可以正常工作。
缩小范围来看,似乎替代方向上的第一个凹口总是被丢弃。即,如果我向下滚动三格,视觉响应对应于三个滚动事件,那么如果我向上滚动一格,则没有响应。第二个向上事件确实会引起视觉响应。
我使用过xev -event button
,如果我将滚轮向上/向下移动一个档位,它会清楚地显示没有 ButtonPress 或 ButtonRelease 事件。我必须反转方向并将其移动两个档次才能看到任何新事件。
我使用了evtest
并且libinput debug-events
设备本身肯定会为滚轮运动生成正确的低级消息 - 因此低级和硬件工作正常。
从这问题,我认为这表明问题出在 libinput 之上 - 堆栈中下一个要查看的组件是什么?
编辑:鉴于这xev
显示了问题,但libinput debug-events
没有,我认为显然首先要查看的地方是xf86-input-libinput
,所以我已经构建了自己的版本并将很快开始调试它......
EDIT2:进行调试后,xf86-input-libinput
我已经确认从 libinput 进入这一层的数据是完整的,并且看起来是正确的,但转换为 X11 输入事件似乎会丢弃一些数据。不幸的是,在日志中进行实时调试输出会导致问题消失,所以我想知道这是否是某种与计时相关的情况,也许与滚轮位置估计有关?当我有时间时,我会更深入地挖掘。
答案1
我在使用 Xorg 和 libinput 的 Pop!_OS 22.04 x86_64 以及 Logitech G502 Lightspeed 鼠标上遇到了同样的问题。每次反转滚动方向后都会错过第一个滚动槽口。尝试你的xev -event button
测试,我看到了相同的结果。
我更愿意将其作为评论发布,因为它并没有真正回答问题,但我对此还没有足够的声誉。至少这可能会添加一些额外的信息并确认此问题的存在。可能与罗技有关?
编辑:对我来说,在某些窗口中可以正确检测到第一个滚动缺口,例如系统设置和 byobu 终端窗口。在 Firefox 和我通过 Steam 玩的一些游戏中,反转方向后会错过第一个缺口。
编辑 2:事实证明 Firefox 默认使用 Xinput 1(?)。在启动 Firefox 之前MOZ_USE_XINPUT2
可以设置一个环境变量,1
这似乎可以解决我的问题。这个 bugzilla 线程有一些关于 Xinput2 和滚动/触摸屏输入的使用的对话。设置环境变量还允许我在滚轮解锁时平滑滚动(即不在凹口/触觉模式下),而不是总是移动预定义的量。这表明该问题可能与使用平滑滚动滚轮(在 Xinput 1 中)实现凹口/触觉滚动有关。