特定の問題があります-プログラムの入力イベントのソースデバイスを認識したいと思います。 USBポートに2つの同じタッチスクリーンが接続されていると仮定します。私のプログラムはXButtonPressedEvent
、XButtonReleaseEvent
などを取得していますが、最初のデバイスによって生成されたイベントと2番目のデバイスによって生成されたイベントの間で異なる動作をしたいと思います。イベントフィールドのいずれかをデバイス記述子、デバイスxinput id、デバイスシステムid、またはその他のデバイスを識別するものと照合します。
実装は可能ですか?
もしそうなら、私はこれを行う方法のヒントをいただければ幸いです。
よろしく、PG!
これは古いXInput拡張ではサポートされていないようです。ボタンを押すたびにデバイスIDを報告する XInput2 を使用する必要があります。元の著者は、いくつかの重要な側面( part1 、 part2 、 part )を説明するシリーズを彼のブログに投稿し、いくつかの完全なコード例が利用可能です- ここ 。 xinput
コマンドラインユーティリティは両方の拡張機能をサポートしているため、その ソースコード 、特に test_xi2.c を確認して、XInput2の使用方法を把握できます。 。
xinput_calibrator
は古いXInputバージョンを使用します( ここ を参照)。 XInput2を並行して使用することもできますが、YMMVは、2つのバージョンの相互運用性に関して特定の制限があるためです ここ 。
ただし、xinput_calibrator
は変換行列の 貧弱な計算 を実行することがわかっているため、タッチスクリーンを調整するために誰かが小さなpython3スクリプト( xcal )を作成しました。 xinput_calibrator
よりもはるかにシンプルであるため、ニーズに合わせて簡単に調整できます。さらに、python3-xlib
ライブラリー(ubuntuのリポジトリーで使用可能)はデフォルトでXInput2を使用するため(使用可能な場合)、したがって、各ボタンを押すイベントにはソースデバイスIDが含まれます。