International conference of developers
and users of free / open source software

Практическая индивидуальная настройка клавиатуры в GNU/Linux

Александра Игоревна Кононова, Алексей Владиславович Городилов, Олег Олегович Кондрашов Москва, г. Зеленоград, РФ

LVEE Winter 2016

xkb (X Keyboard Extension) possibilities are not limited to keyboard layout selection and switching from predefined list. With xkb it is possible to create custom layouts with necessary symbols and modifiers, assign up to 8 symbols to a single key. It is also possible to set up non-cyclic layouts switching, re-assign keys of auxiliary keyboards (e. g. gaming mouse keyboard), change layouts on-the-fly, combine symbol entry and layout switch in one key, etc.

В настоящее время наиболее распространённой оконной системой для построения графического интерфейса пользователя в UNIX-подобных ОС является X Window System. Для работы с клавиатурой предназначена одна из подсистем X Window System — xkb.
Чаще всего пользователь X Window System встречается с xkb при настройке поддержки русского ввода. Но её возможности не ограничиваются выбором раскладки и переключателя раскладки из предопределённого разработчиком дистрибутива списка вариантов. Подробное описание настройки xkb доступно на сайте Ивана Паскаля 1. Рассмотрим практическое применение некоторых возможностей этой подсистемы.

Ввод символов

Часто возникает необходимость вставить в текст символ, отсутствующий в используемых раскладках, в частности, тире и кавычки, соответствующие правилам русской типографики. Подсистема xkb предлагает четыре основных способа набора таких символов.

  1. Указание кода символа в Unicode (в частности, в соответствии с ISO 14755).
    Позволяет ввести любой существующий символ, но для этого требуется помнить этот код, что не очень удобно. Кроме того, способ задания кода может различаться для разных приложений.
  2. Compose-последовательности.
    Чтобы ввести символ, нажимается специальная клавиша Compose и вводится цепочка символов.
  3. Использование существующей раскладки с типографскими символами.
    Типографское расширение раскладки в xkb включает так называемый третий уровень, что позволяет набрать дополнительные символы, нажав одновременно с клавишей модификатор третьего уровня.
  4. Модификация используемой раскладки.
    Можно изменить существующую раскладку или создать новую, содержащую необходимые для пользователя символы.

Раскладки и настройки

Раскладки в xkb — файлы настроек специального вида, которые описывают символы, генерируемые клавишами. Каждый вариант раскладки — отдельный блок. Внутри блока описаны связанные с клавишей данные 1. Для большинства клавиш это символы, которые выдаются по нажатию клавиши на различных уровнях (shift levels).
Каждому уровню может соответствовать символ, задаваемый кодом Unicode (например, U2190) или специальной константой (например, leftarrow). Файлы раскладки поддерживают комментарии в стиле C++.
Кроме печатаемых символов (цифр, букв, иных символов Unicode), специальных констант VoidSymbol и NoSymbol, а также невизуальных символов, таких как F1-F10, Multi_key (Compose), XF86Back, XF86Forward, SunFront, SunProps и т. д., клавишам могут соответствовать символы и модификаторы, влияющие на состояние клавиатуры. В частности, это символы, изменяющие текущую раскладку (группу символов).
Чтобы набрать символ второго или более высокого уровня, при нажатии на клавишу, соответствующую этому символу, зажать ещё одну или несколько клавиш — модификаторов соответствующего уровня. Модификатором второго уровня является Shift. Различные модификаторы третьего уровня (а также, в блоке modifier_mapping, добавление виртуального модификатора в группу Mod5) описаны в /usr/share/X11/xkb/symbols/level3. Аналогичным образом можно назначить модификатором третьего уровня любую другую клавишу. Символ четвёртого уровня можно получить, зажав модификатор третьего уровня и Shift вместе.
Различные модификаторы пятого уровня (и добавление модификатора в группу Mod3, что необходимо для правильной работы) описаны в файле /usr/share/X11/xkb/symbols/level5. Cпособом, аналогичным описанному в этом файле, можно назначить и любую другую клавишу.
Иногда требуется набрать на некоторой раскладке только один символ (чаще всего это символ латиницы в кириллическом тексте). Готового символа для временного включения конкретной раскладки найти пока не удалось, но эту проблему можно решить с помощью действий (actions). Номер текущей раскладки (группы) определяется суммой трёх переменных — base group, latched group и locked group. Их можно изменить соответствующими действиями 1:
replace key {
actions[Group1]=[ ],
actions[Group2]=[ SetGroup(group=-1) ],
actions[Group3]=[ SetGroup(group=-2) ],
actions[Group4]=[ SetGroup(group=-3) ]
};
Если включена первая раскладка, при нажатии правого Alt не делается ничего, если вторая — переменная base group уменьшается на единицу на время нажатия и т. д. Постоянное включение первой раскладки также возможно с помощью действий, для этого необходимо изменить переменную locked group.
Некоторые из описанных дополнений к обычной раскладке работают не только в X Window System, но и в «чистой» консоли.

Файлы и утилиты

Основной файл настройки клавиатуры — /etc/default/keyboard, задающий набор раскладок и модификаторов для всех пользователей компьютера и всех клавиатур, причём не только для xkb, но, по умолчанию, и для консоли.
Список файлов используемых раскладок (файлы должны содержаться в каталоге /usr/share/X11/xkb/symbols/) указывается в переменной XKBLAYOUT, список блоков — переменной XKBVARIANT. Дополнительные модификаторы и настройки, такие, как поведение светодиодов на клавиатуре, перечисляются в переменной XKBOPTIONS.
Изменить раскладку для текущего сеанса позволяет утилита setxkbmap. Дополнительные настройки могут быть заданы через ключ -option, сам список аналогичен XKBOPTIONS.
Утилита setxkbmap позволяет задать различные раскладки для различных устройств, указав ключ -device 2. Это может быть полезно, в частности, при настройке игровой мыши, имеющей на боку цифровую клавиатуру. Список всех устройств ввода, в частности, клавиатур, можно получить командой xinput с ключом list. Так как идентификаторы устройств могут меняться от сеанса к сеансу, лучше проверять этот список каждый раз при назначении раскладки.
В том случае, если желаемой конфигурации не получается добиться, комбинируя стандартные файлы, можно изменить одну из стандартных раскладок или создать в каталоге /usr/share/X11/xkb/symbols/ новую по образцу имеющихся. Создание собственного файла раскладки обычно предпочтительнее, так как стандартные файлы могут быть перезаписаны при обновлении.
Файл раскладки должен содержать по крайней мере один блок, описывающий поведение алфавитно-цифровых клавиш. Кроме того, можно переопределить поведение таких клавиш, как пробел и «стрелки» при нажатых модификаторах третьего и пятого уровней.
Используемые модификаторы (включатели раскладки, модификаторы третьего и пятого уровня и т. д.) также могут быть описаны непосредственно в файле раскладки.
Таким образом, возможности xkb позволяют, не используя стороннее ПО, легко набирать любые необходимые символы, а также задавать индивидуальные раскладки для различных устройств.

1 Иван Паскаль. X Keyboard Extension http://pascal.tsu.ru/other/xkb/

2 XKB remapping http://www.pixelbeat.org/docs/xkb_remap/

Abstract licensed under Creative Commons Attribution-ShareAlike 3.0 license

Back