응용 프로그램 키맵의 수정자 키인 CapsLock

응용 프로그램 키맵의 수정자 키인 CapsLock

저는 개발자이고 현재 Ubuntu Linux와 PyCharm IDE를 사용하여 웹사이트를 개발하고 있습니다. 타이핑 성능을 향상시키기 위해 CapsLock을 Hyper_L로 변경하고 xmodmap을 사용하여 mod3에 할당하는 것을 고려했습니다. 그런 다음 "i" 키의 mod3를 "Up"에 매핑하고 싶습니다. 지금까지 내가 한 일은 다음과 같습니다.

xmodmap -e "keysym Caps_Lock = Hyper_L"

출력은 다음과 같습니다:

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

그런 다음 mod4에서 Hyper_L을 제거했습니다.

xmodmap -e "remove Mod4 = Hyper_L"

그 후 Hyper_L을 mod3에 할당해 보았습니다.

xmodmap -e "add Mod3 = Hyper_L"

하지만 다음과 같은 오류가 발생합니다.

X Error of failed request:  BadValue (integer parameter out of range for operation)
  Major opcode of failed request:  118 (X_SetModifierMapping)
  Value in failed request:  0x17
  Serial number of failed request:  11
  Current serial number in output stream:  11

그렇다면 여기서 무엇이 잘못되었나요? 어떻게 작동하게 할 수 있나요? 내가 제대로 하고 있는 걸까? 아니면 mod3를 사용자 정의 키로 사용하는 데 다른 접근 방식을 사용해야 합니까?

PS 저는 Microsoft Natural Ergonomic 7000 키보드를 사용하고 있습니다.

답변1

인터넷에는 수많은 답변이 있으며 대부분 혼란스럽습니다.

핵심은 "키코드 66"을 슈퍼키에 매핑하고 다른 모드{1,2,4,5}(있는 경우에만)에서 해당 키에 대한 매핑을 제거한 다음 mod3을 설정해야 한다는 것입니다.

~/.Xmodmap을 열고 다음을 입력하십시오.

! Unmap capslock
clear Lock
keycode 66 = Hyper_L

! Leave mod4 as windows key _only_
remove mod4 = Hyper_L

! Set mod3 to capslock
add mod3 = Hyper_L

이것을 실행

xmodmap ~/.Xmodmap

문제가 발생하면 다음 방법을 사용하여 키보드를 재설정할 수 있습니다.

setxkbmap -layout us

폭발의 가능한 원인은 Hyper_L이 다른 곳에 매핑되어 있다는 것입니다. 매개변수 없이 xmodmap을 실행하여 Hyper_L에 바인드된 다른 항목을 찾아 이 문제를 해결하십시오. 제거해야 할 항목을 알고 나면 .Xmodmap 파일에 "remove BINDING = Hyper_L"을 추가하십시오.

X11 세션을 열면 .Xmodmap 파일이 로드되고 다음에 로그인하거나 재부팅할 때 맵이 준비되어야 합니다.

이 구성은 내 우분투 14.04 설정에서 작동합니다. 다른 *nix가 있고 이것이 작동하지 않는 경우 여기에 문제를 해결하기 위해 수행한 작업을 게시해 주시면 답변에 병합해 드리겠습니다.

답변2

이 질문이 오래되었다는 것을 알고 있지만 (안타깝게도) heymanthew의 답변이 저에게 적합하지 않았기 때문에 솔루션을 공유해야 합니다. 마침내 나에게 효과가 있었던 것은 다음과 같습니다.

setxkbmap -layout us -option lv3:caps_switch -variant intl

이렇게 하면 caps lock이 mod3 키로 활성화되고 레이아웃이 "us"로 설정되며 변형이 "intl"로 설정됩니다. Fish와 같은 대화형 셸을 사용하는 경우 "-layout", "-option" 또는 "-variant" 다음에 Tab 키를 눌러 가능한 인수의 전체 목록을 얻을 수 있습니다.

추가 배경 정보: 1년 전 저는 표준 gnome 환경에서 전환하여 i3 창 관리자를 실행하는 Ubuntu 시스템에서 xmodmap 방법을 시도했습니다. "us" xkb 키보드 레이아웃, 특히 데드 키가 있는 국제 키보드 레이아웃을 수정했습니다. gnome-desktop-manager를 사용하면 훌륭하게 작동하지만(caps-lock을 mod3 키로 설정하는 옵션이 있음) 얻을 수 없습니다. xmodmap과 함께 작동합니다. 이것은 내 실수였습니다. gdm GUI가 xmodmap을 사용하여 caps lock을 mod3에 매핑한다고 생각했지만 실제로는 이 X11 옵션을 설정하고 있었습니다. 이제 Arch로 전환했으니 이 문제를 해결해야 합니다.

이 문제를 해결하려는 사람이라면 누구나 localectl, xmodmap, setxkbmap에 대한 매뉴얼 페이지를 읽고 절전 및 재개 섹션을 추가하여 레이아웃을 테스트할 것을 권장합니다.

setxkbmap ... ; sleep 10; setxkbmap <INSERT DEFAULT SETTINGS>

이렇게 하면 시간이 많이 절약됩니다.

그러나 xmodmap 방법이 작동하지 않는 이유를 아직도 이해하지 못합니다. 이것이 누군가에게 도움이 되기를 바랍니다.

관련 정보