Практическая индивидуальная настройка клавиатуры в GNU/Linux
LVEE Winter 2016
В настоящее время наиболее распространённой оконной системой для построения графического интерфейса пользователя в UNIX-подобных ОС является X Window System. Для работы с клавиатурой предназначена одна из подсистем X Window System — xkb.
Чаще всего пользователь X Window System встречается с xkb при настройке поддержки русского ввода. Но её возможности не ограничиваются выбором раскладки и переключателя раскладки из предопределённого разработчиком дистрибутива списка вариантов. Подробное описание настройки xkb доступно на сайте Ивана Паскаля 1. Рассмотрим практическое применение некоторых возможностей этой подсистемы.
Ввод символов
Часто возникает необходимость вставить в текст символ, отсутствующий в используемых раскладках, в частности, тире и кавычки, соответствующие правилам русской типографики. Подсистема xkb предлагает четыре основных способа набора таких символов.
- Указание кода символа в Unicode (в частности, в соответствии с ISO 14755).
Позволяет ввести любой существующий символ, но для этого требуется помнить этот код, что не очень удобно. Кроме того, способ задания кода может различаться для разных приложений. - Compose-последовательности.
Чтобы ввести символ, нажимается специальная клавиша Compose и вводится цепочка символов. - Использование существующей раскладки с типографскими символами.
Типографское расширение раскладки в xkb включает так называемый третий уровень, что позволяет набрать дополнительные символы, нажав одновременно с клавишей модификатор третьего уровня. - Модификация используемой раскладки.
Можно изменить существующую раскладку или создать новую, содержащую необходимые для пользователя символы.
Раскладки и настройки
Раскладки в xkb — файлы настроек специального вида, которые описывают символы, генерируемые клавишами. Каждый вариант раскладки — отдельный блок. Внутри блока описаны связанные с клавишей данные 1. Для большинства клавиш это символы, которые выдаются по нажатию клавиши на различных уровнях (shift levels).
Каждому уровню может соответствовать символ, задаваемый кодом Unicode (например, U2190) или специальной константой (например, leftarrow). Файлы раскладки поддерживают комментарии в стиле C++.
Кроме печатаемых символов (цифр, букв, иных символов Unicode), специальных констант VoidSymbol и NoSymbol, а также невизуальных символов, таких как F1-F10, Multi_key (Compose), XF86Back, XF86Forward, SunFront, SunProps и т. д., клавишам могут соответствовать символы и модификаторы, влияющие на состояние клавиатуры. В частности, это символы, изменяющие текущую раскладку (группу символов).
Чтобы набрать символ второго или более высокого уровня, при нажатии на клавишу, соответствующую этому символу, зажать ещё одну или несколько клавиш — модификаторов соответствующего уровня. Модификатором второго уровня является Shift. Различные модификаторы третьего уровня (а также, в блоке modifier_mapping, добавление виртуального модификатора
Различные модификаторы пятого уровня (и добавление модификатора
Иногда требуется набрать на некоторой раскладке только один символ (чаще всего это символ латиницы в кириллическом тексте). Готового символа для временного включения конкретной раскладки найти пока не удалось, но эту проблему можно решить с помощью действий (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