如何使用输入子系统在Linux上使用键盘事件

zcc*_*ing 7 linux keyboard hook input

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

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

当使用"读取"功能时,我可以捕获用户键盘敲击,但是这个事件被传播,我不知道如何使用它.

thk*_*ala 5

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

这种方法的问题在于,您实际上无法阻止特定事件收到传播- 您只能事先获取设备,然后捕获所有事件.因此,如果要筛选输入事件,则必须使用变通方法.

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