条形码扫描仪的行为就像 USB 键盘设备,我的情况一开始也没有什么不同。我打开一个nano
屏幕,通过 USB 端口插入扫描仪,读取条形码并看到条形码正下方写的字符串。
我不知道怎么办,但现在还不行。扫描仪(类似键盘的设备)向系统发送一些垃圾。
我写一个简单的 NodeJS 代码转储捕获的内容:
data: <Buffer 04 00 62 60 5b 00 00 00> string: b`[
data: <Buffer 00 00 00 00 00 00 00 00> string:
data: <Buffer 04 00 62 5f 5b 00 00 00> string: b_[
data: <Buffer 00 00 00 00 00 00 00 00> string:
data: <Buffer 04 00 62 60 62 00 00 00> string: b`b
data: <Buffer 00 00 00 00 00 00 00 00> string:
data: <Buffer 04 00 62 5c 5d 00 00 00> string: b\]
data: <Buffer 00 00 00 00 00 00 00 00> string:
data: <Buffer 04 00 62 5d 5a 00 00 00> string: b]Z
data: <Buffer 00 00 00 00 00 00 00 00> string:
data: <Buffer 04 00 62 5c 5d 00 00 00> string: b\]
data: <Buffer 00 00 00 00 00 00 00 00> string:
data: <Buffer 04 00 62 5c 61 00 00 00> string: b\a
data: <Buffer 00 00 00 00 00 00 00 00> string:
data: <Buffer 00 00 28 00 00 00 00 00> string: (
data: <Buffer 00 00 00 00 00 00 00 00> string:
我期待一个字符串,比如SIP-4-1
. (这里是showkey
相同条形码的输出)
同一扫描仪在 Windows 上可以正常工作。我猜这与键盘模式或其他东西有关。如何更改特定 USB 键盘设备的模式?
答案1
您的扫描仪没有发送垃圾。这些是传统 USB HID 键盘设备的完全传统的输入报告,具有传统的 8 字节“启动”报告描述符。
解码它们,可以看出您的扫描仪没有直接发送“S”、“I”等键。相反,它正在模拟用⎇ Alt密钥输入它们。在此过程中,它对操作系统做出了一些相当糟糕的假设,其中任何一个或全部都可能很容易出错。
例如:
- 输入报告
04 00 62 60 5b 00 00 00
E2
是带有 USB HID 使用代码、62
、60
、 和5B
同时按下的按键。 E2
、62
、60
和是、、和5B
的 USB HID 使用代码。⎇ Left AltIns/0↑/8PgDn/3- 083 10是“S”的代码。
- 输入报告
00 00 00 00 00 00 00 00
表示所有这些键已被释放。
其余的确实解码为“I”、“P”、“-”、“4”、“-”和“1”,所有这些都以这种方式输入,⎇ Alt加上三个十进制数。 (最后两个输入报告是 的新闻和发布⮠ Return。)
您可以在这里看到几个被打破的假设。
- 扫描仪假设键盘驱动程序以特定方向解析输入报告。这是无法保证的,扫描仪应该正确生成Ins/0、 、 的单独报告↑/8,并且PgDn/3在整个过程中按住修改键的情况下依次按下和释放。它依赖于执行的意外,扫描仪实际发送的是所有四个键同时按下和释放。
- 扫描仪假设这⎇ Left Alt是用于此目的的密钥。但在某些操作系统和键盘布局中,它可能是⇮ Alt Gr/ ⎇ Right Alt,而不是
E6
(编码为40
输入报告的第一个字节)E2
。事实上,您当前的操作系统、键盘驱动程序和键盘布局甚至可能根本不支持使用这样的代码输入字符。 (例如,FreeBSD 的
syscons
内核终端仿真器就是如此。当然,Microsoft Windows 也是如此。但是 nosh 工具包的console-fb-realizer
,像 LXDE 这样的 GUI 和XFCE4,而且看起来Ubuntu 上所有可用的 GUI;不要。) - 扫描仪假设 NumLock 已关闭。如果 NumLock 处于打开状态,则应该假装按下某个 Shift 键,以反转锁定的含义。
对于某些扫描仪,可以通过扫描特殊的“控制”条形码来修改这些内容。这可能就是这里发生的事情。您扫描了一个“控制”条形码,该条形码将扫描仪切换到操作系统、键盘驱动程序和键盘布局无法处理的操作模式。在这种情况下,您需要查阅扫描仪手册并找到关闭该行为的控制代码。
例如:对于 NLS-HR32 系列扫描仪,这是将扫描仪置于“ALT+键盘模式 2”或“ALT+键盘模式 3”的效果,您需要切换回“禁用 ALT+键盘”或“ALT+键盘模式 1”。