Keyboard

如何將特定的鍵盤設備置於 ascii 模式?

  • September 16, 2017

條碼掃描器的行為就像一個 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 鍵盤設備的模式?

您的掃描器沒有發送垃圾。這些是具有傳統 8 字節“啟動”報告描述符的傳統 USB HID 鍵盤設備的完美傳統輸入報告。

對它們進行解碼,可以看出您的掃描器並未直接發送“S”、“I”等的密鑰。相反,它正在模擬使用⎇ Alt密鑰輸入它們。在這樣做的過程中,它對作業系統做出了幾個相當糟糕的假設,其中任何一個或全部都可能很容易出錯。

例如:

  • 輸入報告
04 00 62 60 5b 00 00 00

是帶有 USB HID 使用程式碼E262、 、 的鍵60,並且5B全部同時按下。

  • E2、、和是62、、和的 USB HID 使用程式碼。60``5B``⎇ Left Alt``Ins/0``↑/8``PgDn/3
  • 083 10是“S”的程式碼。
  • 輸入報告
00 00 00 00 00 00 00 00

表示所有這些鍵都已被釋放。

其餘的確實解碼為“I”、“P”、“-”、“4”、“-”和“1”,所有這些都以這種方式輸入,⎇ Alt加上三個十進制數字。(最後兩個輸入報告是新聞和發布⮠ Return。)

你可以在這裡看到幾個被打破的假設。

  • 掃描器假設鍵盤驅動程序在特定方向解析輸入報告。這不能保證,並且掃描器應該正確地生成單獨的報告Ins/0↑/8PgDn/3在整個過程中按住修改鍵依次按下和釋放。它依賴於實現的意外,掃描器實際發送的是同時按下和釋放所有四個鍵
  • 掃描器假設這⎇ Left Alt是為此使用的關鍵。但在某些作業系統和鍵盤佈局中,它可能是⇮ Alt Gr/⎇ Right Alt而不是E6(編碼為40輸入報告的第一個字節)E2。事實上,您目前的作業系統、鍵盤驅動程序和鍵盤佈局可能根本不支持使用這樣的程式碼輸入字元。(例如,FreeBSD 的syscons核心終端仿真器可以。當然,Microsoft Windows 也可以。但是 nosh 工具包console-fb-realizer,像 LXDE 和XFCE4這樣的 GUI ,而且在 Ubuntu 上似乎所有可用的 GUI;沒有。)
  • 掃描器假定 NumLock 已關閉。如果 NumLock 處於打開狀態,則它應該也假裝按下了其中一個 shift 鍵,以反轉鎖定的感覺。

對於某些掃描器,這些東西可以通過掃描特殊的“控制”條碼來修改。這可能就是這裡發生的事情。您掃描了將掃描器切換到作業系統、鍵盤驅動程序和鍵盤佈局無法處理的操作模式的“控制”條碼。在這種情況下,您需要查閱掃描器的手冊並找到可以關閉該行為的控制程式碼。

例如:使用 NLS-HR32 系列掃描器,這是將掃描器置於“ALT+鍵盤模式 2”或“ALT+鍵盤模式 3”的效果,您需要切換回“禁用 ALT+鍵盤”或“ALT+鍵盤模式 1”。

引用自:https://unix.stackexchange.com/questions/392654