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_L또는 을 할당하면 Control_R작동하지 않습니다. 하지만 다른 키(예: )를 할당하면 keycode 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

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

수정자 변경(시프트, 컨트롤 등)이 실행될 때까지 적용되지 않는 것처럼 들립니다.

(그리고 논리적으로는 와 동일 remove)

keycode버전은 멱등성(idempotent)이라는 장점이 있습니다. 즉, xmodmap을 여러 번 실행해도 효과가 변경되지 않습니다.

답변2

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

    keycode 66 = Control_L
    clear Lock
    add Control = Control_L

관련 정보