我试图捕捉键盘事件。 例如我想从头开始钻取键盘记录器。 经过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阻止它的事情。所以更多信息? 并且说到底如何从该文件中读取输入? 还是有其他方法来捕捉键盘事件吗?
答案 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结果来创建键盘的自动检测...