我有3个USB键盘连接到Linux.通常,当在任何一个上书写时,字符“前进”到当前活动的应用程序,例如,到终端或任何其他应用程序.
但是,我通过使用某些perl module读取特定的/ dev / input / eventX设备直接从两个键盘读取键盘事件.当脚本正确读取和解码所有事件时,输入的键也将进入活动应用程序.
问题是:是否可以停止将键盘事件从特定键盘路由到活动应用程序?例如.稍微告诉内核不应将来自特定键盘的输入视为普通键盘输入.
编辑
因为X11从/ dev / input / event *中有设备节点的每个设备读取 – 就像这样,这里有两个可能的解决方案:
>稍微将USB“键盘”的名称改为另一个名称而不是eventN,例如/ dev / input / myinput0.不幸的是,udev规则不允许重命名设备. (rules.d中的NAME指令仅适用于网络设备,其他设备只能创建符号链接)
>稍微更改/usr/share/X11/xorg.conf.d/10-evdev.conf中的X11配置,忽略某些特定的“键盘式”设备 – 例如不要读每个eventN设备.目前在我的系统中它包含:
Section "InputClass"
Identifier "evdev keyboard catchall"
MatchIsKeyboard "on"
MatchDevicePath "/dev/input/event*"
Driver "evdev"
EndSection
任何IDEA如何做以上任何一项?
真实背景:我已经连接了两个USB-RFID阅读器.它们充当键盘,例如当我用RFID标签触摸阅读器时,它发送的RFID编号与键盘上输入的完全一致 – 例如读卡器就像普通键盘一样.
我的应用程序可以读取RFID事件(在后台),并且(当然)我不想让RFID中的字符进入活动窗口.
解决方法:
如果您正在读取/ dev / input / eventX,只需在其上执行EVIOCGRAB ioctl.您可以轻松地在Perl发布ioctl.当程序退出时,不要忘记释放抓取.
抓取将阻止所有其他设备(包括X)从此设备读取事件.
这比xinput更干净,因为您还排除了可能想直接从设备读取的其他应用程序,并且您还可以控制排除的持续时间(只要您的应用程序运行).