我有3个USB键盘连接到Linux。通常,在任何一个上书写时,这些字符都会“转到”当前活动的应用程序,例如到终端或任何其他应用程序。
但是,我通过/dev/input/eventX
使用一些perl模块读取特定的设备来直接从两个键盘读取键盘事件。在脚本正确读取和解码所有事件的同时,输入的密钥也将进入活动应用程序。
问题是:可以停止将键盘事件从特定键盘路由到活动应用程序吗?例如,有些告诉内核,来自特定键盘的输入不应视为普通键盘输入。
编辑
因为X11
从每个具有/dev/input/event*
-kooks之类的设备节点的设备读取数据,所以这里有2种可能的解决方案:
eventN
,例如/dev/input/myinput0
。不幸的是,udev
规则不允许重命名设备。(该NAME
指令rules.d
仅适用于网络设备,其他设备只能创建符号链接)X11
配置,/usr/share/X11/xorg.conf.d/10-evdev.conf
以忽略某些特定的“类似键盘的”设备-例如,不要读取每个eventN
设备。当前在我的系统中它包含:Section "InputClass"
Identifier "evdev keyboard catchall"
MatchIsKeyboard "on"
MatchDevicePath "/dev/input/event*"
Driver "evdev"
EndSection
ANY IDEA如何执行以上任何操作?
真正的背景:我已经连接了两个USB-RFID读取器。它们充当键盘,例如,当我用RFID标签触摸读取器时,它会发送与在键盘上键入的完全相同的RFID编号-例如,读取器充当普通键盘。我的应用程序可以(在后台)读取RFID事件,并且(当然)我不希望将RFID中的字符输入到活动窗口中。
如果您仍在阅读/dev/input/eventX
,只需对其进行一个EVIOCGRAB
ioctl。您可以在Perl中轻松发布ioctl 。当程序退出时,别忘了释放抓斗。
抓取将阻止所有其他设备(包括X)从该设备读取事件。
这比干净xinput
,因为您还排除了可能要直接从设备读取的其他应用程序,并且还可以控制排除的持续时间(只要您的应用程序运行)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句