xmodmap (Русский)

From ArchWiki
Jump to: navigation, search

Tango-preferences-desktop-locale.pngЭта страница нуждается в сопроводителеTango-preferences-desktop-locale.png

Статья не гарантирует актуальность информации. Помогите русскоязычному сообществу поддержкой подобных страниц. См. Команда переводчиков ArchWiki

xmodmap - это утилита для изменения раскладки клавиш клавиатуры и мыши в Xorg.

xmodmap не относится к X keyboard extension (XKB), так как использует другие (pre-XKB) идеи на то, как коды клавиш обрабатываются в X. В целом, он рекомендуется только для простых задач. Смотрите X keyboard extension для продвинутой настройки раскладки.

Введение

В Xorg есть два типа значений клавиатуры: коды клавиш (keycodes) и символы клавиш (keysyms).

keycode
Код клавиши (keycode) - это числовое значение, получаемое ядром при нажатии клавиши клавиатуры или мыши.
keysym
Символ клавиши (keysym) - это значение, назначенное коду клавиши. Например, нажатие клавиши A генерирует keycode 73, которому назначен keysym 0×61, которому в свою очередь назначен символ A в таблице ASCII.
Символами клавиш (keysyms) управляет Xorg с помощью таблицы кодов клавиш (keycodes), определяющей пару keycode-keysym, которая называется таблицей назначений клавиш. Её можно увидеть, выполнив команду xmodmap.

Установка

xmodmap можно установить с помощью пакета xorg-xmodmap из официальных репозиториев.

Если хотите, можете установить xkeycaps - это графический фронт-энд для xmodmap.

Таблица назначений клавиш

Чтобы отобразить текущую таблицу назначений клавиш, форматированную в выражения:

$ xmodmap -pke
[...]
keycode  57 = n N
[...]

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

  1. Key
  2. Shift+Key
  3. mode_switch+Key
  4. mode_switch+Shift+Key
  5. AltGr+Key
  6. AltGr+Shift+Key

После каждого кода клавиши идут символы клавиши, которые ему назначены. На примере выше видно, что коду клавиши 57 назначен символ нижнего регистра n, а символу верхнего регистра N назначен код клавиши 57 плюс Shift.

Не обязательно назначать все символы клавиши; чтобы не назначать их в конкретных столбцах, можете использовать значение NoSymbol.

Чтобы узнать какой код клавиши отвечает за нужную вам клавишу, прочтите статью о дополнительных клавишах, в которой объясняется как использовать утилиту xev.

Совет: Существуют предопределённые описательные символы клавиш для мультимедиа кнопок, например XF86AudioMute или XF86Mail. Узнать от таких символах клавиш вы можете из файла /usr/include/X11/XF86keysym.h. Многие мультимедиа программы изначально разработаны так, чтобы работать с такими символами клавиш из коробки, без необходимости каких-либо настроек.

Изменение таблицы

Сохраним текущую таблицу назначений клавиш в файл (i.e. ~/.Xmodmap):

$ xmodmap -pke > ~/.Xmodmap

Можете убрать строки для клавиш, которые вы не собираетесь менять. Прописав/узменив нужные значения клавишам , применим изменения:

$ xmodmap ~/.Xmodmap

Активация изменённой таблицы при загрузке

Если вы используете GDM, XDM или KDM, вам нет необходимости указывать ~/.Xmodmap. А если вы пользуетесь startx, внесите следующее содержимое в файл ~/.xinitrc:

~/.xinitrc
if [ -s ~/.Xmodmap ]; then
    xmodmap ~/.Xmodmap
fi

Другим вариантом является редактирование глобального скрипта автозапуска /etc/X11/xinit/xinitrc.

Попробовать изменения

Чтобы сделать временные изменения:

$ xmodmap -e "keycode  46 = l L l L lstroke Lstroke lstroke"
$ xmodmap -e "keysym a = e E"

Клавиши-модификаторы

xmodmap также умеет переопределять клавиши-модификаторы, например, можно "поменять местами" клавиши Control и Super.

Перед тек как назначать клавишу-модификатор, её надо очистить. ! является комментированием, так что в следующем примере будут очищены только клавиши 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 покажет список модификаторов и клавиш, назначенных на них.

Прокрутка в другую сторону

Иногда такую прокрутку называют естественной. Она похожа на поведение прокрутки на смартфонах. Добиться такого поведения можно с помощью xmodmap. Так как драйвер synaptics использует кнопки 4/5/6/7 для прокрутки вверх/вниз/влево/вправо, вы просто можете поменять порядок объявления кнопок в файле ~/.Xmodmap:

~/.Xmodmap
pointer = 1 2 3 5 4 7 6 8 9 10 11 12

Теперь примените изменения:

$ 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

Вместо CapsLock Control, а вместо LeftControl Hyper

Некоторые пользователи ноутбуков предпочитают, чтобы CapsLock работал как Control. А клавиша Left Hyper может быть использоваться в качестве клавиши-модификатора.

~/.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

Смотрите также