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ルールや他の場所を介していくつかの構成を実行する必要があるようです。
誰でもこの問題を解決するのに役立ちますか?
ありがとう