バックグラウンドでデーモンとして実行される特定のアプリケーションを制御するために使用したいUSB数字キーパッドがあります。デーモンはPythonで書かれており、現在python-evdev
それを使用して入力を読み込んでおり、うまく動作します。
しかし、キーボードに入力するすべての内容は依然として正常に処理されます。これは、キーボード入力を処理するすべてのアプリケーション(コンピュータの起動時に表示されるログインプロンプトを含む)にもキーストロークが挿入されることを意味します。これは少し迷惑なことです。
キーボードイベントの「一般的な」処理を無効にし、キーを押した状態を手動で読み取るだけを許可する方法はありますか? Xの実行に依存しないことを願っています。
これまでに私が見つけたすべては、キーボードを完全に無効にしたり、Xを使用することに関連しているようです。
私が持っているアイデアの1つは、すべてのキーをデッドキーにマッピングするキーマップを作成することです。これにより出力がブロックされますが、実際のキーコードを読み取ることができます。しかし、この問題に対するより簡単な解決策があるはずです。
ベストアンサー1
カーネルソースコードを直接知っている場合は、グローバルハンドラで特定の入力デバイスを切断する方法はありません(参考文献を参照/proc/bus/input/handlers
)。kbd
ハンドラは常にすべての入力イベントを受け取り、キー押下イベントをキー押下イベントに変換します。
ただし、次のことができます。捕まえるEVIOCGRAB
プログラムで直接またはevtest --grab /dev/input/eventX
テスト用などのツールを使用してデバイス内のioctrlsで使用するように特別に設計された入力デバイス。インポートが有効になっている限り、イベントは他のどんなものでも処理しないでください。
慣れていませんが、python-evdev
PythonでGrabモードをサポートしていなくても、ioctlを実行することは難しくありません。
(私は怠惰でXでのみテストしましたが、うまくいきますが、Xなしでは動作しない理由はわかりません)。