하이퍼 키와 슈퍼 키가 동일한 기능을 수행하지 않도록 만드는 방법은 무엇입니까?

하이퍼 키와 슈퍼 키가 동일한 기능을 수행하지 않도록 만드는 방법은 무엇입니까?

나는 일부 특별한 단축키를 위해 AutoKey와 함께 사용하고 싶기 때문에 xkb를 사용하여 올바른 Windows 키(RWIN)를 Hyper_R에 다시 매핑했습니다. 편집해서 해봤습니다

/usr/share/X11/xkb/symbols/pc

RWIN 라인 수정:

  key <RWIN> {  [ Hyper_R   ]   };

(나를 인도한 대답은 다음과 같습니다)

내가 알 수 있듯이 이것은 작동하며 이제 올바른 Windows 키가 Hyper_R을 실행합니다. 그러나 Ubuntu(정확하게는 Xubuntu)에서는 Hyper와 Super가 어떻게든 동일한 작업을 수행하는 것 같습니다. 따라서 Super + e는 편집기를 시작하고 Hyper + e도 마찬가지입니다.

이것이 왜 발생하는지 또는 이 동작을 어디에서 변경할 수 있는지 잘 모르겠습니다. 저는 Hyper와 Super가 서로 다른 수식어가 되기를 바랍니다.

답변1

어떤 이유로 Ubuntu는 현재 Super와 Hyper를 모두 Mod4에 할당합니다. /usr/share/X11/xkb/symbols/pc에서 이를 볼 수 있습니다:

 key <SUPR> {   [ NoSymbol, Super_L ]   };
 modifier_map Mod4   { <SUPR> };

 key <HYPR> {   [ NoSymbol, Hyper_L ]   };
 modifier_map Mod4   { <HYPR> };

루트가 되거나 시스템 파일을 수정할 필요 없이 별도의 수정자에 super 및 hyper를 배치하도록 이를 변경할 수 있었습니다. 나는 확실히 xkb 전문가가 아니기 때문에 이것이 최선의 방법인지는 확신할 수 없지만 나에게는 신뢰할 수 있는 방법이었습니다.

먼저 로컬 기호 파일을 만듭니다. ${HOME}/.config/xkb/symbols/local에 내 것이 있습니다. 그러면 Super가 Mod3에 할당되고 Hyper가 Mod4에 할당됩니다.

default  partial modifier_keys
xkb_symbols "superhyper" {

    modifier_map Mod3 { Super_L, Super_R };

    key <SUPR> {    [ NoSymbol, Super_L ]   };
    modifier_map Mod3   { <SUPR> };

    key <HYPR> {    [ NoSymbol, Hyper_L ]   };
    modifier_map Mod4   { <HYPR> };
};

그런 다음 기존 지도를 다시 컴파일하여 "로컬"을 추가합니다.

setxkbmap -print | sed -e '/xkb_symbols/s/"[[:space:]]/+local&/' | xkbcomp -I${HOME}/.config/xkb - ${DISPLAY}

로그인할 때 실행할 스크립트에 이것을 넣으세요. 일반 사용자로 실행할 수 있습니다.

답변2

다음 두 가지 명령 으로 xmodmap이 동작을 변경할 수 있습니다.

## Hyper_L is mod4 by default, we will "move" it to Mod3
xmodmap -e "remove mod4 = Hyper_L"
xmodmap -e "add mod3 = Hyper_L"

관련 정보