Linux を使用している場合、入力デバイスを区別する最善の方法は、Linux Event Interface を使用することです。デバイスのハードウェア固有の入力がデコードされた後、中間の Linux 固有のイベント構造に変換され、/dev/input/
の下にある 1 つ以上のキャラクター デバイスを読み取ることによって利用可能になります。 .ちなみに、これは使用するプログラミング言語とは完全に無関係です。
各ハードウェア デバイスは独自の /dev/input/eventX
を取得します デバイス、および集計もあります (例:/dev/input/mice
システム内のすべてのマウスの動きを表します)。お使いのシステムにも /dev/input/by-path
がある可能性があります と /dev/input/by-id
.
ioctl
があります EVIOCGNAME
と呼ばれる デバイスの名前を人間が読める文字列として返すか、 /dev/input/by-id/usb-Logitech_USB_Gaming_Mouse-mouse
のようなものを使用できます .
デバイスを開くと、入力ハードウェアからイベントが到着するたびに、データのパケットが取得されます。 C が読める場合は、ファイル /usr/include/linux/input.h
を学習できます。 これは、このものがどのように機能するかを正確に示しています。そうでない場合は、必要なすべての情報を提供するこの質問を読むことができます。
イベント インターフェースの良い点は、必要なデバイスを見つけるだけで、その入力デバイスからのみ入力を読み取ることができるということです。 、他のすべてを無視します。また、端末から「調理済み」の文字ストリームを読み取るだけでは、通常は取得できないキー、ボタン、およびコントロールに関する通知も取得できます。 など
悪い点は、イベント インターフェイスが「調理された」文字を返さないことです。キーに数値コードを使用するだけです (各キーに対応するコードは、前述のヘッダー ファイルにありますが、event.py.py の Python ソースにもあります)。入力デバイスに特殊なキー/ボタンがある場合は、適切な数値が得られるまで少し実験する必要があるかもしれません.
別のアプローチ (「キーボード」に多くのキーがない場合 - 多くのデバイスがキーボードのふりをしている場合) は、各キーボードにキーマッピングを個別に適用し、キーが確実に区別されるようにすることです。
これについては、https://superuser.com/questions/760602/how-to-remap-keys-under-linux-for-a-specific-keyboard-only で概説されています。主なポイントは setxkbmap
です デバイス引数を取ります。
raw 入力アプローチを使用している場合、lsinput は raw デバイスを見つけます。