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

Aby*_*mes 12 keyboard xmodmap

当我编程时,我喜欢交换这些键:

Esc? Tab Ctrl?CapsLock

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

keycode 66 = Control_L
keycode 37 = Caps_Lock
keycode 23 = Escape
keycode 9 = Tab
Run Code Online (Sandbox Code Playgroud)

EscapeTab键互换,但没有任何问题,而不是Caps_LockControl_L交换,这两个按键变成Caps_Lock

无论我尝试做什么,都不Caps_Lock会将Control 键分配给(键码 66)。如果我离开keycode 66 =,则键未分配,但是当我分配Control_L或 时Control_R,它就不起作用。但是,如果我分配一些其他键,例如keycode 66 = Tab,,它会被分配,没问题。

就像 xmodmap 只是不想交换 Caps Lock 和 Control 键。真令人沮丧。任何帮助/指针都会非常有帮助。

PS:我正在使用 Archlinux。

Mik*_*kel 8

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
Run Code Online (Sandbox Code Playgroud)

但是如果你想按照你开始的方式完成它,我认为你至少需要添加removeadd

   remove Lock = Caps_Lock
   remove Control = Control_L
   keycode 37 = Caps_Lock
   keycode 66 = Control_L
   add Lock = Caps_Lock
   add Control = Control_L
Run Code Online (Sandbox Code Playgroud)

我猜这就是基于这一段的情况

   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).
Run Code Online (Sandbox Code Playgroud)

这听起来像是修改器更改(移位、控制等)在您运行之前不会应用。

(逻辑上与 相同remove

keycode版本具有幂等的优点,这意味着如果多次运行 xmodmap,效果不会改变。


Clé*_* B. 5

松散相关的答案:我想将大写锁定键重新映射到左控件,而不更改实际的左控件。xmodmap 手册页还提供了解决方案:

    keycode 66 = Control_L
    clear Lock
    add Control = Control_L
Run Code Online (Sandbox Code Playgroud)