我有3个USB键盘连接到Linux上.通常,在任何一种情况下,字符都会“转到”当前活动的应用程序,例如终端或其他应用程序。
但是,我通过使用一些/dev/input/eventX读取特定的perl模块设备,直接从两个键盘读取键盘事件。当脚本正确读取和解码所有事件时,输入的键也进入活动应用程序。
问题是:是否可以停止将键盘事件从特定键盘路由到活动应用程序?例如,告诉内核,来自特定keybord的输入不应被视为普通键盘输入。
因为X11从每个设备中读取/dev/input/event* -古怪的设备节点,所以这里有两个可能的解决方案:
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真实背景:我附了两个USB-RFID读写器.它们充当键盘,例如,当我用RFID标签触摸读取器时,它发送RFID号码,就像在键盘上键入的那样--例如,读取器就像普通的键盘。我的应用程序可以读取RFID事件(在后台),当然,我不希望将RFID中的字符输入活动窗口。
发布于 2017-06-17 08:16:27
如果您正在阅读/dev/input/eventX,只需在上面做一个EVIOCGRAB ioctl。您可以很容易地在Perl中发出ioctl。不要忘记当你的程序退出时释放抓取。
抓取将阻止包括X在内的所有其他设备从该设备读取事件。
这比xinput更干净,因为您还排除了其他希望直接从设备读取的应用程序,还可以控制排除的持续时间(只要应用程序运行)。
发布于 2017-06-17 00:03:39
您可以使用xinput命令在X下禁用输入设备。运行xinput list列出可用设备,然后运行xinput disable …按名称或编号禁用设备。
Udev可能是一条路,但X11是我从头上知道的方式。
https://unix.stackexchange.com/questions/371466
复制相似问题