Как сделать так, чтобы ключи Hyper и Super не делали одно и то же?

8

Я использовал 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 были разными модификаторами.

Александр Рехштайнер
источник
Был вещь на нем здесь , хотя я не думаю , что диалог в настоящее время существует в 13.10 ...
Уилф
Но это должно быть где-то настраивается, верно?
Александр Рехштайнер
Вы можете найти их вdconf-editor
Wilf
1
Спасибо, но не повезло. Черт, вся эта перестановка клавиатуры в Linux вызывает у меня диабет.
Александр Рехштайнер
+1: согласие (со стороны диабета). Мне не удалось найти хорошее, всестороннее, подробное руководство по управлению клавиатурой в Ubuntu. Существует ряд взаимодействий между gnome-control-center, gnome-tweak-tool, xkbd, xmodmap, которые довольно сложны и, что хуже всего, не документированы. Если вы найдете ссылку, пожалуйста, поделитесь ею! (Хотя я подозреваю, что почти никто не знает этого по-настоящему. Просто посмотрите на нефиксируемость bugs.launchpad.net/ubuntu/+source/gnome-settings-daemon/+bug/… )
Rmano

Ответы:

11

По какой-то причине 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}

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

ergosys
источник
Можно ли просто отредактировать этот файл на месте, чтобы изменить HYPR на Mod3?
Алекс Мур-Ниеми,
3
Ты можешь сделать это. Преимущества отсутствия редактирования на месте состоят в том, что обновление системы не будет перезаписывать ваши изменения.
ergosys
Что касается меня, я немного поработал с raw.githubusercontent.com/jabbalaci/dotfiles/master/.Xmodmap, хотя таинственно останавливался ...
Алекс Мур-Ниеми,
Недостаток метода моего ответа, который я обнаружил, заключается в том, что если ваша клавиатура отключена или теряет связь USB из-за случайного сбоя, скрипт должен быть запущен снова. Вероятно, есть какой-то способ перезапустить его автоматически, но я не рассматривал это. К счастью, случайный сбой происходит только один раз или около того месяца для меня. Если вы редактируете системные файлы, это не должно быть проблемой. Так что есть плюсы и минусы.
ergosys
1
Я тоже этим пользуюсь. Для него уже есть готовая настройка, поэтому я использую: setxkbmap -option 'caps: hyper'
ergosys
3

С 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"
Алекс Страгиес
источник