我正在用 C 编写一个 Linux 程序,我需要截取某些键盘敲击。
使用输入子系统(读/写/dev/input/eventX),我可以接收键盘敲击(使用“读取”功能)或模拟键盘敲击(使用“写入”功能)。
使用“读取”功能时,我可以捕获用户的键盘敲击,但此事件被传播,我不知道如何使用它。
默认情况下,输入事件会传输到所有正在侦听的应用程序和驱动程序。但是,可以让应用程序通过evdev
接口抓取设备 - 查看EVIOCGRAB
ioctl()
. 这只允许该特定应用程序从该特定设备接收事件。
这种方法的问题在于,您实际上无法阻止特定事件在收到后被传播——您只能事先抓取设备,然后捕获所有事件。因此,如果要过滤输入事件,则必须使用解决方法。
我在自己的evmapd
守护程序中使用的解决方法包括获取原始设备并使用uinput
子系统为另一台设备提供我需要的所有修改,包括重新映射的密钥和各种其他更改......