xmodmap советы, трюки (перевод)

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

Оригинал статьи тут

О xmodmap

Xmodmap используется для контроля соответствия между нажатыми клавишами и результатами которые вы получите после этого.
Некоторые примеры того, для чего можно использовать xmodmap:

  • Отключение и/или смена расположения клавиши caps-lock
  • Задание соответствий иноязычным и другим спецсимволам на клавиатуре
  • Включение “media” клавишь

Терминология

Для того чтобы получить результату описанные выше требуется преобразовывать KeyCodes в KeySyms и KeySyms в Модификаторы так что очень важно понять что xmodmap понимает под этой терминологией.

KeyCode

KeyCode это номер генерируемый вашей клавиатурой при нажатии на определенную клавишу. Например, кнопка пробела сгенерирует KeyCode = 128.

KeySym

KeySym это просто слово используемое для обозначения типа клавиши. Эта концепция очень важна, потому как позволяет программам не оперировать с кодами напрямую, а работать с клавиатурой по названиям клавишь.

Как отмечалось выше — большинство клавиатур генерирует код 128 когда вы нажимаете пробел, но но это может быть и не так на нестандартных клавиатурах, например может сгенерироваться KeyCode 64 при нажатии на пробел.
Вы конечно же пожелаете не заморачиваться с интерпретацией кода 64 как кода нажатия на пробел, дабы не переписывать своё приложение. Это легко сделать обозначив KeyCode 64 как KeySym “space”.

Модификатор

Модификатор, это специальная клавиша нажимаемая одновременно с другой клавишей и модифицирующая подаваемый клавиатурой код. Например, когда вы нажимаете кнопку A на клавиатуре, вы получаете кнопку  ‘a’ на экране. если же вы зажмете shift и нажмете A, вы увидите на экране символ ‘A’ – так как shift это Модификатор.

Начнем с обзора модификаторов и привязок KeySyms…

Модификаторы

Существует 8 модификаторов:

  • Shift
  • Lock
  • Control
  • Mod1
  • Mod2
  • Mod3
  • Mod4
  • Mod5

Xmodmap предаставляет несколько путей для изменений привязок KeySym для Модификаторов: clear, add, and remove.

Мой любимый пример — выключение caps lock:

$ xmodmap -e "clear Lock"

Эта команда отключает модификатор Lock так что ни одна клавиша теперь не сможет дать эффект caps lock. Класс!

Тепреь поменяем  клавишу caps lock на что-нибудь более полезное:
$ xmodmap -e "add Shift = Caps_Lock"

Так мы добавили KeySym “Caps_Lock” в список клавиш реализующих модификатор Shift. Другими словами, мы превратили caps lock клавишу в еще один shift.

Если вы передумали, вы можете вернуть всё как было:
$ xmodmap -e "remove Shift = Caps_Lock"

Этот пример противоположен предыдущему.

Назначение KeyCode’ов для KeySym

Итак, мы изучили как менять привязку модификаторов, теперь узнаем как нам заставить выполнять клавиши при нажатии то что мы хотим. Сначало вам нужно узнать keycode клавиши которую вы хотите изменить. Это можно сделать используя xev.

$ xev

После запуска xev, нажмите на клавишу и посмотрите на вывод полученный в терминале:

Нас интересует третья линия. Вы видите слово keycode а далее число? В примере это 63.

Теперь мы можем назначит на клавишу символ который захотим.

$ xmodmap -e "keycode 63 = e E eacute Eacute"

Команда “keycode” привязывает KeyCode с определенным числом к KeySym’у. Порядок KeySym’ов важен и показывает в какой последовательности будут поступать KeySym.

  1. Одна клавиша нажата
  2. Клавиша нажата с модификатором Shift
  3. Клавиша нажата одна но с клавишей Mode_switch
  4. Клавиша нажата с Mode_switch И Shift

Mode_switchэто просто другой keysym и вы можете выбрать какая клавиша на клавиатуре будет отвечать за него:
$ xmodmap -e "keycode 64 = Mode_switch"

Лично я привязываю Mode_switch на свою клавишу AltGr. Сделать это вы можете используя специльную версию команды.
$ xmodmap -e "keycode Alt_R = Mode_switch"
Так мы просим xmodmap просмотреть какой/какие keycode(s) сейчас используются для KeySym Alt_R (правый ALT) и затем привязываем к ней Mode_switch.

Рассмотрим что же мы получили из примера выше, когда меняли привязку для keycode 64:

  • Нажата эта самая клавиша   –       нижний регистр ‘e’
  • С shift    —       верхний регистр ‘E’
  • С AltGr    — нижний регистр e-acute (используется например во французском языке)
  • С AltGr и shift – верхний регистр E-acute

Сохранение ваших привязок

Допустим, вы настроили всё что хотели. Как же сделать так, чтобы xmodmap применял ваши изменения каждый раз при запуске X. Чтобы сохранить всё это, просто сохраните все ваши привязки в файле (я сохраняю в ~/.xmodmap) и затем скажите xmodmap загружать их оттуда
$ xmodmap ~/.xmodmap
В идеале вы можете добавить это в ваш .xinitrc  чтобы команда приведенная выше выполнялась при запуске X.

Конец

Это лишь небольшое howto. Я надеюсь что оно поможет кому-нибудь чуть лучше понять работу xmodmap и избежать моих ошибок. Сейчас же, у меня есть клавиатура настроенная так как я хочу.

Полезные ссылки

Несколько ссылок о xmodmap.

http://www.xfree86.org/4.2.0/xmodmap.1.html
xmodmap man page

http://www.in-ulm.de/~mascheck/X11/xmodmap.html
Несколько подсказок

http://www.in-ulm.de/~mascheck/X11/Xmodmap.mapping
Очень подробный пример файла для привязок xmodmap

Автор: Mirivlad

Скромный труженик консоли и окошек.