web-dev-qa-db-ja.com

X11イベントのソースデバイスを認識

特定の問題があります-プログラムの入力イベントのソースデバイスを認識したいと思います。 USBポートに2つの同じタッチスクリーンが接続されていると仮定します。私のプログラムはXButtonPressedEventXButtonReleaseEventなどを取得していますが、最初のデバイスによって生成されたイベントと2番目のデバイスによって生成されたイベントの間で異なる動作をしたいと思います。イベントフィールドのいずれかをデバイス記述子、デバイスxinput id、デバイスシステムid、またはその他のデバイスを識別するものと照合します。

実装は可能ですか?

もしそうなら、私はこれを行う方法のヒントをいただければ幸いです。

よろしく、PG!

2
Piotrek

これは古いXInput拡張ではサポートされていないようです。ボタンを押すたびにデバイスIDを報告する XInput2 を使用する必要があります。元の著者は、いくつかの重要な側面( part1part2part )を説明するシリーズを彼のブログに投稿し、いくつかの完全なコード例が利用可能です- ここxinputコマンドラインユーティリティは両方の拡張機能をサポートしているため、その ソースコード 、特に test_xi2.c を確認して、XInput2の使用方法を把握できます。 。

xinput_calibratorは古いXInputバージョンを使用します( ここ を参照)。 XInput2を並行して使用することもできますが、YMMVは、2つのバージョンの相互運用性に関して特定の制限があるためです ここ

ただし、xinput_calibratorは変換行列の 貧弱な計算 を実行することがわかっているため、タッチスクリーンを調整するために誰かが小さなpython3スクリプト( xcal )を作成しました。 xinput_calibratorよりもはるかにシンプルであるため、ニーズに合わせて簡単に調整できます。さらに、python3-xlibライブラリー(ubuntuのリポジトリーで使用可能)はデフォルトでXInput2を使用するため(使用可能な場合)、したがって、各ボタンを押すイベントにはソースデバイスIDが含まれます。

1
danzel