我正在尝试设置一台自助服务终端机。这是一台带有触摸屏的电脑,在正常操作期间没有连接物理鼠标或键盘。目前我正在使用 Debian 12,但我计划寻找可能更合适的发行版。这还不是一成不变的。
该服务终端有两个 USB 外围设备 - 一个 NFC 卡扫描仪和一个 QR 码/条形码/MRZ 扫描仪。对于操作系统来说,它们的行为类似于 USB 键盘。当扫描某些内容时,它们会发送击键,并将数据写入任何具有焦点的文本框/编辑器窗口/控制台窗口中。
我能够通过读取以下文件以编程方式读取这些设备的输入:
/dev/input/by-id/usb-HOUSESMart_PROTOCOL-if01-event-kbd
/dev/input/by-id/usb-Newtologic_NT7730_XXXXXX-event-kbd
但是,这并不能阻止击键也到达 UI 并在文本框获得焦点时进行输入。这对我们来说不是一个大问题,因为我们的自助服务终端应用程序在大多数屏幕上都没有文本输入。但在某些屏幕上确实如此,如果用户在文本输入字段中输入内容,同时扫描某些内容(假设他另一只手拿着手机,并且他不小心将其移近 NFC 扫描仪),扫描)数据将被写入文本框。我需要阻止这种情况。
我需要一种方法来防止这两个“键盘”的事件到达 UI,但又不能完全禁用它们,这样我仍然可以通过读取这些输入文件来获取数据。有没有办法做到这一点?
解决方案可以是每次应用程序启动时运行的一些代码(最好是我可以在 C# 中执行的操作),或者是在机器设置期间执行一次的系统设置。任何一个都可以。
我还需要确保只限制这两个键盘。我不想全面限制所有键盘,因为在某些情况下会使用键盘,无论是虚拟键盘还是物理键盘。无论我插入和拔出多少次,设备 ID 似乎都不会改变,因此可以依靠这些 ID 来识别设备。
为了完整起见,我们的自助服务终端应用程序是 .NET8 Blazor Web 应用程序,最有可能从 Chrome 等浏览器访问。或者它可以托管在 .NET MAUI 容器中(如果 Linux 已支持)。重点是它将是一个特定的应用程序,并且我可以控制它将是哪一个,所以如果有一种方法可以说“嘿,不要从这个键盘发送击键到这个应用程序”,我可以这样做也。