xmodmap (Русский)
xmodmap - это утилита для изменения раскладки клавиш клавиатуры и мыши в Xorg.
xmodmap не относится к X keyboard extension (XKB), так как использует другие (pre-XKB) идеи на то, как коды клавиш обрабатываются в X. В целом, он рекомендуется только для простых задач. Смотрите X keyboard extension для продвинутой настройки раскладки.
- Настройки xmodmap сбрасываются утилитой setxkbmap, которая не только изменяет алфавитно-цифровые клавиши, но и сбрасывает все остальные клавиши на значения по умолчанию (смотрите LQWiki:Configuring keyboards).
- Из-за ограничений Xorg настройки xmodmap не применяются к подключенным устройствам автоматически. Если клавиатура добавлена в систему после применения пользовательской таблицы, её придётся применять снова.
Введение
В Xorg есть два типа значений клавиатуры: коды клавиш (keycodes) и символы клавиш (keysyms).
- keycode
- Код клавиши (keycode) - это числовое значение, получаемое ядром при нажатии клавиши клавиатуры или мыши.
- keysym
- Символ клавиши (keysym) - это значение, назначенное коду клавиши. Например, нажатие клавиши генерирует , которому назначен , которому в свою очередь назначен символ в таблице ASCII.
- Символами клавиш (keysyms) управляет Xorg с помощью таблицы кодов клавиш (keycodes), определяющей пару keycode-keysym, которая называется таблицей назначений клавиш. Её можно увидеть, выполнив команду .
Установка
xmodmap можно установить с помощью пакета .
Если хотите, можете установить xkeycaps - это графический фронт-энд для xmodmap.
Таблица назначений клавиш
Чтобы отобразить текущую таблицу назначений клавиш, форматированную в выражения:
$ xmodmap -pke
[...] keycode 57 = n N [...]
После каждого кода клавиши идут символы клавиши, которые ему назначены. На примере выше видно, что коду клавиши назначен символ нижнего регистра , а символу верхнего регистра назначен код клавиши плюс .
Каждому столбцу символов клавиш в таблице соответствует определённая комбинация клавиш-модификаторов:
ISO_Level3_Shift+Key
Не обязательно назначать все символы клавиши; чтобы не назначать их в конкретных столбцах, можете использовать значение NoSymbol
.
Чтобы узнать какой код клавиши отвечает за нужную вам клавишу, смотрите статью Keyboard input (Русский)#Определение кодов клавиш в Xorg, в которой объясняется, как использовать утилиту xev.
Обратите внимание, что на xmodmap влияют настройки xkbd, поэтому все восемь keysym доступны для раскладки xkbd US(intl), но не для US по умолчанию (в ней отсутствует символ ralt_switch, определённый в level3). Чтобы все 8 keysym были доступны, необходимо настроить (intl) вариант клавиатуры. Выполните (пример для раскладки US) перед вызовом xmodmap для тестирования изменений в текущем сеансе X. Чтобы сделать это изменение постоянным, отредактируйте конфигурацию xorg или файл .xprofile или .xinitrc. Полное объяснение смотрите в разделе Конфигурация клавиатуры в Xorg#Настройка раскладки клавиатуры.
Изменение таблицы
Сохраним текущую таблицу назначений клавиш в файл (например, ):
$ xmodmap -pke > ~/.Xmodmap
Можете убрать строки для клавиш, которые вы не собираетесь менять. Прописав/изменив нужные значения клавишам, применим изменения:
$ xmodmap ~/.Xmodmap
Активация изменённой таблицы при загрузке
Если вы используете GDM, XDM или LightDM, нет необходимости выполнять . А если вы пользуетесь startx, внесите следующее содержимое в файл :
Другим вариантом является редактирование глобального скрипта автозапуска .
Попробовать изменения
Чтобы сделать временные изменения:
$ xmodmap -e "keycode 46 = l L l L lstroke Lstroke lstroke" $ xmodmap -e "keysym a = e E"
Клавиши-модификаторы
xmodmap также умеет переопределять клавиши-модификаторы, например, можно "поменять местами" клавиши Control
и .
Вывод текущей таблицы модификаторов:
$ xmodmap -pm
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), Meta_L (0xcd) mod2 Num_Lock (0x94) mod3 mod4 Super_R (0x86), Super_L (0xce), Hyper_L (0xcf) mod5 ISO_Level3_Shift (0x5c), ISO_Level3_Shift (0x6c), Mode_switch (0x85), Mode_switch (0xcb)
Перед тем, как назначать клавишу-модификатор, её надо очистить. Это относится как к модификаторам, которые вы собираетесь назначить, так и к модификаторам на клавишах, которые вы собираетесь использовать. Например, если вы собираетесь назначить на клавишу A, а — на клавишу NumLock, вам нужно сначала очистить модификаторы для Caps_Lock и Num_Lock, затем назначить символы клавиш и, наконец, добавить модификаторы обратно.
является комментированием, так что в следующем примере будут очищены только клавишиControl
и . Затем символы клавиш , ,Super_L
и переназначены на противоположные. Переназначение как левой, так и правой клавиш на один и тот же модификатор означает, что обе клавиши будут функционировать одинаково.
Следующий пример изменяет CapsLock
на Control
и на CapsLock
:
Клавиша Compose
Клавиша Compose позволяет вводить специальные знаки и символы, которых нет непосредственно на клавиатуре. Это особенно полезно при наборе акцетов для букв неанглийских языков. Например, при последовательном нажатии получается é. Некоторые символы требуют нажатия более двух клавиш после .
Обычно на назначается клавиша-модификатор. Клавишу можно выбрать в настройках в большинстве сред рабочего стола, но эти опции не будут работать, если используется пользовательская таблица сопоставления клавиш, как описано в этой статье.
Чтобы установить клавишу compose с помощью , используйте идентификатор . Например, для сопоставления правого alt (AltGr
) с клавишей compose:
Код клавиши может быть другим в зависимости от клавиатуры.
Прокрутка в другую сторону
Иногда такую прокрутку называют естественной. Она похожа на поведение прокрутки на смартфонах. Добиться такого поведения можно с помощью xmodmap. Так как драйвер synaptics использует кнопки 4/5/6/7 для прокрутки вверх/вниз/влево/вправо, вы просто можете поменять порядок объявления кнопок в файле :
Теперь примените изменения:
$ xmodmap ~/.Xmodmap
Переназначение кнопок мыши
Левая, средняя и правая кнопки мыши соответствуют кнопкам 1, 2 и 3 соответственно в драйвере synaptics. Чтобы поменять местами левую и правую кнопки мыши, просто измените порядок их расположения в файле :
Не забудьте применить изменения:
$ xmodmap ~/.Xmodmap
Примеры
Вместо CapsLock Control
Простейший пример изменения CapsLock
на Control
.
~/.Xmodmap
clear lock clear control keycode 66 = Control_L add control = Control_L Control_R
Вместо CapsLock Control, а вместо LeftControl Hyper
Некоторые пользователи ноутбуков предпочитают, чтобы CapsLock
работал как Control
. А клавиша может быть использоваться в качестве модификатора (дополнительный модификатор для emacs, openbox или i3).
Вместо Super_R Hyper_R
Пользователи, которые хотят иметь клавишу на полной раскладке клавиатуры, могут использовать правый в качестве .
~/.Xmodmap
remove mod4 = Super_R keycode 134 = Hyper_R add mod3 = Hyper_R
Переключение каждой цифровой клавиши N на Shift-N и наоборот для хорватской раскладки
Должен отлично работать и для раскладок, похожих на хорватский.
Смотрите также
- Multimediakeys with .Xmodmap HOWTO by Christian Weiske
- Mapping unsupported keys with xmodmap by Pascal Bleser
- LQWiki:List of Keysyms Recognised by Xmodmap