xmodmap (Русский)

From ArchWiki
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

Состояние перевода: На этой странице представлен перевод статьи xmodmap. Дата последней синхронизации: 11 сентября 2014. Вы можете помочь синхронизировать перевод, если в английской версии произошли изменения.

Tango-preferences-desktop-locale-modified.pngПеревод этой статьи или раздела не отражает оригинальное содержание.Tango-preferences-desktop-locale-modified.png

Причина: Last updated in 2014 (334732), out of sync with English page (Discuss)

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, вам нет необходимости указывать ~/.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

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