ハイパーキーとスーパーキーが同じ動作をしないようにするにはどうすればよいですか?

ハイパーキーとスーパーキーが同じ動作をしないようにするにはどうすればよいですか?

私は、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> };

これを変更して、root になる必要も、システム ファイルを変更する必要もなく、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

次の 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"

関連情報