答案1
輸入層的非常簡短的概述:
您的鍵盤裝置以某種方式連接到 PC,例如透過 USB 或 PS/2 連接埠。此機制的核心驅動程式知道如何在按下鍵盤上的按鍵時處理通訊。
對於 USB 鍵盤,有一個標準稱為高壓氣體放電管(人機介面設備)存在。這不僅適用於鍵盤,也適用於滑鼠、操縱桿和其他輸入裝置。所以該設備將有一個描述符告訴核心它可以發出什麼樣的訊號,以及很多鍵的程式碼,包括沉默的是標準化的。
儘管如此,某些鍵盤的按鍵並未標準化(例如Fn某些鍵盤上的按鍵),這取決於製造商如何向這些按鍵發出信號。
核心中有一個特殊層用於處理 HID 設備。此層使原始 HID 通訊在 處可用/dev/hidrawX
,然後繼續將 HID 事件轉換為核心輸入事件。
內核輸入層採用掃碼(與實體密鑰相對應的數字,該設備唯一)並將它們轉換為關鍵程式碼(與所有設備上標準化的邏輯鍵相對應的數字)。兩者都作為事件提供/dev/input/eventX
。您可以使用evdev
檢視這些事件, 和showkey
等待dumpkeys
檢視轉換表。
X 伺服器(或 Wayland)讀取所有這些事件,並將它們轉換為關鍵符號(如 等a
,á
或特殊的,如AudioMute
)。 X 應用程式可以接收此符號,並採取相應的行動。您可以使用 see application來查看該層,並xev
使用.xmodmap
xkbd
xorg.conf
為了對 做出反應AudioMute
,需要一些應用程式。通常,這是視窗管理器,但如果您的視窗管理器不這樣做,單獨的應用程式也可以工作。
所以沒有單一的“鍵盤驅動程式”,它要複雜得多,並且沒有特別要求“靜音”。
答案2
一般來說,你的理解是正確的。當您按下某個按鍵時,鍵盤會發送一個掃描碼,基本上是識別每個按鍵的數字序列。掃描碼映射到鍵碼。每個鍵碼對應一個函數,該函數定義程式應如何對特定按鍵做出反應。請注意,Xorg 和控制台使用不同的鍵碼集。我對 Wayland 不太了解,但也許它也使用自己的一組鍵碼。鍵碼映射到鍵符號。鍵符號允許開發人員在更高的抽象層級上使用鍵盤。
showkey --scancode
您可以透過分別執行和在控制台上看到掃描碼和鍵碼showkey --keycode
。在 Xorg 中,您應該使用xev
後者。
這些抽象層級可讓您建立靈活且複雜的映射方案,從而影響 Linux 環境的不同部分。這ArchWiki 文章包含大量有關繪圖技術的信息,如果您想了解更多信息,請閱讀它。
還有很多文章網路上解釋鍵盤如何在底層運作的。文章是在 1999 年還是 2010 年撰寫並不重要 - 從那時起,鍵盤方面並沒有發生太多變化,但請記住,USB HID 設備的工作方式與“經典”PS/2 鍵盤不同。