【问题标题】:How do I read events from a HID device under Ubuntu Jaunty?如何在 Ubuntu Jaunty 下从 HID 设备读取事件?
【发布时间】:2010-12-04 01:35:36
【问题描述】:
我有一个 Linux USB HID 设备(Hama MCE),我可以通过读取 cat /dev/input/event7 和 cat /dev/input/event8 手动读取它的事件。每当我按下设备上的一个键时,就会有几个字节可供使用上述cat 命令之一读取。我在机器上默认安装了 Ubuntu Jaunty 64 位桌面。
我想我可以编写一个解析器来解释设备发出的字节,或者如果更方便的话我会使用libhid。
我的问题是:
- 如何防止文本模式虚拟控制台像正常按键一样接收设备上的某些按键?到目前为止,某些设备键会产生 Enter、BackSpace、PageUp 或数字键盘数字。
- 同样,如何防止 X 服务器从该设备接收键盘和鼠标事件?我有几个 USB 键盘和鼠标连接到计算机。我希望 X 服务器从除此设备之外的所有设备接收事件。
- 如何设置,只要设备连接到计算机,就会运行命令
/usr/local/bin/keydumper /dev/input/event7 /dev/input/event8(或每个 /dev/ 路径一个命令),并在命令行中替换正确的 /dev/ 路径?
【问题讨论】:
标签:
linux
keyboard
mouse
usb
hid
【解决方案1】:
根据 Linux USB HID 驱动程序开发人员的回答回答我自己的问题:
问题 1. 和 2.:做
ioctl(open("/dev/input/event7", O_RDONLY), EVIOCGRAB, 1);
只要这个文件句柄打开,生成的事件只会发生
到这个文件句柄(而不是同一设备的其他 open()s 或
系统键盘或鼠标事件池)。最多一个进程可以持有一个
一次在 HID 设备上成功 EVIOCGRAB。可以配置 Lirc
做一个 EVIOCGRAB。
问题3:配置udev,设备连接后启动程序。
【解决方案2】:
我没有足够的积分来遗憾地发表评论。
如果您正在寻找 EVIOCGRAB 的定义,请尝试
#include <linux/input.h>
【解决方案3】:
我认为所有问题的解决方案都可以是编写自己的过滤设备驱动程序,或为您的设备自定义驱动程序。我知道这样的东西(过滤设备驱动程序)可以在 Windows 上使用,所以类似的东西可以在 Linux 上使用。在该过滤设备驱动程序中,您可以阻止来自您希望阻止的目标设备的所有不需要的事件,我并没有真正得到 3 个问题,所以我不知道如何回答。