ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

linux – 如何防止当前应用程序解释键盘?

2019-08-13 05:53:53  阅读:175  来源: 互联网

标签:linux keyboard x11 udev keyboard-event


我有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更干净,因为您还排除了可能想直接从设备读取的其他应用程序,并且您还可以控制排除的持续时间(只要您的应用程序运行).

标签:linux,keyboard,x11,udev,keyboard-event
来源: https://codeday.me/bug/20190813/1647622.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有