
キーボードに欠陥があり、一方のキーを押すと別のキーが実行されます。たとえば、キーボードで「D」をクリックすると、「D5」が送信されます。
$xev -event keyboard
KeyPress event, serial 28, synthetic NO, window 0x3c00001,
root 0x929, subw 0x0, time 7185644, (351,334), root:(2087,693),
state 0x10, keycode 40 (keysym 0x64, d), same_screen YES,
XLookupString gives 1 bytes: (64) "d"
XmbLookupString gives 1 bytes: (64) "d"
XFilterEvent returns: False
KeyPress event, serial 28, synthetic NO, window 0x3c00001,
root 0x929, subw 0x0, time 7185644, (351,334), root:(2087,693),
state 0x10, keycode 84 (keysym 0xffb5, KP_5), same_screen YES,
XLookupString gives 1 bytes: (35) "5"
XmbLookupString gives 1 bytes: (35) "5"
XFilterEvent returns: False
KeyRelease event, serial 28, synthetic NO, window 0x3c00001,
root 0x929, subw 0x0, time 7185716, (351,334), root:(2087,693),
state 0x10, keycode 40 (keysym 0x64, d), same_screen YES,
XLookupString gives 1 bytes: (64) "d"
XFilterEvent returns: False
KeyRelease event, serial 28, synthetic NO, window 0x3c00001,
root 0x929, subw 0x0, time 7185716, (351,334), root:(2087,693),
state 0x10, keycode 84 (keysym 0xffb5, KP_5), same_screen YES,
XLookupString gives 1 bytes: (35) "5"
XFilterEvent returns: False
両方のキー押下イベントは同じタイムスタンプを持ちます。私の質問は、2番目のkeyPressイベントが以前のkeyPressイベントと同じタイムスタンプを持つ場合にこれを防ぐ方法はありますか?
それとも、2次入力を防ぐ他の方法はありますか?
答え1
いくつかのPythonコーディングを必要とするソリューションが機能するはずです。evdevライブラリはキーボードからイベントを読み取り、それをフィルタリングして同じタイムスタンプを持つ2番目のイベントを抑制し、新しいuinputキーボードデバイスに注入します。
コードの必須部分の例は、Python evdevチュートリアルで提供されています。他のデバイスの機能を使用して入力なしのデバイスを作成する、そして同じページで アクセス可能なイベントデバイスのリスト、 デバイス機能のリストキーボードを探す、 読書活動タイムスタンプ付き 入力注入。
また見てください捕まえるX11 サーバーでネイティブキーボードイベントが発生しないようにする機能です。
または、高度に設定可能なユーティリティがあります。効果的な入力キーボードと生成されたuinput出力キーボードデバイス間のさまざまなフィルタリングを可能にします。私はこのプログラムに慣れていないRustで書かれていますが、同じタイムスタンプを持つイベントを識別して抑制するために、その言語でいくつかのコードを追加する必要があるかもしれません。