Arch Linux에서는 Ctrl 대신 Caps Lock 기능을 사용합니다. 콘솔에서는 개인 키맵을 통해, X에서는 xorg.conf
.
Caps Lock을 Hyper 수정자로 변경하는 방법에 대해 조사해 본 결과 콘솔에서는 가능하지 않은 것 같지만 X에서는 이를 수행할 수 있는 방법이 있습니까?
이것이 내가 현재 X에 사용하는 것입니다:
Option "XkbOptions" "ctrl:nocaps"
XkbOptions
Caps Lock을 추가 수정자로 작동시키는 옵션이나 이와 유사한 것이 있습니까 ?
나의 목표는 새로운 수정자를 사용하여 Emacs에서 더 많은 사용자 정의 키맵을 생성할 수 있는 것입니다.
답변1
xmodmap을 사용하면 이 작업이 더 쉬울 수 있습니다. .xsession 또는 .xinitrc에 다음을 입력하세요.
xmodmap -e "keysym Caps_Lock = Hyper_L"
또한 Hyper_L이 다른 키와 공유되지 않는 수정자 맵에 할당되어 있는지 확인해야 합니다. 그렇지 않으면 해당 키에 대한 수정자가 생성될 수 있습니다(또는 해당 키가 Hyper가 될 수 있음). 인수 없이 실행합니다 xmodmap
(출력은 다를 수 있음).
> xmodmap
xmodmap: up to 3 keys per modifier, (keycodes in parentheses):
shift Shift_L (0x32), Shift_R (0x3e)
lock
control Control_L (0x25), Control_L (0x42), 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 (0x4e)
mod5 ISO_Level3_Shift (0x5c), Mode_switch (0xcb)
이 예에서 Hyper_L에는 하이퍼키와 동일한 수정자가 할당되므로 슈퍼키로 간주됩니다. 다음 명령은 이를 mod4에서 제거하고 빈 mod3 수정자 맵에 넣습니다.
xmodmap -e "remove Mod4 = Hyper_L" -e "add Mod3 = Hyper_L"
Hyper_L이 수정자 맵 목록에 나타나지 않으면 삭제 명령이 필요하지 않을 수 있습니다.
수정자 매핑의 미스터리는 X11이 수정자가 꺼져 있는지 여부를 어떻게 전달하는지에 따라 달라집니다. "Hyper" 또는 "Super"를 보내는 대신 단일 바이트 비트 필드를 보냅니다. 각 비트는 수정자 맵에 해당합니다. 애플리케이션은 수정자 맵을 보고 특정 비트가 실제로 무엇을 의미하는지 알아내야 합니다. 예를 들어 Super 및 Hyper 키를 모두 mod4에 할당하면 응용 프로그램은 Super 또는 Hyper(또는 둘 다)를 눌렀는지 여부를 알 수 없습니다.
답변2
이것은 나에게 효과적입니다.
keycode 66 = BackSpace
remove Mod4 = Hyper_L
add Mod3 = Hyper_L
keycode 66 = Hyper_L
답변3
xmodmap을 사용한 다른 답변은 정확하지만 더 쉬운 방법이 있습니다. 바꾸다:
Option "XkbOptions" "ctrl:nocaps"
그냥 사용:
Option "XkbOptions" "caps:hyper"
/usr/share/X11/xkb/rules/base.lst에서 모든 옵션을 찾을 수 있습니다.