我正在尝试编写一个需要从类键盘(HID)设备获取输入的 Linux 守护程序 - 它不是控制台键盘,而是第二个设备(如果它有任何区别,它实际上是一个一维条形码扫描仪)。守护进程将处理它接收到的数据(来自字母数字条形码的“击键”)。
我知道守护进程可以使用 ioctl(EVIOCGRAB) 从 /dev/input/eventx 中获取该设备,然后读取()事件(来自 <linux/input.h> 的 struct input_event),这是可行的,但对我来说它的级别太低了需要。我不需要知道每个上下键事件,我宁愿不必解码/处理同时键,即我不想知道 KEY_DOWN+KEY_RTSHIFT、KEY_DOWN+KEY_A、KEY_UP+KEY_RTSHIFT、KEY_UP+KEY_A ,我只想收到“A”。
使用输入事件需要编写一大堆额外的代码,只是为了从中得到“A”——当几乎可以肯定现有的键盘处理程序(或类似的东西)会这样做时,这似乎是浪费时间和精力比我一起破解代码做得更好——我就是找不到它们!
有什么方法可以将现有的(键盘?)软件层放到 /dev/input/eventx 上,然后守护进程可以从中独占读取简单的 ascii 流?
对于此设备,/proc/bus/input/devices 报告...
H: Handlers=sysrq kbd leds event9
...这可能表明某些东西已经在其上放置了“kbd”层,但是如何访问它呢?
如果我不使用 EVIOCGRAB,那么当我扫描条形码时,我会看到有关“在 /dev/tty1 上登录失败”的系统日志,因此键盘输入显然是在尝试登录某个终端/外壳:-/(没有 X,这台机器上的桌面等。)