xmodmap (Русский)

Состояние перевода:
На этой странице представлен перевод статьи
xmodmap
. Дата последней синхронизации: 20 февраля 2022. Вы можете
помочь
синхронизировать перевод, если в английской версии произошли
изменения
.
Ссылки по теме
Xorg (Русский)
Конфигурация клавиатуры в Xorg
Keyboard input (Русский)
Конфигурация клавиатуры в консоли
Xbindkeys (Русский)
xmodmap
- это утилита для изменения раскладки клавиш клавиатуры и мыши в
Xorg
.
xmodmap
не относится к
X keyboard extension
(XKB), так как использует другие (pre-XKB) идеи на то, как
коды клавиш
обрабатываются в X. В целом, он рекомендуется только для простых задач. Смотрите
X keyboard extension
для продвинутой настройки
раскладки.
Примечание
Настройки
xmodmap
сбрасываются утилитой
setxkbmap
, которая не только изменяет алфавитно-цифровые клавиши, но и сбрасывает все остальные клавиши на значения по умолчанию (смотрите
LQWiki:Configuring keyboards
).
Из-за ограничений Xorg настройки
xmodmap
не применяются к подключенным устройствам автоматически. Если клавиатура добавлена в систему после применения пользовательской таблицы, её придётся применять снова.
[1]
Введение
В
Xorg
есть два типа значений клавиатуры:
коды клавиш (keycodes)
и
символы клавиш (keysyms)
.
keycode
Код клавиши
(keycode) - это числовое значение, получаемое ядром при нажатии клавиши клавиатуры или мыши.
keysym
Символ клавиши
(keysym) - это значение, назначенное
коду клавиши
. Например, нажатие клавиши
a
генерирует
keycode 38
, которому назначен
keysym 0×61
, которому в свою очередь назначен символ
a
в таблице
ASCII
.
Символами клавиш
(keysyms) управляет
Xorg
с помощью таблицы
кодов клавиш
(keycodes), определяющей пару
keycode
-
keysym
, которая называется
таблицей назначений клавиш
. Её можно увидеть, выполнив команду
xmodmap
.
Установка
xmodmap
можно
установить
с помощью пакета
xorg-xmodmap
.
Если хотите, можете установить
xkeycaps
- это графический фронт-энд для
xmodmap
.
Таблица назначений клавиш
Чтобы отобразить текущую таблицу назначений клавиш, форматированную в выражения:
$ xmodmap -pke
[...]
keycode  57 = n N
[...]
После каждого
кода клавиши
идут
символы клавиши
, которые ему назначены. На примере выше видно, что
коду клавиши
57
назначен символ нижнего регистра
n
, а символу верхнего регистра
N
назначен
код клавиши
57
плюс
Shift
.
Каждому столбцу
символов клавиш
в таблице соответствует определённая комбинация клавиш-модификаторов:
Key
Shift+Key
Mode_switch+Key
Mode_switch+Shift+Key
ISO_Level3_Shift+Key
ISO_Level3_Shift+Shift+Key
Не обязательно назначать все
символы клавиши
; чтобы не назначать их в конкретных столбцах, можете использовать значение
NoSymbol
.
Чтобы узнать какой
код клавиши
отвечает за нужную вам клавишу, смотрите статью
Keyboard input (Русский)#Определение кодов клавиш в Xorg
, в которой объясняется, как использовать утилиту
xev
.
Совет
Существуют предопределённые описательные
символы клавиш
для мультимедиа кнопок, например
XF86AudioMute
или
XF86Mail
. Узнать от таких
символах клавиш
вы можете из файла
/usr/include/X11/XF86keysym.h
. Многие мультимедиа программы изначально разработаны так, чтобы работать с такими
символами клавиш
из коробки, без необходимости каких-либо настроек.
Обратите внимание, что на xmodmap влияют настройки xkbd, поэтому все восемь keysym доступны для раскладки xkbd US(intl), но не для US по умолчанию (в ней отсутствует символ ralt_switch, определённый в level3). Чтобы все 8 keysym были доступны, необходимо настроить
(intl)
вариант клавиатуры. Выполните
$ setxkbmap -layout 'us(intl)'
(пример для раскладки US) перед вызовом xmodmap для тестирования изменений в текущем сеансе X. Чтобы сделать это изменение постоянным, отредактируйте конфигурацию xorg или файл .xprofile или .xinitrc. Полное объяснение смотрите в разделе
Конфигурация клавиатуры в Xorg#Настройка раскладки клавиатуры
.
Изменение таблицы
Сохраним текущую таблицу назначений клавиш в файл (например,
~/.Xmodmap
):
$ xmodmap -pke > ~/.Xmodmap
Можете убрать строки для клавиш, которые вы не собираетесь менять. Прописав/изменив нужные значения клавишам, применим изменения:
$ xmodmap ~/.Xmodmap
Активация изменённой таблицы при загрузке
Если вы используете
GDM
,
XDM
или
LightDM
, нет необходимости выполнять
source ~/.Xmodmap
. А если вы пользуетесь
startx
, внесите следующее содержимое в файл
~/.xinitrc
:
~/.xinitrc
[[ -f ~/.Xmodmap ]] && xmodmap ~/.Xmodmap
Другим вариантом является редактирование глобального скрипта автозапуска
/etc/X11/xinit/xinitrc
.
Попробовать изменения
Чтобы сделать временные изменения:
$ xmodmap -e "keycode  46 = l L l L lstroke Lstroke lstroke"
$ xmodmap -e "keysym a = e E"
Клавиши-модификаторы
xmodmap
также умеет переопределять
клавиши-модификаторы
, например, можно "поменять местами" клавиши
Control
и
Super
.
Вывод текущей таблицы модификаторов:
$ 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)
Примечание
xmodmap чувствителен к регистру. Использование неправильного регистра (например,
Mode_Switch
вместо правильного
Mode_switch
) приведёт к ошибкам.
Перед тем, как назначать клавишу-модификатор, её надо очистить. Это относится как к модификаторам, которые вы собираетесь назначить, так и к модификаторам на клавишах, которые вы собираетесь использовать. Например, если вы собираетесь назначить
Caps_Lock
на клавишу A, а
B
— на клавишу NumLock, вам нужно сначала очистить модификаторы для Caps_Lock и Num_Lock, затем назначить символы клавиш и, наконец, добавить модификаторы обратно.
~/.Xmodmap
[...]
clear lock
clear mod2
keycode  38 = Caps_Lock
keycode  77 = Num_Lock
add lock = Caps_Lock
add mod2 = Num_Lock
!
является комментированием, так что в следующем примере будут очищены только клавиши
Control
и
Mod4
. Затем
символы клавиш
Control_L
,
Control_R
,
Super_L
и
Super_R
переназначены на противоположные. Переназначение как левой, так и правой клавиш на один и тот же модификатор означает, что обе клавиши будут функционировать одинаково.
~/.Xmodmap
[...]
!clear Shift
!clear Lock
clear Control
!clear Mod1
!clear Mod2
!clear Mod3
clear Mod4
!clear Mod5
!add Shift   = Shift_L Shift_R
!add Lock    = Caps_Lock
add Control = Super_L Super_R
!add Mod1    = Alt_L Alt_R
!add Mod2    = Mode_switch
!add Mod3    =
add Mod4    = Control_L Control_R
!add Mod5    =
Примечание
Пример подразумевает, что символы клавиш
Control_L
и
Control_R
были назначены на модификаторе
Control
, а символы клавиш
Super_L
и
Super_R
на модификатор
Mod4
. Если у вас возникает ошибка
X Error of failed request:  BadValue (integer parameter out of range for operation)
, вы должны  адаптировать таблицу соответствующе. Команда
xmodmap
покажет список модификаторов и клавиш, назначенных на них.
Следующий пример изменяет
CapsLock
на
Control
и
Shift+CapsLock
на
CapsLock
:
~/.Xmodmap
clear lock
clear control
add control = Caps_Lock Control_L Control_R
keycode 66 = Control_L Caps_Lock NoSymbol NoSymbol
Клавиша Compose
Клавиша Compose
позволяет вводить специальные знаки и символы, которых нет непосредственно на клавиатуре. Это особенно полезно при наборе акцетов для букв неанглийских языков. Например, при последовательном нажатии
Compose
e
'
получается é. Некоторые символы требуют нажатия более двух клавиш после
Compose
.
Обычно на
Compose
назначается клавиша-модификатор. Клавишу можно выбрать в настройках в большинстве сред рабочего стола, но эти опции не будут работать, если используется пользовательская таблица сопоставления клавиш, как описано в этой статье.
Чтобы установить клавишу compose с помощью
Xmodmap
, используйте идентификатор
Multi_key
. Например, для сопоставления правого alt (
AltGr
) с клавишей compose:
~/.Xmodmap
[...]
keycode 108 = Multi_key Alt_R Meta_R Alt_R Meta_R
Код клавиши может быть другим в зависимости от клавиатуры.
Прокрутка в другую сторону
Иногда такую прокрутку называют
естественной
. Она похожа на поведение прокрутки на смартфонах. Добиться такого поведения можно с помощью xmodmap. Так как драйвер synaptics использует кнопки 4/5/6/7 для прокрутки  вверх/вниз/влево/вправо, вы просто можете поменять порядок объявления кнопок в файле
~/.Xmodmap
:
~/.Xmodmap
pointer = 1 2 3
5 4
7 6 8 9 10 11 12
Теперь примените изменения:
$ xmodmap ~/.Xmodmap
Переназначение кнопок мыши
Левая, средняя и правая кнопки мыши соответствуют кнопкам 1, 2 и 3 соответственно в драйвере synaptics. Чтобы поменять местами левую и правую кнопки мыши, просто измените порядок их расположения в файле
~/.Xmodmap
:
~/.Xmodmap
pointer =
3 2 1
Не забудьте применить изменения:
$ xmodmap ~/.Xmodmap
Примеры
Испанский
~/.Xmodmap
keycode  24 = a A aacute Aacute ae AE ae
keycode  26 = e E eacute Eacute EuroSign cent EuroSign
keycode  30 = u U uacute Uacute downarrow uparrow downarrow
keycode  31 = i I iacute Iacute rightarrow idotless rightarrow
keycode  32 = o O oacute Oacute oslash Oslash oslash
keycode  57 = n N ntilde Ntilde n N n
keycode  58 = comma question comma questiondown dead_acute dead_doubleacute dead_acute
keycode  61 = exclam section exclamdown section dead_belowdot dead_abovedot dead_belowdot
!Maps the Mode key to the Alt key
keycode 64 = Mode_switch
Эсперанто
~/.Xmodmap
keycode 54 = c C c C ccircumflex Ccircumflex
keycode 42 = g G g G gcircumflex Gcircumflex
keycode 43 = h H h H hcircumflex Hcircumflex
keycode 44 = j J j J jcircumflex Jcircumflex
keycode 39 = s S s S scircumflex Scircumflex
keycode 30 = u U u U ubreve Ubreve
Вместо 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
. А клавиша
Left Control
может быть использоваться в качестве модификатора
Hyper
(дополнительный модификатор для
emacs
,
openbox
или
i3
).
~/.Xmodmap
clear      lock 
clear   control
clear      mod1
clear      mod2
clear      mod3
clear      mod4
clear      mod5
keycode      37 = Hyper_L
keycode      66 = Control_L
add     control = Control_L Control_R
add        mod1 = Alt_L Alt_R Meta_L
add        mod2 = Num_Lock
add        mod3 = Hyper_L
add        mod4 = Super_L Super_R
add        mod5 = Mode_switch ISO_Level3_Shift
Вместо Super_R Hyper_R
Пользователи, которые хотят иметь клавишу
Hyper
на полной раскладке клавиатуры, могут использовать правый
Super
в качестве
Hyper
.
~/.Xmodmap
remove  mod4 = Super_R
keycode  134 = Hyper_R
add     mod3 = Hyper_R
Переключение каждой цифровой клавиши N на Shift-N и наоборот для хорватской раскладки
Должен отлично работать и для раскладок, похожих на хорватский.
~/.Xmodmap
keycode 10 = exclam 1 1 exclam asciitilde dead_tilde asciitilde
keycode 11 = quotedbl 2 2 quotedbl dead_caron caron dead_caron
keycode 12 = numbersign 3 3 numbersign asciicircum dead_circumflex asciicircum
keycode 13 = dollar 4 4 dollar dead_breve breve dead_breve
keycode 14 = percent 5 5 percent degree dead_abovering degree
keycode 15 = ampersand 6 6 ampersand dead_ogonek ogonek dead_ogonek
keycode 16 = slash 7 7 slash grave dead_grave grave
keycode 17 = parenleft 8 8 parenleft dead_abovedot abovedot dead_abovedot
keycode 18 = parenright 9 9 parenright dead_acute apostrophe dead_acute
keycode 19 = equal 0 0 equal dead_doubleacute doubleacute dead_doubleacute
Смотрите также
xmodmap(1)
Multimediakeys with .Xmodmap HOWTO
by Christian Weiske
Mapping unsupported keys with xmodmap
by Pascal Bleser
LQWiki:List of Keysyms Recognised by Xmodmap