16

我试图捕捉键盘事件。例如,我想从头开始研究一个键盘记录器。经过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 中的某些东西可能会阻止它。

那么还有更多信息吗?最后说我如何从该文件中读取输入?还是有其他方法可以捕获键盘事件?

4

6 回答 6

15

你好,

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

看看 logkeys 项目:

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

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

希望这可以帮助,

马库斯。

于 2010-08-02T01:36:58.213 回答
14

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

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

EV=120013设备支持的事件的位掩码在哪里。正如这里所解释的。

这是它在logkeys中实现的方式

于 2014-03-21T19:51:16.437 回答
10

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

于 2010-05-05T18:09:42.797 回答
10

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

于 2014-02-05T11:33:55.440 回答
4

感谢您提供有关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 结果来自动检测键盘...

于 2019-11-29T02:50:28.513 回答
0

对于来这里寻找调试键盘问题的方法的人:尝试使用终端命令xev。它显示您的外围设备(键盘和鼠标)发​​出的所有输入事件。也可能证明对构建键盘记录器很有用。

于 2021-12-21T12:01:46.853 回答