同じタイムスタンプを使用して複数のキーを押すイベントをブロックする

同じタイムスタンプを使用して複数のキーを押すイベントをブロックする

キーボードに欠陥があり、一方のキーを押すと別のキーが実行されます。たとえば、キーボードで「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で書かれていますが、同じタイムスタンプを持つイベントを識別して抑制するために、その言語でいくつかのコードを追加する必要があるかもしれません。

おすすめ記事