Keyboard

以與 X/控制台無關的方式更改控制台 (tty) 和 X 上的鍵盤佈局/映射?

  • December 13, 2018

當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

進一步閱讀

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