Linux键盘事件捕获/ dev / inputX

时间:2010-05-05 17:37:43

标签: linux linux-kernel linux-device-driver

我试图捕捉键盘事件。 例如我想从头开始钻取键盘记录器。 经过2个小时的战斗,我发现了以下内容

neel@pc1$ ls -l /dev/input/by-id
lrwxrwxrwx 1 root root 9 2010-05-05 21:33 usb-Plus_More_Enterprise_LTD._USB-compliant_keyboard-event-kbd -> ../event1
lrwxrwxrwx 1 root root 9 2010-05-05 21:33 usb-Plus_More_Enterprise_LTD._USB-compliant_keyboard-event-mouse -> ../event2
lrwxrwxrwx 1 root root 9 2010-05-05 21:33 usb-Plus_More_Enterprise_LTD._USB-compliant_keyboard-mouse -> ../mouse1

但是当我试图

neel@pc1$ sudo cat /dev/input/usb-Plus_More_Enterprise_LTD._USB-compliant_keyboard-event-kbd

它什么都不产生 那里没有输出

经过多一点搜索之后,现在我正在思考Xorg阻止它的事情。

所以更多信息? 并且说到底如何从该文件中读取输入? 还是有其他方法来捕捉键盘事件吗?

5 个答案:

答案 0 :(得分:14)

您好

我最近试图完成类似的事情。

看看logkeys项目:

http://code.google.com/p/logkeys/

如果您下载源代码并查看logkeys.cc文件,您将找到一种方法如何自动检测键盘使用的/ dev / input / event 。这将允许您从键盘读取原始扫描代码,无论当前哪个程序具有焦点。 logkeys程序还显示了如何将扫描代码转换为字符以及其他有用的技巧。

希望这有帮助,

马库斯。

答案 1 :(得分:12)

/ proc / bus / input / devices 文件上的简单grep操作将产生插入机器的所有键盘:

 grep -E  'Handlers|EV=' /proc/bus/input/devices | \
 grep -B1 'EV=120013' | \
 grep -Eo 'event[0-9]+'

其中EV=120013是设备支持的事件的位掩码。正如here所述。

这是在logkeys

中实施的方式

答案 2 :(得分:10)

您正在阅读错误的设备。尝试所有/ dev / input / event *或查看/var/log/Xorg.0.log,了解哪些设备用于键盘。

答案 3 :(得分:9)

我建议使用evtest应用程序,它列出了所有输入设备,并允许您监控他们的事件。

答案 4 :(得分:1)

感谢您提供有关ls -l /dev/input/by-id的线索,它对我帮助很大!。

defenderdz@defenderdz-pc:~$ ls -l /dev/input/by-id | grep kbd
lrwxrwxrwx 1 root root  9 nov.  28 14:04 usb-Logitech_USB_Receiver-event-kbd -> ../event7
lrwxrwxrwx 1 root root 10 nov.  29 00:33 usb-NOVATEK_USB_Keyboard-event-kbd -> ../event26
lrwxrwxrwx 1 root root  9 nov.  28 14:04 usb-SONiX_USB_DEVICE-event-kbd -> ../event3
defenderdz@defenderdz-pc:~$ 

'kbd'是用于键盘设备的后缀(我连接了3个键盘)。

您的错误是您正在访问错误的文件夹

/dev/input/而不是/dev/input/by-id

在我的示例中,正确的路径是:

defenderdz@defenderdz-pc:~$ sudo cat /dev/input/by-id/usb-NOVATEK_USB_Keyboard-event-kbd
���]�I���]�I���]�Ia���]�b���]�b���]�b���]�����]�����]��s���]����]����]����]�>
���]�>
 ���]�>
d���]�8
       ���]�8
              ���]�8
                    ���]�����]�����]��s���]H|���]H|���]H|���]�����]�� ���]��d���]Ǵ���]Ǵ ���]Ǵ

以您的情况

neel@pc1$ sudo cat /dev/input/by-id/usb-Plus_More_Enterprise_LTD._USB-compliant_keyboard-event-kbd

我并不是说这是最好的解决方案,但对我来说很好。 您甚至可以通过解析ls结果来创建键盘的自动检测...