Caps Lock을 Hyper/Additional Modifier로 변경할 수 있나요?

Caps Lock을 Hyper/Additional Modifier로 변경할 수 있나요?

Arch Linux에서는 Ctrl 대신 Caps Lock 기능을 사용합니다. 콘솔에서는 개인 키맵을 통해, X에서는 xorg.conf.

Caps Lock을 Hyper 수정자로 변경하는 방법에 대해 조사해 본 결과 콘솔에서는 가능하지 않은 것 같지만 X에서는 이를 수행할 수 있는 방법이 있습니까?

이것이 내가 현재 X에 사용하는 것입니다:

Option "XkbOptions" "ctrl:nocaps"

XkbOptionsCaps 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에서 모든 옵션을 찾을 수 있습니다.

관련 정보