首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何防止当前应用程序对键盘进行解释?

如何防止当前应用程序对键盘进行解释?
EN

Unix & Linux用户
提问于 2017-06-16 08:09:29
回答 2查看 3K关注 0票数 4

我有3个USB键盘连接到Linux上.通常,在任何一种情况下,字符都会“转到”当前活动的应用程序,例如终端或其他应用程序。

但是,我通过使用一些/dev/input/eventX读取特定的perl模块设备,直接从两个键盘读取键盘事件。当脚本正确读取和解码所有事件时,输入的键也进入活动应用程序。

问题是:是否可以停止将键盘事件从特定键盘路由到活动应用程序?例如,告诉内核,来自特定keybord的输入不应被视为普通键盘输入。

编辑

因为X11从每个设备中读取/dev/input/event* -古怪的设备节点,所以这里有两个可能的解决方案:

  1. 将USB“键盘”的名称更改为另一个名称,而不是eventN,例如/dev/input/myinput0。不幸的是,udev规则不允许重命名设备。( NAME指令在rules.d中只适用于网络设备,因为其他设备只能创建符号链接)
  2. 稍微修改一下X11配置,在/usr/share/X11/xorg.conf.d/10-evdev.conf中,忽略某些特定的“键盘式”设备--例如,不要读取每个eventN设备。目前在我的系统中包含:
代码语言:javascript
复制
Section "InputClass"
        Identifier "evdev keyboard catchall"
        MatchIsKeyboard "on"
        MatchDevicePath "/dev/input/event*"
        Driver "evdev"
EndSection

知不知道如何做上述任何一件事?

真实背景:我附了两个USB-RFID读写器.它们充当键盘,例如,当我用RFID标签触摸读取器时,它发送RFID号码,就像在键盘上键入的那样--例如,读取器就像普通的键盘。我的应用程序可以读取RFID事件(在后台),当然,我不希望将RFID中的字符输入活动窗口。

EN

回答 2

Unix & Linux用户

回答已采纳

发布于 2017-06-17 08:16:27

如果您正在阅读/dev/input/eventX,只需在上面做一个EVIOCGRAB ioctl。您可以很容易地在Perl中发出ioctl。不要忘记当你的程序退出时释放抓取。

抓取将阻止包括X在内的所有其他设备从该设备读取事件。

这比xinput更干净,因为您还排除了其他希望直接从设备读取的应用程序,还可以控制排除的持续时间(只要应用程序运行)。

票数 2
EN

Unix & Linux用户

发布于 2017-06-17 00:03:39

您可以使用xinput命令在X下禁用输入设备。运行xinput list列出可用设备,然后运行xinput disable …按名称或编号禁用设备。

Udev可能是一条路,但X11是我从头上知道的方式。

票数 1
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/371466

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档