キーボードを無効にしますが、それでもキーボードからの読み取りを許可します。

キーボードを無効にしますが、それでもキーボードからの読み取りを許可します。

バックグラウンドでデーモンとして実行される特定のアプリケーションを制御するために使用したいUSB数字キーパッドがあります。デーモンはPythonで書かれており、現在python-evdevそれを使用して入力を読み込んでおり、うまく動作します。

しかし、キーボードに入力するすべての内容は依然として正常に処理されます。これは、キーボード入力を処理するすべてのアプリケーション(コンピュータの起動時に表示されるログインプロンプトを含む)にもキーストロークが挿入されることを意味します。これは少し迷惑なことです。

キーボードイベントの「一般的な」処理を無効にし、キーを押した状態を手動で読み取るだけを許可する方法はありますか? Xの実行に依存しないことを願っています。

これまでに私が見つけたすべては、キーボードを完全に無効にしたり、Xを使用することに関連しているようです。

私が持っているアイデアの1つは、すべてのキーをデッドキーにマッピングするキーマップを作成することです。これにより出力がブロックされますが、実際のキーコードを読み取ることができます。しかし、この問題に対するより簡単な解決策があるはずです。

ベストアンサー1

カーネルソースコードを直接知っている場合は、グローバルハンドラで特定の入力デバイスを切断する方法はありません(参考文献を参照/proc/bus/input/handlers)。kbdハンドラは常にすべての入力イベントを受け取り、キー押下イベントをキー押下イベントに変換します。

ただし、次のことができます。捕まえるEVIOCGRABプログラムで直接またはevtest --grab /dev/input/eventXテスト用などのツールを使用してデバイス内のioctrlsで使用するように特別に設計された入力デバイス。インポートが有効になっている限り、イベントは他のどんなものでも処理しないでください。

慣れていませんが、python-evdevPythonでGrabモードをサポートしていなくても、ioctlを実行することは難しくありません。

(私は怠惰でXでのみテストしましたが、うまくいきますが、Xなしでは動作しない理由はわかりません)。

おすすめ記事