9

我正在用 C 编写一个 Linux 程序,我需要截取某些键盘敲击。

使用输入子系统(读/写/dev/input/eventX),我可以接收键盘敲击(使用“读取”功能)或模拟键盘敲击(使用“写入”功能)。

使用“读取”功能时,我可以捕获用户的键盘敲击,但此事件被传播,我不知道如何使用它。

4

1 回答 1

7

默认情况下,输入事件会传输到所有正在侦听的应用程序和驱动程序。但是,可以让应用程序通过evdev接口抓取设备 - 查看EVIOCGRAB ioctl(). 这只允许该特定应用程序从该特定设备接收事件。

这种方法的问题在于,您实际上无法阻止特定事件在收到后被传播——您只能事先抓取设备,然后捕获所有事件。因此,如果要过滤输入事件,则必须使用解决方法。

我在自己的evmapd守护程序中使用的解决方法包括获取原始设备并使用uinput子系统为另一台设备提供我需要的所有修改,包括重新映射的密钥和各种其他更改......

于 2012-09-01T20:31:45.183 回答