USB键盘在X中单独使用

USB键盘在X中单独使用

我有模拟键盘的 USB 条码扫描仪。连接后,X 获取控件并像普通键盘一样处理它,并将键盘事件发送到当前聚焦的窗口。

这不是我想做的。我有一个程序可以从 ascii 输入流读取条形码并处理它们。该程序在后台运行,根本没有用户界面。

如何配置 Linux 在 X 中不使用此 USB 键盘,而是将其映射为 ascii 流设备。这样,我就能够将其重定向为我的程序的输入设备,并提供条形码读取功能,无论输入焦点如何变化。并且条形码根本不应该传递到当前聚焦的窗口。

另外,最好不要以 root 身份运行条形码处理程序,因此键盘设备应该具有每个人的读取权限。

答案1

1)如何配置X忽略键盘

用于lsusb查找条形码扫描仪的 ID(格式为0123:4567)。创建或修改xorg.conf文件(通常在 中/etc/X11/)。添加包含InputClass您刚刚找到的 ID 的部分:

Section "InputClass"
    Identifier "barcode"
    MatchUSBID "0123:4567"
    Option "Ignore" "true"
EndSection

重新启动 X,验证Xorg.log您的设备是否被此部分识别并忽略。

2) 从按键到 ASCII(或其他)代码的转换非常复杂,以允许不同的键盘布局、死键、自定义等。现在您禁用了 X 转换层,您可以从适当的设备接收按键和按键释放/dev/input/eventX事件。数量可以改变;对于您的条形码阅读器,将有一个/dev/input/by-id/不会改变的符号链接。所以使用符号链接。

您可以运行evtest此文件以查看它生成的事件类型。它们对条形码阅读器的映射很简单,因此从 keysym 到 ASCII 代码的表查找就可以了。您可以在自己的程序中处理这些事件,查看evtest源代码,或者例如这里。您还可以编写一个小型 C 程序,它只读取该设备并在标准输出上生成 ASCII,然后使用管道等将其集成到您的应用程序中。

“将其映射为 ASCII 流设备”是不可能的,Linux 内核中不存在此类设备。

3)设置权限

您需要编写自定义udev规则来设置输入设备的权限。SUBSYSTEM必须匹配inputACTION必须匹配ADD,环境ENV应包含与设备匹配的信息(用于udevadm查找详细信息),并且您可以为新创建的设备设置OWNERGROUP和。这是一个有点笼统的MODE/dev/input/eventX如何,我找不到更具体的。谷歌搜索更好的教程。

相关内容