X11 识别事件源设备

X11 识别事件源设备

我有一个具体的问题 - 我想在我的程序中识别输入事件的源设备。假设我有两个相同的触摸屏连接到 USB 端口。我的程序正在抓取等XButtonPressedEventXButtonReleaseEvent但我想在第一个设备生成的事件和第二个设备生成的事件之间表现不同。我想将任何事件字段与设备描述符、设备 xinput id、设备系统 id 或任何其他可识别设备的内容相匹配。

可以实现吗?

如果可以的话我将非常感激任何关于如何做到这一点的提示。

此致敬意,PG!

答案1

旧的 XInput 扩展似乎不支持此功能。您需要使用X输入2报告每次按下按钮时的设备 ID。原作者在他的博客上发布了一系列文章,解释了一些重要方面(第1部分第2部分第3部分)和一些完整的代码示例可供使用这里。由于xinput命令行实用程序支持这两个扩展,因此您可以查看其源代码, 尤其测试_xi2.c,了解如何使用 XInput2。

xinput_calibrator使用旧版 XInput(参见这里)。虽然您可以尝试并行使用 XInput2,但 YMMV 有所不同,因为如上所述,两个版本的互操作性存在某些限制这里

然而,由于xinput_calibrator众所周知计算能力差关于变换矩阵,有人编写了一个小的python3脚本(西卡) 来校准触摸屏。它比简单得多xinput_calibrator,因此可能更容易适应您的需求。此外,该python3-xlib库(可在 ubuntu 的存储库中找到)默认使用 XInput2(如果可用),因此每个按钮按下事件都将包含源设备 ID。

相关内容