web-dev-qa-db-ja.com

ハイパーキーとスーパーキーが同じことをしないようにする方法は?

Xkbを使用して右ウィンドウキー(RWIN)をHyper_Rに再マップしました。これは、いくつかの特別なショートカットにAutoKeyで使用したいためです。編集してやった

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

rWIN行の変更:

  key <RWIN> {  [ Hyper_R   ]   };

これが私を導いた答えです

私の知る限り、これは機能し、正しいWindowsキーがHyper_Rを起動します。ただし、Ubuntu(正確にはXubuntu)では、HyperとSuperが何らかの形で同じことをしているようです。そのため、Super + eはエディターを起動し、Hyper + eも起動します。

これがなぜなのか、またはこの動作をどこで変更できるのかはわかりません。 HyperとSuperを異なる修飾子にしたいです。

何らかの理由で、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になったりシステムファイルを変更したりすることなく、スーパーとハイパーを別々の修飾子に配置することができました。私は間違いなく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}

ログイン時に実行するスクリプトにこれを配置します。通常のユーザーとして実行できます。

10
ergosys

xmodmapを使用すると、2つのコマンドでこの動作を変更できます。

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