以與 X/控制台無關的方式更改控制台 (tty) 和 X 上的鍵盤佈局/映射?
當X Window 系統執行時,我已經能夠更改鍵盤佈局/映射
~/.Xmodmap
(我想你也可以直接通過X 協議來做到這一點,例如,使用libxcb作為 X 協議呼叫的包裝器)。我已經能夠在控制台/tty(即 X 未執行時)上使用
loadkeys
.有沒有一種方法可以類似地自定義鍵盤佈局,但從單一來源,以影響 X 和控制台的方式,即。以“與 X 和控制台無關”的方式?
(我能想到的唯一方法是編寫一個“鍵盤驅動程序”,它與核心的輸入介面對話
evdev
,並發送你想要的輸入(通過uinput
?),或其他東西,但我不知道這是否有意義,或者如果有更簡單的方法。)
是的,有一種方法,這確實是 Debian 的控制台設置包的方式。
鍵盤佈局由管理員在名為 .的文件中以 XKB 術語(型號、佈局、變體和選項)指定
keyboard
,通常為/etc/default/keyboard
. 這是單一來源。它可以用文本編輯器進行編輯。該
setxkbmap
程序具有這些相同的 XKB 設置並相應地配置 X11 伺服器。
- 鍵盤配置包的安裝後維護腳本
setxkbmap
直接執行/etc/default/keyboard
,如果它發現自己帶有 X11 顯示器,則帶有設置。因此dpkg-reconfigure keyboard-configuration
,從 X11 GUI 終端仿真器執行將影響 X11 鍵盤佈局。該
setupcon
腳本採用這些 XKB 設置,將它們傳遞給ckbcomp
實用程序以生成鍵盤映射,並使用loadkeys
/將該鍵盤映射載入到核心虛擬終端中kbdcontrol
。
- 此腳本由服務在系統引導程序中執行。
- elsewhen 也可以手動執行。
其他 systemd 作業系統的工作方式不同,但也有單一來源。
XKB 佈局、變體和選項儲存在
/etc/X11/xorg.conf.d/00-keyboard.conf
. 這是單一來源。
- 該文件由 X11 伺服器在啟動時直接讀取,並直接設置 X11 鍵盤映射。
systemd-localed
該文件在啟動時被解析。該文件在執行時無法使用文本編輯器進行有效編輯systemd-localed
,因為該服務會用自己的記憶體資訊輕鬆地覆蓋它。- 要更改 XKB 資訊,請執行
localectl
,該伺服器與另一台伺服器通信,該伺服器又與systemd-localed
.
systemd-localed
使用映射將 XKB 設置轉換為虛擬終端鍵盤映射名稱/usr/share/systemd/kbd-model-map
,然後將其寫入/etc/vconsole.conf
. 與 Debian 系統不同,它不會根據 XKB 資訊動態生成映射,而是僅選擇映射文件中列出的預先提供的靜態映射。
systemd-vconsole-setup
在引導程序中執行,讀取/etc/vconsole.conf
鍵盤映射,並通過執行將鍵盤映射載入到核心虛擬終端中loadkeys
。進一步閱讀
keyboard
. 控制台設置使用者手冊。德比安。ckbcomp
. 控制台設置使用者手冊。德比安。- 安德魯·T·楊 (2011)。鍵盤配置。
- Xkb 從哪裡得到它的配置?
- https://unix.stackexchange.com/a/326804/5132