Как сделать так, чтобы ключи 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 были разными модификаторами.
2 ответа
По какой-то причине 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> };
};
Затем перекомпилируйте существующую карту, чтобы добавить "local":
setxkbmap -print | sed -e '/xkb_symbols/s/"[[:space:]]/+local&/' | xkbcomp -I${HOME}/.config/xkb - ${DISPLAY}
Поместите это в скрипт, который будет запускаться при входе в систему. Вы можете запустить его как обычный пользователь.
С 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"