Linux

USB鍵盤在X中單獨使用

  • February 8, 2017

我有模擬鍵盤的 USB 條碼掃描器。連接後,X 獲取控制項並將其作為普通鍵盤處理,並將鍵盤事件發送到目前焦點視窗。

這不是我想做的。我有一個程序可以從 ascii 輸入流中讀取條碼並進行處理。該程序在後台執行,根本沒有使用者界面。

如何將 Linux 配置為不在 X 中使用此 USB 鍵盤,而是將其映射為 ascii 流設備。這樣,無論輸入焦點如何變化,我都可以將其重定向為我的程序的輸入設備並提供條碼讀取功能。並且條碼根本不應該傳遞到目前聚焦的視窗。

另外,最好不要以root身份執行條碼處理程序,所以鍵盤設備應該對每個人都有讀取權限。

1)如何配置X忽略鍵盤

用於lsusb查找您的條碼掃描器的 ID(格式為0123:4567)。創建或修改xorg.conf文件(通常在 中/etc/X11/)。InputClass使用您剛剛找到的 ID添加一個部分:

Section "InputClass"
   Identifier "barcode"
   MatchUSBID "0123:4567"
   Option "Ignore" "true"
EndSection

重新啟動 X,驗證Xorg.log您的設備是否被此部分辨識並忽略。

  1. 從按鍵到 ASCII(或其他)程式碼的轉換非常複雜,以允許不同的鍵盤佈局、死鍵、自定義等。現在您禁用了 X 轉換層,您可以從適當的/dev/input/eventX設備接收 keypress 和 keyrelease 事件. 數量可以改變;對於您的條碼閱讀器,將有一個/dev/input/by-id/不會更改的符號連結。所以使用符號連結。

您可以evtest在此文件上執行以查看它生成的事件類型。它們為您的條碼閱讀器映射將很簡單,因此從鍵符號到 ASCII 程式碼的表查找就可以了。您可以在自己的程序中處理這些事件,查看evtest原始碼,或者例如這裡。您還可以編寫一個小型 C 程序,該程序僅讀取此設備並在標準輸出上生成 ASCII,然後使用管道等將其集成到您的應用程序中。

“將其映射為 ASCII 流設備”是不可能的,Linux 核心中不存在此類設備。

  1. 設置權限

您需要編寫自定義udev規則來設置輸入設備的權限。SUBSYSTEMmust match input, ACTIONmust match ADD, 環境中ENV應該包含與設備匹配的資訊(用於udevadm查找詳細資訊),並且可以為新創建的設備設置OWNER,GROUP和。這是一個有點籠統的方法,我找不到更具體的方法。Google以獲得更好的教程。MODE``/dev/input/eventX

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