阻止具有相同时间戳的多个按键事件

阻止具有相同时间戳的多个按键事件

我的键盘有故障,当我按一个键时,它会触发其他键。例如,当我点击键盘上的字母“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

请注意,两个按键事件具有相同的时间戳。我的问题是,如果第二个 keyPress 事件与前一个 keyPress 事件具有相同的时间戳,是否有办法阻止它?

或者有没有其他方法可以阻止第二个输入?

答案1

需要一些 Python 编码的解决方案应该可以使用埃夫德夫库从键盘读取事件,过滤它们以抑制具有相同时间戳的第二个事件,然后将它们注入到新的 uinput 键盘设备中。

Python evdev 教程中提供了所需部分代码的示例,例如创建具有另一个设备功能的无输入设备,并在同一页上, 列出可访问的事件设备, 列出设备功能找到键盘, 读书活动与时间戳,和 注入输入

另请参阅抓住函数,以停止 X11 服务器上发生的原始键盘事件。


或者,有一个高度可配置的实用程序埃夫西韦它可以在输入键盘和创建的 uinput 输出键盘设备之间进行多种过滤。我不熟悉该程序,它是用 Rust 编写的,但您可能需要用该语言添加一些代码来识别和抑制具有相同时间戳的事件。

相关内容