Linux

不帶 X 的多功能 CapsLock

  • November 1, 2021

我想重新映射CapsLockEsc當自己按下時以及在不使用 XCtrl的情況下用另一個鍵按下時。

這類似於上一個問題(將 CapsLock 重新映射到 Escape 和 Control System Wide),但我專門尋找沒有 X 的解決方案。

keymod程序從設備讀取鍵盤事件,/dev/input/eventX並使用該設備最直接地註入回核心/dev/uinput。這種caps lock行為是特殊的:如果按鍵被按下和釋放而不接觸另一個按鍵,則一個Esc按鍵被發送到核心中。如果在按住 的同時按下另一個鍵,則會模擬caps lock按住(左)鍵。control

由於程序控制了指定的事件設備,因此在測試時能夠使案例如 SSH 訪問電腦非常方便。例如,暫停這個程序(例如使用 ctrl-z)將確保您不能再使用您的鍵盤(它已經完全控制它並且現在不再活動)。

Linux 控制台鍵盤映射

要更改虛擬終端 ( alt+ f1- alt+ f6) 的鍵盤映射,請使用載入鍵。這只會影響虛擬終端登錄,不會更改X 或 X 終端應用程序(如Xterm或*urxvt )*中的鍵盤映射。

loadkeys 命令需要以 root 身份執行,否則您將收到以下錯誤:
Couldn't get a file descriptor referring to the console

要交換escapecaps_lock您將執行以下操作:

# echo keycode 58 = Escape | loadkeys -
# echo keycode 1 = Caps_Lock | loadkeys -

另一種選擇是重新映射Caps_Lockshift+ Scroll Lock

# echo keycode 69 = Num_Lock  Caps_Lock | loadkeys -

鍵盤映射的格式可能有點混亂。它使用加權系統,具體取決於按下的修飾符。(Ctrl、Alt、Shift 等)。作為鍵盤映射手冊頁的範例。

keycode 30 = a    A    VoidSymbol    VoidSymbol   VoidSymbol  .....

shiftand a 被按下時,我們執行第二列中的操作,因為 shift 的權重為 1。control另一方面,權重為 4。

這可能會在映射修改器時導致問題。舉個例子,如果一個鍵碼是第一個也是唯一的列control作為它的動作。現在,自從您按下它以來的權重現在是 4,當您釋放鍵時,它control不會顯示釋放,因為現在要執行第 5 列操作,但它沒有定義任何操作。所以control密鑰永遠不會被釋放。

這就是為什麼大多數修飾符沒有分配其他動作的原因。如果在鍵盤映射中只定義了一個動作,那麼它將應用於所有動作。

我一直在嘗試解決這個問題,但只得到不一致的結果。有時修飾符會釋放,有時不會。

澄清

更改 Caps Lock 以作為轉義或控制執行此方法效果很好。映射到兩者,不是那麼多。

重要的

如果您搞砸了鍵盤映射,請執行以下操作來重置它。

# loadkeys -d

參考

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