Linux键盘事件捕获/ dev/inputX

Nee*_*asu 13 linux linux-device-driver linux-kernel

我试图抓住键盘事件.例如,我想从头开始钻取键盘记录器.经过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
Run Code Online (Sandbox Code Playgroud)

但是当我努力的时候

neel@pc1$ sudo cat /dev/input/usb-Plus_More_Enterprise_LTD._USB-compliant_keyboard-event-kbd
Run Code Online (Sandbox Code Playgroud)

它没有产生任何东西,没有输出

经过多一点搜索之后我现在正在思考Xorg阻塞它的可能性.

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

小智 14

你好,

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

看看logkeys项目:

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

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

希望这可以帮助,

马库斯.


小智 14

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

 grep -E  'Handlers|EV=' /proc/bus/input/devices | \
 grep -B1 'EV=120013' | \
 grep -Eo 'event[0-9]+'
Run Code Online (Sandbox Code Playgroud)

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

这是在logkeys中实现的方式


小智 10

你正在读错了设备.尝试所有/ dev/input/event*或在/var/log/Xorg.0.log中查找用于键盘的设备.


mad*_*at1 9

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


小智 5

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

\n\n
defenderdz@defenderdz-pc:~$ ls -l /dev/input/by-id | grep kbd\nlrwxrwxrwx 1 root root  9 nov.  28 14:04 usb-Logitech_USB_Receiver-event-kbd -> ../event7\nlrwxrwxrwx 1 root root 10 nov.  29 00:33 usb-NOVATEK_USB_Keyboard-event-kbd -> ../event26\nlrwxrwxrwx 1 root root  9 nov.  28 14:04 usb-SONiX_USB_DEVICE-event-kbd -> ../event3\ndefenderdz@defenderdz-pc:~$ \n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n\n

您的错误是您访问了错误的文件夹

\n\n

/dev/input/代替/dev/input/by-id

\n\n

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

\n\n
defenderdz@defenderdz-pc:~$ sudo cat /dev/input/by-id/usb-NOVATEK_USB_Keyboard-event-kbd\n\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd]\xef\xbf\xbdI\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd]\xef\xbf\xbdI\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd]\xef\xbf\xbdIa\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd]\xef\xbf\xbdb\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd]\xef\xbf\xbdb\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd]\xef\xbf\xbdb\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd]\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd]\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd]\xef\xbf\xbd\xef\xbf\xbds\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd]\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd]\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd]\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd]\xef\xbf\xbd>\n\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd]\xef\xbf\xbd>\n \xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd]\xef\xbf\xbd>\nd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd]\xef\xbf\xbd8\n       \xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd]\xef\xbf\xbd8\n              \xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd]\xef\xbf\xbd8\n                    \xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd]\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd]\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd]\xef\xbf\xbd\xef\xbf\xbds\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd]H|\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd]H|\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd]H|\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd]\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd]\xef\xbf\xbd\xef\xbf\xbd \xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd]\xef\xbf\xbd\xef\xbf\xbdd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd]\xc7\xb4\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd]\xc7\xb4 \xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd]\xc7\xb4\n
Run Code Online (Sandbox Code Playgroud)\n\n

在你的情况下

\n\n
neel@pc1$ sudo cat /dev/input/by-id/usb-Plus_More_Enterprise_LTD._USB-compliant_keyboard-event-kbd\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n