Drivers

帶自定義鍵的遊戲鍵盤

  • March 2, 2017

許多電腦和遊戲愛好者使用特殊的鍵盤。這些鍵盤的一個共同特徵是許多自定義鍵,這些鍵旨在綁定到特定於遊戲和軟體的特殊命令。

用於編輯和創建這些自定義鍵觸發的命令的軟體幾乎總是在 windows 中

EX:Tt Esports 挑戰者軟體Challnger Pro Gaming

使用 Wine 執行軟體時,無法定位鍵盤或其他設備,因此無法對鍵綁定進行程式。

找不到鍵盤

對於大多數鍵盤,自定義鍵預設綁定為ctrl+cand ctrl+v。因此,System Settings只要使用者嘗試使用這些命令,使用 設置這些鍵就會覆蓋。

這個問題有什麼可能的解決方案,有沒有辦法讓 Wine 檢測硬體或者有另一種方法來設置自定義鍵?

找到解決方案對 Linux 社區非常有幫助,因為在開發或使用專用軟體時可以使用自定義密鑰。

我的鍵盤是 HID 鍵盤,使用hid-generic.

對於預設情況下未設置的鍵,除了evtest它們返回的三個預設值外,沒有註冊任何內容

Event: time 1488397338.016750, type 4 (EV_MSC), code 4 (MSC_SCAN), value 700e0
Event: time 1488397338.016750, type 1 (EV_KEY), code 29 (KEY_LEFTCTRL), value 0

xev只註冊預置為ctrl+c的按鍵,如2次按鍵,預設未設置的按鍵不註冊

我確實有一個 Windows 系統,我可以在其中嗅探 USB 協議。但是我該怎麼做呢?

這可能需要幾個步驟/迭代,並且問答格式不太合適。如果您遇到困難,請用更多資訊更新您的問題,並在對此答案的評論中聯繫我。那我會編輯我的答案。

從描述中聽起來,特殊鍵到鍵事件的映射是在鍵盤中完成的,因此程式必須在鍵盤中進行,而不是在驅動程序中進行。

有各種適用於 Windows 的開源 USB 嗅探器,例如usbpcap或較舊的usbsnoop,google 可能會找到更多,以及如何使用它們的教程。

原則上,您需要在使用程式軟體對具有不同按鍵順序的不同特殊按鍵進行程式時記錄通信。然後查看數據包,比較它們,看看哪些字節會因不同的特殊密鑰或程式序列而改變。libusb猜猜協議,在 Linux 上使用自己編寫的程序重放它。

由於您的鍵盤是 HID,而且 HID 是高度標準化的,因此我們可以提供一些幫助。熟悉HID 文件(或至少查找您需要的那些部分)。每個 HID 設備都帶有一個描述符,描述符根據 HID 標準描述了與設備的所有可能互動。如果鍵盤是這樣程式的,如果沒有太多的“vendor-specific”欄位,我們可以直接猜測協議。

您可以通過兩種方式讀取描述符。

(1) 如果您的核心已debugfs啟用,則以 root 身份執行

mount -t debugfs none /sys/kernel/debug
cat /sys/kernel/debug/hid/device_id/rdesc

device_id如果你的鍵盤,id 在哪裡。這會將原始描述符顯示為十六進製字節,以及核心如何解析它。如果核心解析不夠,嘗試hidrd轉換原始描述符。

(2) 設備上的問題HIDIOCGRDESCSIZEHIDIOCGRDESCioctls hidraw(查找dmesg以查找您的鍵盤)。Linux 核心原始碼中的samples/hidraw/hid-example.c解釋瞭如何做到這一點,或使用現成的工具,如usbhid-dump

理想情況下,您會看到一些與程式相關的功能輸出描述。如果太多描述的欄位不清楚或標記為“供應商特定”,您可能仍然需要窺探軟體工具。

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