如何在Ubuntu Jaunty下从HID设备读取事件?

时间:2009-10-05 19:40:17

标签: linux keyboard mouse usb hid

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

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

我的问题是:

  1. 如何阻止文本模式虚拟控制台接收设备上的某些按键作为普通按键?截至目前,某些设备密钥会生成 Enter BackSpace PageUp 或数字小键盘数字。
  2. 同样,如何阻止X服务器从此设备接收键盘和鼠标事件?我有几个USB键盘和鼠标连接到计算机。我希望X服务器接收来自所有这些设备的事件,除了这个设备。
  3. 如何设置当设备连接到计算机时,命令/usr/local/bin/keydumper /dev/input/event7 /dev/input/event8(或每个/dev/路径的一个命令)将运行,并使用正确的/dev/在命令行中替换的路径?

3 个答案:

答案 0 :(得分:5)

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

问题1和2:做

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

只要此文件句柄处于打开状态,生成的事件就会发生 到这个文件句柄(不是相同设备的其他open()或者 系统键盘或鼠标事件池)。最多一个过程可以容纳一个 成功的EVIOCGRAB一次在HID设备上。可以配置Lirc 做一个EVIOCGRAB。

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

答案 1 :(得分:0)

我没有足够的观点悲伤地评论。

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

    #include <linux/input.h>

答案 2 :(得分:-1)

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