Linux

Linux 上的 Jelly Comb 鍵盤

  • December 29, 2020

所以我得到了一個 Jelly Comb 鍵盤作為聖誕節禮物。但問題是,根據製造商的說法,鍵盤打算在 Windows 上使用。所以現在我有以下問題:

  1. 如果我按下 Num Lock,鍵盤就會開始變得奇怪;除了一些數字和一些充當數字的字母外,大多數鍵都停止工作,而 Num Lock 不能再關閉了。我嘗試使用numlockx off,以便在我將鍵盤連接到電腦時阻止 Num Lock 打開,但我有時喜歡使用 numpad,但我無法使用 atm。
  2. F1-F12 不起作用。通過按 Fn,F 鍵也可以用作多媒體鍵,或者至少應該是這樣。但在我的情況下,按下任何 F 鍵都會導致一些隨機的多媒體動作(隨機與鍵上列印的不同),但是當我使用 Fn 鍵按下它時,它的效果只會變為其他一些多媒體動作,除了印在鑰匙上的東西之外。
  3. 當我檢查 的輸出時xev,我看到一些鍵具有相同的鍵碼。例如,F11 列印與 Fn+F4 相同的輸出。這是範例輸出:
KeyRelease event, serial 28, synthetic NO, window 0x3e00001,
   root 0x5c4, subw 0x0, time 2572602, (456,941), root:(521,1045),
   state 0x0, keycode 33 (keysym 0x70, p), same_screen YES,
   XLookupString gives 1 bytes: (70) "p"
   XFilterEvent returns: False

KeymapNotify event, serial 28, synthetic NO, window 0x0,
   keys:  4294967236 0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   
          0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   

KeymapNotify event, serial 28, synthetic NO, window 0x0,
   keys:  4294967236 0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   
          0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   

第一個是一些隨機字母,而後兩個來自 F11 和 Fn+F4。

有關更多資訊,我正在執行帶有 Gnome 的 Ubuntu 20.04。

所以我的問題是,是否有任何方法可以在 linux 上正常使用這個鍵盤。我想,有某種方法可以“告訴”作業系統像 Windows 那樣解釋鍵盤,但我沒有找到類似的東西。

編輯:

所以正如@dirkt 建議的那樣,我檢查了 的輸出evtest,我分別得到了 Fn+F11 和 F4 的以下行:

Event: time 1609244073.713496, type 1 (EV_KEY), code 113 (KEY_MUTE), value 1
Event: time 1609244073.713496, -------------- SYN_REPORT ------------
Event: time 1609244073.738779, type 1 (EV_KEY), code 113 (KEY_MUTE), value 0
Event: time 1609244073.738779, -------------- SYN_REPORT ------------
Event: time 1609244076.661538, type 4 (EV_MSC), code 4 (MSC_SCAN), value c00e2
Event: time 1609244076.661538, type 1 (EV_KEY), code 113 (KEY_MUTE), value 1
Event: time 1609244076.661538, -------------- SYN_REPORT ------------
Event: time 1609244076.687504, type 4 (EV_MSC), code 4 (MSC_SCAN), value c00e2
Event: time 1609244076.687504, type 1 (EV_KEY), code 113 (KEY_MUTE), value 0
Event: time 1609244076.687504, -------------- SYN_REPORT ------------

Event: time 1609244076.687504, type 4 (EV_MSC), code 4 (MSC_SCAN), value c00e2兩者都有相同的程式碼(113 KEY_MUTE),但是當我不按 Fn 時,我得到了一個額外的行。所有正常鍵(如字母和數字)也是如此。但是當我將 F1-F12 與 Fn 鍵組合使用時,該行消失了。所以我的後續問題是,我可以利用那條額外的線,以便 linux 區分具有相同鍵碼的鍵,如果是,如何區分?

部分答案:

根據製造商的說法,該鍵盤旨在用於 Windows。

這可能意味著它有一個特定於 Windows 的驅動程序來處理這個鍵盤的非標準部分。

由於此驅動程序在 Linux 上不可用,您可以選擇按原樣使用它,或者對差異進行逆向工程,然後嘗試調整 Linux 來處理這些問題。後者需要時間和精力。

Google for Jelly Comb 顯示它可能是帶有 USB 接收器的無線鍵盤(你沒說,我猜)。

關於鍵盤堆棧如何在 Linux 上工作的快速入門:

對於 USB 設備,有一種稱為 HID(人機介面設備)協議的東西,它是關於如何編碼與鍵盤等設備進行通信的標準。用於lsusb辨識您的鍵盤 USB 端點或端點(有些鍵盤有多個),用於lsusb -v確定是否支持 HID。

核心解碼 HID 事件(您可以檢查描述這些事件的 HID 描述符,搜尋此 stackexchange 或超級使用者 stackexchange 以獲取詳細資訊)。然後核心將它們傳遞給輸入層。

輸入層設備顯示為/dev/event/input*。開機後看看dmesg你的鍵盤有哪些。您可以使用它evtest來檢查來自它們的事件。

從輸入層,X 或 Wayland 解釋事件,並使用它們的鍵盤映射來處理它。

因此,請檢查不能同時使用的組合鍵,evtestxev查看有趣的事情發生在哪裡。

您的KeymapNotify事件意味著某些東西拾取了導致鍵盤映射更改的程式碼。這可能是因為您正在使用的鍵盤映射,或者您桌面上安裝的某些東西。

不要指望它Fn會起作用。這個鍵是非標準的,每個筆記型電腦製造商或鍵盤製造商都有自己的處理方式。

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