5

我有一个 Linux USB HID 设备(一个Hama MCE),我可以通过读取cat /dev/input/event7和手动读取它的事件cat /dev/input/event8。每当我按下设备上的一个键时,就会有几个字节可供使用上述cat命令之一读取。我在机器上默认安装了 Ubuntu Jaunty 64 位桌面。

我想我可以编写一个解析器来解释设备发出的字节,或者如果更方便,我会使用libhid 。

我的问题是:

  1. 如何防止文本模式虚拟控制台接收设备上的某些按键作为正常按键?截至目前,某些设备键会产生EnterBackSpacePageUp或数字键盘数字。
  2. 同样,如何防止 X 服务器从该设备接收键盘和鼠标事件?我有几个 USB 键盘和鼠标连接到计算机。我希望 X 服务器从所有这些设备接收事件,除了这个设备。
  3. 我该如何设置,只要设备连接到计算机,命令/usr/local/bin/keydumper /dev/input/event7 /dev/input/event8(或每个/dev/路径的一个命令)就会运行,并/dev/在命令行中替换正确的路径?
4

3 回答 3

8

根据 Linux USB HID 驱动程序开发人员的回答回答我自己的问题:

问题 1. 和 2.:做

ioctl(open("/dev/input/event7", O_RDONLY), EVIOCGRAB, 1);

只要这个文件句柄是打开的,所生成的事件就只会传到这个文件句柄(不会传到同一设备的其他 open() 或系统键盘或鼠标事件池)。一次最多一个进程可以在 HID 设备上保存一个成功的 EVIOCGRAB。Lirc 可以配置为执行 EVIOCGRAB。

问题 3:配置 udev 以在设备连接后启动程序。

于 2009-10-11T10:00:58.733 回答
1

我没有足够的分数可悲地发表评论。

如果您正在寻找 EVIOCGRAB 的定义,请尝试

    #include <linux/input.h>
于 2017-01-26T09:18:35.130 回答
-1

我认为所有问题的解决方案都可以是为您的设备编写自己的过滤设备驱动程序或自定义驱动程序。我知道这样的东西(过滤设备驱动程序)可以在 Windows 上使用,所以类似的东西可以在 Linux 上使用。在该过滤设备驱动程序中,您可以阻止来自您希望阻止的目标设备的所有不需要的事件,我并没有真正得到 3 个问题,所以我不知道如何回答。

于 2009-10-09T11:39:10.853 回答