Remapear Caps Lock com xmodmap não funciona

Remapear Caps Lock com xmodmap não funciona

Quando programo, gosto de trocar essas chaves:

EscTab CtrlCapsLock

Em ~/.xmodmap, especifiquei estes remapeamentos:

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

As chaves Escapeand Tabsão trocadas, sem problemas, mas em vez de Caps_Locktrocadas Control_L, ambas as chaves se tornam Caps_Lock.

O que quer que eu tente fazer, as teclas de controle não são atribuídas Caps_Lock(código de acesso 66). Se eu deixar o keycode 66 =, a chave não será atribuída, mas quando eu atribuir Control_Lou Control_R, ela simplesmente não funciona. Mas, se eu atribuir alguma outra chave, por exemplo, keycode 66 = Tabela será atribuída, sem problemas.

É como se o xmodmap simplesmente não quisesse que as teclas Caps Lock e Control fossem trocadas. Realmente frustrante. Qualquer ajuda/indicação seria realmente útil.

PS: Estou usando Archlinux.

Responder1

OPágina de manual xmodmap(1)tem um exemplo exatamente para isso

   !
   ! 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

mas se você quiser terminar do jeito que começou, acho que você precisa adicionar pelo menos as linhas removeeadd

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

Suponho que seja esse o caso com base neste parágrafo

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

o que faz parecer que as alterações do modificador (shift, control, etc.) não são aplicadas até que você execute isso também.

(E logicamente o mesmo com remove)

A keycodeversão tem a vantagem de ser idempotente, o que significa que o efeito não mudará se o xmodmap for executado várias vezes.

Responder2

Resposta vagamente relacionada: eu queria remapear a tecla Caps Lock para o controle esquerdo, deixando o controle esquerdo real intacto. A página man do xmodmap também oferece a solução:

    keycode 66 = Control_L
    clear Lock
    add Control = Control_L

informação relacionada