私の目標は、Linuxでマウス入力を取得することです。これでファイルから入力を取得しようとしています/dev/input
。私の特定のシステムでは、このファイルは私の/dev/input/event10
マウスに対応し、マウス入力に対してEV_RELイベントとEV_KEYイベントを返すことを知っています。しかし、私はこれが普遍的ではなく、他の/dev/input/event#
ファイルが他のデバイスに対応していることを知っています。私はこのファイルについて知っていますが、/dev/input/mice
明らかにこのファイルは「レガシーシステムハッキング」そのため、使用はお勧めできません。私の問題の鍵は、どの入力イベントファイルがマウスに対応するかを決定することです。/proc/bus/input/devices
そのデバイスに対応するイベントファイルを検索してみましたが、デバイス名に「マウス」という単語以外には何のためのものか表示がないようでした。例えば。マウスとキーボード。私が試したのは、このファイルから入力を取得することだけでした。しかし、入力を得るための代替システムがある場合は、喜んで聞きたいです。
答え1
回答が遅くなりましたが、後で誰かがこの問題を偶然発見した場合に備えて、Linuxシステムで特定の種類のデバイスを(アルゴリズム的に)見つける方法の概要があります。
Linuxはマウス、キーボード、ゲームコントローラなどを区別しません。理論的には、入力装置はあらゆるタイプのイベントデータを送信することができ、特定のタイプの制限を「準拠」する必要はない。しかし、、ほとんどの実際のデバイスは明らかにこれと同じではありません。これが、sysfsがデバイスの「機能」と呼ばれるデバイスがeventXファイルに書き込むデータ型に関する情報を提供する理由です。以下は、デバイス機能に関する情報をまとめたものです。
/sys/class/input/eventX/device/capabilities
9つのテキストファイルが含まれています。abs
、、、、、、、、およびは、ff
記録された「イベントタイプ」に対応します。key
led
msc
rel
snd
sw
ここ。ev
デフォルトでは、ゼロ以外のデータを含む他のファイルについて説明します。
各ファイルには、スペースで区切られた16の領域で区切られたASCII 16進文字が含まれています。 16進文字を読み、それをバイナリにデコードする必要があります。右から左へ。グループに16文字未満が含まれている場合、欠落している文字は暗黙的にゼロであるため、生成されたバイナリに手動で追加する必要があります。バイナリデータの各ビットは、デバイスが特定のビットを生成できるかどうかを示すブールフラグです。イベントコード。
例:デバイスXはKEY_ESC(Escapeキー)イベントを生成できますか?
/sys/class/input/eventX/device/capabilities/key
ASCIIで読む- 文字をバイナリでデコードします(上記のように)。
- 0 から始まるインデックス KEY_ESC でビットを確認します (次のとおり)。イベントコードを入力してくださいh、KEY_ESC = 1)
- このビットが1の場合、デバイスは可能KEY_ESCイベントを送信します(つまり、マウスの候補から削除できるキーボードである可能性があります)。このビットが0の場合いいえこれらのイベントを送信します。
マウスボタンもエンコードされていますが、key
そのマクロにはプレフィックスが付いているため、BTN
方法は基本的に同じです。あなたのケースに関連するのは、通常、マウスがイベントREL_<...>
を送信できる唯一のデバイスであるという事実です。これについての詳細は、以前にリンクされたLinuxカーネルのドキュメントで確認できます。
はい、多くの作業が必要ですが、一般的であり、ハードウェアとその機能に関する多くの手がかりを提供できます。
ついに、私のGitHubに詳細なドキュメントがあります。誰にも興味があれば。