Как сделать так, чтобы клавиши Hyper и Super не выполняли одно и то же действие?

Как сделать так, чтобы клавиши Hyper и Super не выполняли одно и то же действие?

Я использовал xkb для переназначения правой клавиши Windows (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 были разными модификаторами.

решение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 на отдельные модификаторы без необходимости быть 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}

Поместите это в скрипт, который будет запускаться при входе в систему. Вы можете запустить его как обычный пользователь.

решение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"

Связанный контент