cer*_*cem 0 keyboard usb-device
条码扫描仪的行为就像一个 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:
Run Code Online (Sandbox Code Playgroud)
我期待一个字符串,比如SIP-4-1
. (这里是showkey
相同条码的输出)
相同的扫描仪在 Windows 上正常工作。我想这与键盘模式或其他东西有关。如何更改特定 USB 键盘设备的模式?
您的扫描仪没有发送垃圾。这些是具有传统 8 字节“启动”报告描述符的传统 USB HID 键盘设备的完美传统输入报告。
解码它们,可以看出您的扫描仪没有直接发送“S”、“I”等的密钥。相反,它正在模拟使用⎇ Alt密钥输入它们。它在这样做时对操作系统做出了几个相当糟糕的假设,其中任何一个或全部都很容易出错。
例如:
04 00 62 60 5b 00 00 00与USB HID使用代码键
E2
,62
,60
,和5B
所有同时按下。E2
,62
,60
,和5B
都为USB HID使用代码⎇ Left Alt,Ins/0,↑/8,和PgDn/3。00 00 00 00 00 00 00 00表示所有这些键都已释放。
其余的确实解码为“I”、“P”、“-”、“4”、“-”和“1”,所有这些都是以这种方式输入的⎇ Alt加上三个十进制数字。(最后两个输入报告是按下和释放⮠ Return。)
你可以在这里看到几个破碎的假设。
E6
(40
在输入报告的第一个字节中编码) not E2
。事实上,您当前的操作系统、键盘驱动程序和键盘布局甚至可能根本不支持使用这样的代码输入字符。(例如,FreeBSD 的syscons
内核终端仿真器可以。当然,Microsoft Windows 也是如此。但是 nosh 工具包的console-fb-realizer
LXDE 和XFCE4等 GUI ,而且似乎Ubuntu 上所有可用的 GUI都没有。)
对于某些扫描仪,可以通过扫描特殊的“控制”条形码来修改这些内容。这大概就是这里发生的事情。您扫描了一个“控制”条形码,该条形码将扫描仪切换到您的操作系统、键盘驱动程序和键盘布局无法处理的操作模式。在这种情况下,您需要查阅扫描仪的手册并找到关闭行为的控制代码。
例如:对于 NLS-HR32 系列扫描仪,这是将扫描仪置于“ALT+Keypad 模式 2”或“ALT+Keypad 模式 3”的效果,您需要切换回“禁用 ALT+Keypad”或“ALT+键盘模式1”。