Linux

鍵盤上的單個鍵為每個同時按下的鍵產生額外的按鍵

  • August 29, 2019

我最近從 QPAD 購買了 MK-85 機械 USB 鍵盤。鍵盤在 Windows 上完美執行。它在 Syslinux 中完美執行。它在 Linux 上幾乎可以完美執行。Linux 上的唯一問題是單個密鑰行為不端(Gentoo (3.6.11)、Arch Linux 和 Linux Mint (2.6.38) 都受到影響)。

鍵盤是一個 105 鍵的德語佈局鍵盤,有問題的鍵是 Ä 和 ENTER 之間的那個鍵。在美國佈局上,這對應於 key \,在德國佈局上,這對應於#,在斯堪的納維亞佈局上,它是'.

當此鍵與其他鍵一起按下時,它會為同時按下的每個其他鍵產生額外的按鍵。例如,在斯堪的納維亞佈局下,如果我想快速輸入單詞“ don’t ”,我最終會得到:don’‘’t’

可以使用程序 showkeys 觀察該行為:

kb mode was UNICODE
[ if you are trying this under X, it might not work
since the X server is also reading /dev/console ]

press any key (program terminates 10s after last keypress)...
keycode  28 release
keycode  32 press    // d pressed
keycode  24 press    // o pressed
keycode  49 press    // n pressed
keycode  32 release  // d released
keycode  43 press    // ' pressed
keycode  24 release  // o released
keycode  43 release  // ' released
keycode  43 press    // ' pressed, extra ' produced
keycode  49 release  // n released
keycode  43 release  // ' released
keycode  43 press    // ' pressed, extra ' produced
keycode  20 press    // t pressed
keycode  43 release  // ' released
keycode  43 press    // ' pressed, extra ' produced
keycode  20 release  // t released
keycode  43 release  // ' released
keycode  43 press    // ' pressed, extra ' produced
keycode  43 release  // ' released (REAL)

它只發生在這個單一的鍵上,不管鍵盤佈局如何。它表現出來的另一種方式是,如果我按住一個鍵,它會重複,然後我按住另一個也應該開始重複的鍵:

aaaaaaaaaakkkkkkkkkkkkk (works as intended)
¨¨¨¨¨¨¨¨¨¨fffffffffffff (works as intended)
''''''''''a'''''''''''' (a is not repeated, instead ' continues)

在 Windows 上不存在此問題:

OnKeyDown, Key code=68, Control keys=, Key name d
OnKeyPress d
OnKeyDown, Key code=79, Control keys=, Key name o
OnKeyPress o
OnKeyDown, Key code=78, Control keys=, Key name n
OnKeyPress n
OnKeyup, Key code=68, Control keys=, Key name d
OnKeyDown, Key code=191, Control keys=, Key name ........OEM specific
OnKeyPress '
OnKeyup, Key code=79, Control keys=, Key name o
OnKeyup, Key code=78, Control keys=, Key name n
OnKeyDown, Key code=84, Control keys=, Key name t
OnKeyPress t
OnKeyup, Key code=191, Control keys=, Key name ........OEM specific
OnKeyup, Key code=84, Control keys=, Key name t

你覺得SE怎麼樣?硬體問題?它在 Syslinux 中執行良好,這讓我覺得 Linux 端有問題。有任何指示、想法或更好的調試方法嗎?如果要讓它正常工作需要修補核心,我準備好了。

我試圖為這個錯誤製作一個適當的更新檔。這是核心而不是鍵盤的問題,儘管可以說鍵盤的行為方式很奇怪。無論如何,更新檔已送出到 linux-input 列表進行審核,但還沒有任何評論。

這應該可以解決這裡提到的 QPAD MK-85 的問題,但 Corsair K70、技嘉 Osmium 和其他類似鍵盤也存在同樣的問題。如果您的鍵盤有錯誤,那就太好了,您可以測試更新檔。如果您對其進行測試,請告訴我它是否有效以及您使用的鍵盤,您使用的語言版本也很重要,美國和非美國鍵盤的行為會有所不同。請注意,美國鍵盤上的反斜杠鍵在其他版本的鍵盤上會有其他標籤。

這是來自 linux-input 的帶有更新檔的郵件:

http://article.gmane.org/gmane.linux.kernel.input/37583

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