xmodmap (Русский) - ArchWiki

Jump to content

# xmodmap (Русский)

From ArchWiki

Состояние перевода: На этой странице представлен перевод статьи 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`.

Каждому столбцу символов клавиш в таблице соответствует определённая комбинация клавиш-модификаторов:

1. `Key`
2. `Shift+Key`
3. `Mode_switch+Key`
4. `Mode_switch+Shift+Key`
5. `ISO_Level3_Shift+Key`
6. `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

Categories:

- Keyboard configuration (Русский)
- Xorg commands (Русский)