Keyboard

使用 xmodmap 重新映射 Caps Lock 不起作用

  • June 21, 2020

當我程式時,我喜歡交換這些鍵:

EscTab CtrlCapsLock

~/.xmodmap中,我指定了這些重新映射:

keycode 66 = Control_L
keycode 37 = Caps_Lock
keycode 23 = Escape
keycode 9 = Tab

和鍵交換,沒問題,但不是Escape和交換,這兩個鍵都變成.Tab``Caps_Lock``Control_L``Caps_Lock

無論我嘗試做什麼,控制鍵都不會分配給Caps_Lock(鍵碼 66)。如果我離開keycode 66 =,則密鑰未分配,但是當我分配Control_Lor時Control_R,它就不起作用了。但是,如果我分配一些其他鍵,例如,keycode 66 = Tab它被分配,沒問題。

它就像 xmodmap 只是不希望交換 Caps Lock 和 Control 鍵。真令人沮喪。任何幫助/指針都會非常有幫助。

PS:我正在使用 Archlinux。

xmodmap(1) 手冊頁正好有一個例子

  !
  ! Swap Caps_Lock and Control_L
  !
  remove Lock = Caps_Lock
  remove Control = Control_L
  keysym Control_L = Caps_Lock
  keysym Caps_Lock = Control_L
  add Lock = Caps_Lock
  add Control = Control_L

但是如果你想按照你開始的方式完成它,我認為你至少需要添加removeandadd

  remove Lock = Caps_Lock
  remove Control = Control_L
  keycode 37 = Caps_Lock
  keycode 66 = Control_L
  add Lock = Caps_Lock
  add Control = Control_L

我猜這是基於本段的情況

  add MODIFIERNAME = KEYSYMNAME ...
          This adds all keys containing the given keysyms  to  the  indi‐
          cated  modifier  map.  The keysym names are evaluated after all
          input expressions are read to make it easy to write expressions
          to swap keys (see the EXAMPLES section).

這聽起來像是修改器更改(移位,控制等)在您也執行之前不會被應用。

(邏輯上與 相同remove

keycode版本具有冪等性的優點,這意味著如果 xmodmap 多次執行,效果不會改變。

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