xmodmap을 사용하여 Caps Lock을 다시 매핑하면 작동하지 않습니다.

xmodmap을 사용하여 Caps Lock을 다시 매핑하면 작동하지 않습니다.

저는 프로그래밍할 때 다음 키를 바꾸는 것을 좋아합니다.

EscTab CtrlCapsLock

나는 ~/.xmodmap다음과 같은 재매핑을 지정했습니다.

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

그리고 키 교환은 문제가 되지 않습니다. 하지만 그렇지 않고 교환하면 두 키가 모두 Escape.TabCaps_LockControl_LCaps_Lock

무엇을 하려고 해도 Control 키가 Caps_Lock(키코드 66)에 할당되지 않습니다. 에서 나가면 키가 할당되지 않지만, 또는 keycode 66 =에서 할당하면 작동하지 않습니다. 하지만 예를 들어 다른 키를 할당하면 해당 키도 할당되므로 문제가 없습니다.Control_LControl_Rkeycode 66 = Tab

xmodmap은 Caps Lock과 Control 키가 바뀌는 것을 원하지 않는 것과 같습니다. 너무 답답해요. 어떤 도움이나 지침이라도 도움이 될 것입니다.

PS: 저는 Archlinux를 사용하고 있습니다.

답변1

이것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

하지만 시작한 대로 끝내고 싶다면 최소한 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

이 문단을 토대로 그런 일이 벌어지고 있는 것 같아요

   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버전의 장점은 멱등성(idempotent)이라는 것입니다. 즉, xmodmap을 여러 번 실행해도 효과가 변하지 않습니다.

답변2

느슨하게 관련된 답변: Caps Lock 키를 왼쪽 컨트롤에 다시 매핑하고 실제 왼쪽 컨트롤은 변경하지 않고 싶습니다. xmodmap 매뉴얼 페이지에서도 솔루션을 제공합니다.

    keycode 66 = Control_L
    clear Lock
    add Control = Control_L

관련 정보