PyQt5如何忽略/dev/input/eventX事件并仅使用一个特定的事件设备?

PyQt5如何忽略/dev/input/eventX事件并仅使用一个特定的事件设备?

我的 PyQt5 GUI 在 Raspberry Pi 上运行时遇到一些问题。我有时需要在操作 GUI 时将 USB 音频卡插入树莓派。当我在插入/拔出此声卡时触摸屏幕时,我的 GUI 被卡住并且无法监听任何新的触摸输入。当我插入/拔出设备后等待几秒钟时,问题并未出现,因此问题显然与此 USB 设备有关。

下图中,有ID号为7的TexasInstruments USB音频编解码器。只要插入此 USB 设备,/dev/input 就会显示“event0”。 “event1”是我的触摸屏上的事件,实际上由 GUI 使用。

在此输入图像描述

在上图中,您可以看到我的 xinputs 和我的事件。 /event0 是由我的音频编解码器创建的,这会导致问题 (id=7),而 /event1 是我的 i2c 触摸屏 (id=8)。可疑的是,音频编解码器被检测为“从键盘”,我不确定这是否也会对我的麻烦产生影响。

我偶然发现了一些线程,这些线程表明这个问题可能与多点触控有关,这会导致 PyQt5 上的一些问题。我还尝试使用EVIOCGRAB的“抓取”方法。该代码似乎有效,但我仍然遇到同样的问题。也许是因为 EVIOCGRAB 在声卡的第一个事件之后抓取设备,并且由于 GUI 也检测到第一个事件,所以它仍然崩溃。

这是代码:

dev0 = "/dev/input/event0"
try:
   fd0 = os.open(dev0, os.O_RDONLY | os.O_NDELAY)
   if fd0 >= 0:
        fcntl.ioctl(fd1, 0x40044590, 1)  # EVIOCGRAB = 0x40044590
        print("Grabbed ", dev0)
except:
   pass

我对整个输入 x 服务器管理不太熟悉,但我认为我需要通过 udev 规则或其他地方执行一些配置。

有人可以帮我解决这个问题吗?

谢谢

相关内容