如何让读卡器在扫描时生成文件?

如何让读卡器在扫描时生成文件?

我有一个 Raspberry Pi 4 和一个HID Omnikey 5427G2。当我扫描卡片时,读卡器充当键盘并键入与卡片相对应的一系列 7 位数字。这工作正常,但它只是将其输入,就像我打开并选择的文本文件或文本字段的键盘一样

我想要发生的是,当卡扫描时,从扫描中获得的数字被放入一个文件中,也许是“scan.txt”,并保存在某个位置。我怎样才能做到这一点?

一旦我将号码存入文件中,我还希望它自动调用 shell 脚本。我已经制作了脚本,我只需要从扫描中调用它即可。

提前致谢!

答案1

一个“快速而肮脏”的解决方案是运行无限循环的 bash 脚本:

#!/bin/bash
while read scan; do
    scandate=$(date +"%F_%T.%N")
    echo "$scan" >> /tmp/scan_$scandate.log
    cat /tmp/scan_$scandate.log &
done

代表cat /tmp/scan_$scandate.log应用程序对扫描的输入执行某些操作。您还可以在此脚本中处理扫描的数据。

请注意,任何从扫描仪/键盘读取输入的功能都会阻塞您的键盘,并使 Pi 专用于该功能。

答案2

你想要的基本上是一个简单的键盘记录器

您的设备可以键盘模拟,在 Linux 上键盘设备是文件,所以你可以做标准输入重定向

或者,您可以使用类似的程序日志键(可能已经在您的发行版中作为软件包提供)。更多文档这里也。

假设您只想捕获来自该特定设备的输入,而不是系统上安装的任何键盘,则需要识别该设备。/dev/input/例如,我会看一下,然后通过路径或 ID 找到您的设备。

使用 logkeys 该 -d, --device=device选项应该可以帮助您过滤正确设备上的事件。

还有其他有用的工具,例如 evtest、xinput,可以帮助您测试和定位正确的设备标识符。

也可以设置一个乌德夫您的设备的规则,该规则在插入设备时运行程序或执行某些操作(简介udev教程)。我对 udev 的经验不够,但应该可以通过这种方式设置重定向。唯一的障碍是确保你得到简单的字符而不是原始输入,或者你必须负责解码它。

另一种选择是使用python-evdev 库如果您喜欢 Python,并且您监视来自 /dev/input/whatever-your-keyboard-is-using 的事件。

我会尝试 udev 规则。我也不会打扰临时文本文件,只需监视来自设备的事件并对它们做出反应。


更新

我已经使用条形码扫描仪进行了一些测试,它的行为类似于键盘,因此从系统的角度来看,它在技术上与读卡器类似。

首先,要知道的一件有趣的事情是可以获得独占访问权使用该功能连接到 HID 设备EVIOCGRAB。这意味着您可以让应用程序接管设备,这样它就不会发送不需要的输入并干扰其他窗口。你可能会想要这个。

请注意evtest(上面提到的)--grab也有一个参数。

我之前也提到过 python-evdev,它可用于捕获设备的输入。它grab()也有一个功能。

使用 python-evdev 不需要 root,但您的权限可能需要调整。来自他们的文档

如果您没有看到任何设备,请确保您的用户位于正确的组(通常是输入组)中以具有读/写访问权限。

要将您自己添加到组中:

usermod -a -G input user

然后再次登录。 (完成此操作后,evtest 也适用于非 root 用户)。

下面是一个代码示例:如何将条形码 TTY 输入“路由”到 Python?另一个对我有用的:独占键盘-evdev.py

现在我不知道是否有一种方法可以仅使用 bash 优雅地做到这一点。但 Python 或 C 是​​一种可行的方法。

相关内容