PyQt5 /dev/input/eventX 이벤트를 무시하고 하나의 특정 이벤트 장치만 사용하는 방법은 무엇입니까?

PyQt5 /dev/input/eventX 이벤트를 무시하고 하나의 특정 이벤트 장치만 사용하는 방법은 무엇입니까?

Raspberry Pi에서 PyQt5 GUI를 실행하는 데 몇 가지 문제가 있습니다. GUI로 작업하는 동안 USB 오디오 카드를 Raspberry Pi에 연결해야 하는 경우가 있습니다. 이 사운드 카드를 연결/분리하는 동안 화면을 터치하면 GUI가 멈추고 새로운 터치 입력을 수신할 수 없습니다. 장치를 연결/분리한 후 몇 초간 기다려도 문제가 나타나지 않으므로 문제는 분명히 이 USB 장치와 관련이 있습니다.

아래 그림에는 ID 번호 7의 TexasInstruments USB 오디오 코덱이 있습니다. 이 USB 장치가 연결되어 있으면 /dev/input에 "event0"이 표시됩니다. "event1"은 내 터치 스크린의 이벤트이며 실제로 GUI에서 사용됩니다.

여기에 이미지 설명을 입력하세요.

위 이미지에서 내 xinput과 내 이벤트를 볼 수 있습니다. /event0은 문제를 일으키는 오디오 코덱에 의해 생성되었으며(id=7) /event1은 내 i2c 터치스크린(id=8)입니다. 의심스럽게도 오디오 코덱이 "키보드에서"로 감지되었습니다. 이것이 문제의 원인인지 확실하지 않습니다.

나는 이 문제가 PyQt5에서 일부 문제를 일으키는 멀티터치와 관련이 있을 수 있다고 제안하는 일부 스레드를 우연히 발견했습니다. 또한 EVIOCGRAB의 "grab" 방법을 사용해 보았습니다. 코드가 작동하는 것 같지만 여전히 같은 문제가 있습니다. 어쩌면 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 규칙이나 다른 곳을 통해 일부 구성을 수행해야 할 것 같습니다.

누구든지 이 문제를 해결하도록 도와줄 수 있나요?

감사해요

관련 정보