저는 개발자이고 현재 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 방법이 작동하지 않는 이유를 아직도 이해하지 못합니다. 이것이 누군가에게 도움이 되기를 바랍니다.