禁用键盘但仍允许从中读取

禁用键盘但仍允许从中读取

我有一个 USB 数字键盘,我想用它来控制在后台作为守护进程运行的特定应用程序。该守护进程是用 Python 编写的,我目前正在使用python-evdev它读取输入,效果很好。

但是,我在键盘上输入的所有内容仍然会正常处理,这意味着按键也会插入到处理键盘输入的任何应用程序中(包括计算机启动时显示的登录提示)。这有点烦人。

有没有办法禁用键盘事件的“正常”处理,而只允许手动读取按键状态?希望它不依赖于运行 X。

到目前为止我发现的所有内容似乎都与完全禁用键盘或使用 X 有关。

我的一个想法是创建一个键映射,将所有键映射到死键,这可以防止任何输出,但仍然允许我读取实际的键码。不过,似乎应该有一个更简单的解决方案来解决这个问题。

答案1

如果我直接了解内核源代码,则无法将特定输入设备与全局处理程序断开连接(请参阅 参考资料/proc/bus/input/handlers):kbd处理程序将始终接收所有输入事件,并将按键事件转换为按键事件。

但是,您可以抓住EVIOCGRAB一个专门与设备上的 ioctrl一起使用的输入设备,可以直接从您的程序中使用,也可以使用诸如evtest --grab /dev/input/eventX(用于测试)之类的工具。只要抓取处于活动状态,事件就不应该被其他任何东西处理。

我不熟悉python-evdev,但即使它不支持抓取模式,在Python中执行ioctls也不难。

(我很懒,只在 X 下进行了测试,它可以工作,但我看不出为什么它在没有 X 的情况下不能工作)。

相关内容