Переназначение Caps Lock с помощью xmodmap не работает

Переназначение Caps Lock с помощью xmodmap не работает

Когда я программирую, мне нравится менять местами эти клавиши:

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.

Что бы я ни пытался сделать, клавиши Control не назначаются Caps_Lock(код клавиши 66). Если я оставляю keycode 66 =, клавиша не назначается, но когда я назначаю Control_Lили Control_R, она просто не работает. Но если я назначаю какую-то другую клавишу, например, keycode 66 = Tab, она назначается, без проблем.

Как будто xmodmap просто не хочет менять местами клавиши Caps Lock и Control. Очень раздражает. Любая помощь/указания были бы очень полезны.

PS: Я использую Archlinux.

решение1

TheСтраница руководства 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

но если вы хотите закончить так же, как начали, я думаю, вам нужно добавить как минимум строки removeиadd

   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).

что звучит так, будто изменения модификаторов (shift, control и т. д.) не применяются, пока вы не запустите и это.

(И логически то же самое с remove)

keycodeПреимущество этой версии в том, что она идемпотентна, то есть эффект не изменится, если xmodmap будет запущен несколько раз.

решение2

Слабо связанный ответ: Я хотел переназначить клавишу Caps Lock на левый элемент управления, оставив сам левый элемент управления нетронутым. Страница руководства xmodmap также предлагает решение:

    keycode 66 = Control_L
    clear Lock
    add Control = Control_L

Связанный контент