Linux 核心如何處理鍵盤輸入/輸出?

Linux 核心如何處理鍵盤輸入/輸出?

我不明白虛擬終端設備(例如),但我知道如果我按 ,/dev/tty1我可以「切換」到。tty1ctrl + alt + f1

我有一個自訂鍵盤佈局,/usr/share/X11/xkb/symbols/us但它只有在 X 運行時才「有效」。

虛擬終端和 X 似乎都以自己的方式管理鍵盤輸入/輸出,但大概它們都以某種方式與(Linux)內核交互,這必須為鍵盤硬體提供某種抽象。

Linux 核心如何處理鍵盤輸入/輸出?是否有一個源文件可供我查看,其中包含所有掃描碼/鍵碼/keysims/等的列表,也許還有 Linux 如何管理“鍵盤”的整個概念的整體邏輯?

(我正在運行 Lubuntu。)

答案1

鍵盤輸入和文字輸出如何運作?了解該主題的概述。

更詳細地說,在Linux下,核心從硬體接收掃描碼並將其轉換為鍵碼。 (此術語並非完全標準;您可能會發現兩者都使用「掃描代碼」或「鍵代碼」。)此轉換的工作方式取決於鍵盤驅動程式。對於 PS/2 鍵盤,您可以配置它setkeycodes。對於USB鍵盤,您可以設定它透過udev。也可以看看Arch 維基。所有使用者輸入設備,包括鍵盤和滑鼠,都透過事件設備公開/dev/input/event*

在 Linux 控制台中,鍵碼會根據控制台鍵對應對應到轉義序列。由於控制台是文字終端,因此應用程式看到字節,其中可列印字元代表自身,並且功能鍵使用控製字元或轉義序列編碼。您可以使用以下命令變更映射loadkeys。此映射使用兩個間接級別,從鍵碼+修飾符組合(具有三個修飾符:shiftcontrolalt)到鍵符號,以及從鍵符號到字串(字元或轉義序列)。鍵符號集是固定的,因此如果您想定義自訂組合,則需要使用未使用的現有鍵符號,例如F13, F14, ...

如果您想查看實作這些翻譯的原始程式碼,請查看鍵盤驅動程式通用輸入代碼, 和烏德夫利布德夫

X11(GUI)有自己的方式將鍵碼對應到應用程式接收的內容。 X11 應用程式可以看到鍵符號和修飾符,因此功能鍵不需要進一步編碼。實際上有兩種在X下定義鍵盤映射的方法:經典方法xmodmap和更新的機制XKB,它更強大但更複雜。

相關內容