如何调试 usbmon 中存在的 X11 缺少鼠标 ButtonRelease 事件?

Ank*_*nko 3 debugging x11 mouse events

几天前,当我同时释放两个按钮时,我的鼠标按钮释放开始有时无法被识别。因此,一个按钮的逻辑状态卡在“按下”状态,导致恼人的意外操作,直到我再次按下它来重置它。

可以重现监视鼠标事件的问题xev(输出有时不显示预期的按键释放事件)。我无法通过监视事件来重现该问题/sys/kernel/debug/usb/usbmon(输出始终与现实一致)。

因此,故障显然出在 X11 以下但 USB 以上的某个抽象软件组件上。

可能是什么原因造成的?我怎样才能进一步缩小范围?

dir*_*rkt 5

USB事件和X事件之间的级别是:

  • 除非您的鼠标很特殊并且有自己的驱动程序,否则它很可能是 HID 设备。找到相应的hidraw设备(选中dmesg),并验证您在那里获取事件。USB 到 HID 的转换由内核完成。

  • 所有输入事件都通过输入层离开内核,相应的设备位于/dev/input. 以 root身份运行evtest,选择鼠标,看看是否收到事件。从 HID 事件到输入事件的转换由内核完成。

  • X 自动加载所有输入设备的驱动程序,大多数情况下是evdev驱动程序。查看/var/log/Xorg.0.log加载了哪些驱动程序。这些驱动程序将输入事件转换为 X 事件。

  • 还有一个 Xorg 的包装驱动程序。在 Arch 上,这是由 `xf86-input-libinput` 包提供的。请参阅 https://wiki.archlinux.org/index.php/Libinput 和 https://github.com/freedesktop/xorg-xf86-input-libinput (2认同)