Esc 키를 클릭해도 여전히 Esc 키로 작동하는 수정자 키로 변환

Esc 키를 클릭해도 여전히 Esc 키로 작동하는 수정자 키로 변환

타일링 창 관리자(현재 xMonad)를 사용하므로 창 관리를 위한 "컨트롤 키" 역할을 하는 키가 필요합니다. Windows/Super/Mod4 키가 있는 키보드를 사용할 때마다 왼쪽 Windows 키를 해당 키로 사용하고 오른쪽 Windows 키를 Compose/Multi_key로 사용합니다.

그러나 Windows 키가 없는(즉, 윙키가 없는) 여러 개의 ([아주] 오래된) 키보드도 있고 "WM 컨트롤"로 (편안하게) 사용할 수 있는 키도 없습니다. 열쇠". 예전에는 xMonad에서 허용했기 때문에 Control+Alt를 "WM 컨트롤 키(조합)"로 사용했는데, 나중에 보니 이것이 (특정) Emacs(이동 명령)에 방해가 되어서 안되는 것 같지는 않습니다. 더 긴 옵션입니다. 그래서 다음과 같은 방법으로 Esc 키를 사용할 수 있다고 생각했습니다.

  • Ecs를 보유하면 Mod4처럼 작동합니다.
  • Esc를 누르면 Esc와 동일합니다.

AFAIK, Escape를 들고 있으면 대개 아무 일도 일어나지 않기 때문에 이렇게 하는 것이 좋을 것 같다고 생각했습니다. 그런 다음 다음을 사용하여 이를 달성하려고 했습니다 xmodmap.

clear Mod4 
add Mod4 = Super_L Escape

내 기대는 다음과 같습니다. Super_L은 여전히 ​​슈퍼 역할을 하며 Escape는 이제 추가 슈퍼입니다. 다음 단계는 를 xcape사용하여 이전 Esc 키 동작(일부)을 복원하는 것입니다.

내가 얻는 것(의 결과 xmodmap):

xmodmap:  up to 4 keys per modifier, (keycodes in parentheses):                                                                         

shift       Shift_L (0x32),  Shift_R (0x3e)                                                                                             
lock        Caps_Lock (0x42)                                                                                                            
control     Control_L (0x25),  Control_R (0x69)                                                                                         
mod1        Alt_L (0x40),  Meta_L (0xcd)                                                                                                
mod2        Num_Lock (0x4d),  Hyper_L (0xcf)                                                                                            
mod3        Scroll_Lock (0x4e),  Mode_switch (0xcb)                                                                                     
mod4        Escape (0x9),  y (0x34),  Super_L (0x85),  Super_L (0xce)                                                                   
mod5        ISO_Level3_Shift (0x5c) 

내가 이해하지 못하는 것은 다음과 같습니다.

  • y갑자기 Mod4로 설정되는 이유는 무엇입니까 ?
  • Escape가 여전히 Escape로 작동하는 이유(한 번 누르면)그리고Super(누르고 있는 동안, 변경 사항을 테스트하려고 할 때 이 사실을 발견했습니다). 지금은 사용하지 않았지만 xcape.

이것은 버그입니까 xmodmap, 아니면 잘못 사용하고 있습니까 xmodmap? 나는 후자인 것 같지만, 내가 하려는 일을 달성하도록 도와줄 수 있는 사람이 있습니까?


추가 정보(관련성이 없길 바랍니다):

  • 현재 운영 체제는 Arch Linux입니다.
  • 등과 같은 다른 소프트웨어를 사용하는 솔루션에 열려 있습니다 xkb.xdotool
  • 저는 현재 독일 QWERTZ 레이아웃(예: ANSI가 아닌 ISO)을 사용하고 있으며 때로는네오(내가 아는 한, de키맵/레이아웃의 또 다른 변형으로 구현되었습니다. 아래 출력을 참조하세요 localectl.)
  • 내 솔루션이 효과가 있기를 바랍니다.건반/하드웨어 독립적: 키보드를 변경해도 프로필은 변경하고 싶지 않습니다.
  • 누군가 이 문제를 제기하기 전에: Capslock을 세 번째 레이어 수정자 중 하나로 사용하고 다섯 번째 및 여섯 번째 레이어에도 사용되는 Neo 레이아웃을 가끔 사용하기 때문에 Super를 Capslock에 매핑하는 것은 옵션이 아닙니다. 이는 또한 내가 해결책을 원한다는 것을 의미합니다.키보드 레이아웃 독립적, Neo와 QWERTZ 간에 쉽게 전환할 수 있습니다.
  • 나는 여전히 다른 제안에 열려 있습니다. 나의 유일한 요구 사항: 다른 프로그램(예: Emacs 또는 Vim)과 간섭이 없거나 최소화되어야 하며, "WM 제어 키"로 사용되는 키(조합)가 키보드 왼쪽에 있어야 합니다. 왜냐하면 내가 사용하는 대부분의 다른 프로그램은 WM을 제어하는 ​​키는 키보드 오른쪽에 있습니다(예: h, j, k, l...).

현재 사례인 변경을 수행하기 전에 xmodmap출력은 다음과 같습니다.

xmodmap:  up to 2 keys per modifier, (keycodes in parentheses):                                                                         

shift       Shift_L (0x32),  Shift_R (0x3e)                                                                                             
lock        Caps_Lock (0x42)                                                                                                            
control     Control_L (0x25),  Control_R (0x69)                                                                                         
mod1        Alt_L (0x40),  Meta_L (0xcd)                                                                                                
mod2        Num_Lock (0x4d),  Hyper_L (0xcf)                                                                                            
mod3        Scroll_Lock (0x4e),  Mode_switch (0xcb)                                                                                     
mod4        Super_L (0x85),  Super_L (0xce)                                                                                             
mod5        ISO_Level3_Shift (0x5c)  

.Xmodmap현재는 다음과 같습니다.

add Mod3 = Scroll_Lock

그리고 localectl말했다:

   System Locale: LANG=de_DE.UTF-8
                  LC_COLLATE=C
       VC Keymap: de-latin1-nodeadkeys
      X11 Layout: de,de
       X11 Model: pc105
     X11 Variant: nodeadkeys,neo
     X11 Options: compose:rwin,grp:ctrls_toggle

답변1

나는 사용한다X 각도이를 위해. 키를 Super_LXmodmap에 매핑하고 xcape -e 'Super_L=Escape'XMonad가 시작될 때 실행합니다.

관련 정보