Linux

在虛擬終端中交換密鑰

  • December 13, 2018

注意:大約一個月前我在超級使用者中問過這個問題,但直到那時還沒有回复,而且這個問題與linux有關,所以我在這裡發布它。

我想交換鍵盤上的 esc 和 caps_lock 鍵。setxkbmap -option caps:swapescape完成工作,但僅適用於 X。鍵在虛擬控制台上以原始方式執行。如何使它們在 vc 上以所需的方式執行?

使用loadkeys.

要交換EscCaps Lock在控制台中,執行

printf 'keycode 1 = Caps_Lock Caps_Lock\nkeycode 58 = Escape Escape\n' | sudo loadkeys -

Debian 和console-setup

在 Debian Linux 和 Debian FreeBSD 上,設計是為了讓 X 伺服器和核心虛擬終端共享一組配置資訊。該console-setup軟體包提供了工具和啟動腳本,它們採用 X 伺服器的鍵盤/字型配置,對其進行轉換,並使用它來配置核心虛擬終端。

具體來說:console-setup服務呼叫該setupcon --save命令,該命令生成/etc/console-setup包含轉換後的鍵盤和字型設置指令的腳本,這些腳本通過 udev 規則針對核心虛擬終端設備執行。鍵盤映射從 XKB 轉換為loadkeysformat by ckbcomp,並執行從 udev 規則呼叫的生成腳本loadkeys

所以在 Debian Linux 和 Debian FreeBSD 上,你需要確保你的XKBMODEL, XKBLAYOUT, XKBVARIANT,XKBOPTIONS變數在/etc/default/keyboard. 特別是在您的情況下,您需要確保XKBOPTIONS變數具有caps:swapescape. 然後,您需要確保已console-setup正確安裝該軟體包。

系統化 Linux

在 systemd 作業系統上,與 Debian 相比,集成度要低一些。有一個名為的配置文件/etc/vconsole.conf和一個名為的服務systemd-vconsole-setup.service在系統引導時對其進行處理(以響應宣布存在核心虛擬終端子系統的 udev 規則)。但這根本沒有與 X 伺服器配置相結合。

vconsole.conf文件有一個KEYMAP設置,表示傳遞給的鍵盤映射,loadkeys同樣不需要顯式執行自己。但是創建一個(定制的)鍵盤映射完全取決於您Caps Lock,它可以交換並將Escape其放在loadkeys可以找到它的地方。

要獲得更多聯合設置,必須涉及另外兩項服務systemd-localed和桌面匯流排。一個人跑,說,

localectl set-x11-keymap pl pc105 "" "caps:swapescape"

並且區域設置 D-BUS 服務會根據其對核心虛擬終端最近的等效/etc/vconsole.conf映射的最佳猜測進行重寫。不過,這個最接近的等價物可能並不完全等價,您可能會發現它完全忽略了選項等。

當然,您也可以隨時使用 Debianckbcomp手動直接轉換 XKB 鍵盤映射。☺

進一步閱讀

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