Поскольку вы хотите переназначить ключи для всех приложений, лучше всего использовать xmodmap. Он гибкий и очень мощный, но требует ввода нескольких команд в терминал.
Шаг 0 - Подход
X-сервер управляет клавиатурой и всеми событиями клавиш и переводит их в коды клавиш для всех приложений.
Подход заключается в том, чтобы назначить клавишу-модификатор (например, клавишу Super или Right Alt) в качестве клавиши «переключения режимов» и указать X-серверу генерировать разные коды в зависимости от того, нажата ли клавиша с нажатой клавишей Mode или нет.
По умолчанию не определена клавиша переключения режимов, а также все клавиши настроены на генерацию одного и того же кода при нажатии с переключателем режима или без него. Это хорошо, поскольку это означает, что кроме ключей, которые вы явно переопределяете, никакие другие ключи не будут вести себя по-другому или потребовать дополнительной настройки.
Однако я хотел бы, чтобы вы рассмотрели возможность использования правой клавиши Alt в качестве переключателя режимов, особенно если вы также используете compiz, поскольку некоторые плагины compiz отображают сочетания клавиш (например, средство выбора окон, переключатель смещения и т. Д.). Если вы не заинтересованы в управлении compiz с помощью клавиатуры, тогда Super просто в порядке.
Для xmodmap суперключи обозначаются как Super_L или Super_R. Вам нужно выбрать один для использования в качестве клавиши переключения режима. Альтернативно, правая клавиша alt - Alt_R. Вы можете подтвердить это, запустив xev и нажав необходимые клавиши на клавиатуре. Смотрите этот пост для шагов.
Шаг 1 - Настройка карты модификаторов
Откройте терминал ( Applications -> Accesories -> Terminal
) и выполните следующую команду, чтобы создать файл с текущими сочетаниями клавиш. Мы будем использовать это как отправную точку.
xmodmap -pke > curkeys.map
xmodmap -pm >> curkeys.map
Откройте это в вашем любимом текстовом редакторе. gedit curkeys.map &
открывает его в гедит. В конце файла вы увидите несколько таких строк:
keycode 253 =
keycode 254 =
keycode 255 =
xmodmap: up to 4 keys per modifier, (keycodes in parentheses):
shift Shift_L (0x32), Shift_R (0x3e)
lock Caps_Lock (0x42)
control Control_L (0x25), Control_R (0x69)
mod1 Alt_L (0x40), Alt_R (0x6c), Meta_L (0xcd)
mod2 Num_Lock (0x4d)
mod3
mod4 Super_L (0x85), Super_R (0x86), Super_L (0xce), Hyper_L (0xcf)
mod5 ISO_Level3_Shift (0x5c), Mode_switch (0xcb)
Удалить строку, начинающуюся с "xmodmap: до 4 ..."
Отредактируйте карту модификатора так, чтобы она выглядела следующим образом. Поместите слово «добавить» в начале каждой строки и вставьте «=» после имени модификатора. Затем удалите коды в скобках и запятые. Также обратите внимание, что я перешел Mode_switch
от mod5
строки к mod3
строке, так как она была пустой. Модифицированная таблица должна выглядеть следующим образом - фактическое содержимое в вашем случае будет немного отличаться от приведенного ниже (зависит от раскладки клавиатуры).
add shift = Shift_L Shift_R
add lock = Caps_Lock
add control = Control_L Control_R
add mod1 = Alt_L Meta_L Alt_R
add mod2 = Num_Lock
add mod3 = Mode_switch
add mod4 = Super_L Super_R Super_L Hyper_L
add mod5 = ISO_Level3_Shift
Переопределить физический ключ переключения режимов. В конце добавьте такую строку (замените Super_L на Super_R или Alt_R, если требуется).
keysym Super_L = Mode_switch
Удалите имя ключа (Super_L) из любого определения модификатора. Для Super_L это означает удаление его из строки mod4.
add mod4 = Super_R Hyper_L
Теперь правая «супер» клавиша будет по-прежнему действовать как обычная супер-клавиша, тогда как левая клавиша будет иметь специальные свойства.
Теперь нам нужно переназначить клавиши для создания разных кодов, независимо от того, нажаты они при удерживании Super_L или нет. Каждая строка в нашем файле, начинающаяся с, keycode
задает 4 клавишных символа для каждой генерируемой клавиши в зависимости от того, нажаты ли клавиши Mod1 (клавиши Shift) и Mode (см. Ссылку ).
!...........................................................................
! Key Base Shift Mode Mode+Shift
!---------------------------------------------------------------------------
keycode 13 = 4 dollar 4 quotedbl
keycode 14 = 5 percent 5 colon
keycode 15 = 6 asciicircum 6 comma
keycode 16 = 7 ampersand 7 period
...
keycode 45 = k K k K
Если мы хотим, чтобы нажатие клавиши Super_L + k генерировало клавишу «+», нам нужно изменить ее следующим образом:
keycode 45 = k K plus plus
Последний плюс также отображает Shift + Super_L + k на плюс, но это может быть сопоставлено с чем-то другим. Для каждого ключа есть ровно 1 строка для изменения. Отредактируйте больше строк, чтобы переназначить больше клавиш - оставьте первые 2 записи без изменений, чтобы сохранить нормальное поведение нажатия клавиш.
Сохраните файл и выйдите из редактора.
Установите раскладку клавиш, выполнив следующие команды в терминале. Первый устанавливает его для этой сессии, второй делает его постоянным для будущих сессий.
xmodmap curkeys.map
cp curkeys.map ~/.Xmodmap
Вы можете сразу же проверить это, нажав измененные клавиши (например, Super_L + k).
Шаг 3 - Добавление / пересмотр карты
После установки модифицированной карты легко добавить новые ключи.
Используйте xev для поиска кодов клавиш и клавиш
проверьте это, выполнив эту команду для сопоставления ключа:
xmodmap -e "keycode <code> = <base> <shift> <new-mapping> <new-shift-mapping>"
Замените элементы в угловых скобках (например, и <code>
<base>
т. Д.) Соответствующими значениями.
Сделайте резервную копию curkeys.map
файла.
- Откройте
curkeys.map
и измените строку для соответствующего кода ключа.
Повторите действия с помощью приведенных ниже команд (первая не нужна, если вы выполнили шаг 2)
xmodmap curkeys.map
cp curkeys.map ~/.Xmodmap
Примечание: 1. Изменения, сделанные в сочетаниях клавиш (например, через System -> Preferences -> Keyboard Shortcuts
), влияют на карту модификаторов и, как правило, будут потеряны при следующем входе в систему. Поэтому, пожалуйста, избегайте этого.
Примечание: 2 : я иногда получаю сообщения об ошибках как этот, используя этот метод. Я не знаю, что это значит, однако, как правило, они безвредны.
X Error of failed request: BadValue (integer parameter out of range for operation)
Major opcode of failed request: 118 (X_SetModifierMapping)
Value in failed request: 0x17
Serial number of failed request: 263
Current serial number in output stream: 263
Подробная справка по xmodmap доступна здесь .