Еще один способ описания конфигурации XKB.

Кроме опций в общем файле конфигурации X-сервера (XF86Config) XKB может иметь свой отдельный файл конфигурации. Правда он в XFree86 не применяется и (увы) не описан. В то же время, с помощью этого файла можно

Собственный файл конфигурации XKB (назовем его так) должен находится в директории {XRoot}/lib/X11/xkb и называться X<цифра>-config.keyboard
где <цифра> - номер дисплея (обычно - X0-config.keyboard)

Формат этого файла.

Прежде всего надо заметить, что все инструкции в этом файле выглядят как операторы присваивания языка C.

параметр_XKB = выражение ;

Если оператор один в строке, то знак ';' в конце не обязателен. В любом месте строки могут находится комментарии, которые должны начинаться с '#' или '//'.

"Выражение" представляет собой

Если в выражении требуется указать несколько модификаторов (флагов) одновременно, они перечисляются через '+'.

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

Итак. В этом файле можно задать следующие параметры

Компоненты конфигурации.

rules = "..."
model = "..."
layout = "..."
variant = "..."
options = "..."

keymap = "..."

keycodes = "..."
geometry = "..."
types = "..."
compat = "..."
symbols = "..."  (или symbolstouse = "...")

Описывают те же параметры, что и в главном конфигурационном файле X сервера (XF86Config).

Напомню, что собственный файл конфигурации XKB может быть составлен для каждого дисплея по отдельности. Поэтому, если компоненты конфигурации уже описаны в XF86Config, то здесь имеет смысл указывать только те компоненты (или rules/model/layout/etc.), которые для данного дисплея отличаются от общих. Естественно, все эти параметры, указанные в "дополнительном файле конфигурации" имеют больший приоритет и переписывают соответствующие значения из файла конфигурации X сервера.

Начальное значения для набора модификаторов.

modifiers [ = | -= | += ] модификатор1 + модификатор2 + ...
"Модификатор" - название одного из "реальных" модификаторов - shift, lock, control (или ctrl), mod1, mod2, mod3, mod4, mod5.

Как я уже говорил, здесь вместо присваивания могут использоваться операции '-=' - убрать модификатор(ы), '+=' - добавить модификатор(ы), '=' - заменить набор модификаторов на указанные в этой инструкции.
(Надо заметить, что по умолчанию при старте X сервера этот набор модификаторов пустой. Поэтому, имеют смысл только операции '+=' и '='. Причем разницы между ними нет.)

Начальное значение для набора "управляющих флагов".

controls  [ = | -= | += ] флаг1 + флаг2 + ...
Как и в предыдущей инструкции, операция может быть убрать/добавить/заменить ('-='/'+='/'=').

"Флаги" могут быть

repeat (или repeatkeys)
разрешить автоповтор клавиш
(по умолчанию он и так разрешен, поэтому имеет смысл только его убрать
controls -= repeat);
mousekeys
включить эмуляцию мыши;
mousekeysaccel
включить режим "ускорения" для эмуляции движения курсора мыши
overlay1
overlay2
включить соответствующие "перекрытия".
ignoregrouplock
игнорировать "текущую группу" в режиме GrabKey
audiblebell
включить (выключить) звуковой сигнал.
(Напомню, что XKB может вместо звукового сигнала посылать bell-event'ы для проигрывания звуков или мелодий "звуковой приставкой". Если такая "приставка" у вас есть, то обычную "пищалку" можно и выключить.
accessxkeys
slowkeys
bouncekeys
stickykeys
accessxtimeout
accessxfeedback
включение различных режимов AccessX (для людей с "ограниченными физическими возможностями")

Список модификаторов, которые игнорируются в режиме GrabKey

ignorelockmods [ -= | += | = ] модификатор1 + модификатор2 + ...
(или ignorelockmodifiers ...)

Список "внутренних" модификаторов

internalmods [ -= | += | = ] модификатор1 + модификатор2 + ...
(или internalmodifiers ...)

Это модификаторы, которые используются только внутри X сервера (для выбора "действия" клавиши, если таковое есть) и не сообщаются в клавиатурных event'ах, посылаемых приложениям.

"Метод выравнивания" групп.

groups = [ wrap | clamp | число ]
(или outofrangegroups ...)

Задает "метод выравнивания групп". Напомню, что метод может быть wrap, clamp или redirect. В последнем случае нужен дополнительный параметр - куда "редирект", если номер группы выходит за границы диапазона.
Так вот, метод redirect задается в виде

groups = номер_группы

Параметры "пищалки".

bell = число  (или bellvolume = число )
bellpitch = число
bellduration = число
click = число (или clickvolume = число )

Все эти инструкции устанавливают параметры "пищалки" (bell) и "клика" клавиатуры (обычно это более короткий сигнал, чем bell).

Инструкции bell и click могут также иметь вид

bell = [ on | off ]
click = [ on | off ]
что (как нетрудно догадаться) просто означают включить/выключить эти сигналы. Если сигнал просто включен и не указано его "volume", то оно считается - 100.

Различные задержки (таймауты).

repeatdelay = число
задержка (в миллисекундах) между нажатием клавиши и началом автоповтора;
repeatinterval = число
интервал (в миллисекундах) между автоповторами;
slowkeysdelay = число
в режиме slowkeys клавиша считается нажатой, если она удерживается некоторый промежуток времени, чтобы избежать срабатывания при случайном "задевании" клавиши. Этот параметр и определяет указанную задержку.
debouncedelay = число
в режиме bouncekeys клавиша после нажатия/отпускания некоторое время не реагирует на повторные нажатия/отпускания, чтобы избежать ложных срабатываний при неаккуратном нажатии клавиши. Этот параметр и определяет указанную задержку.
accessxtimeout = число (или axtimeout = число)
промежуток времени (в секундах) после которого режим AccessX автоматически отключается. Имеет смысл только если установлен соответствующий флаг
(controls += ... accessxtimeout ...);

Параметры "ускорения" курсора мыши.

mousekeysdelay = число
задержка (в миллисекундах) до начала автоповтора клавиши эмулирующей движение "мышиного" курсора (то же самое, что и repeatdelay для обычных клавиш);
mousekeysinterval = число
интервал автоповтора (то же, что и repeatinterval);
mousekeysmaxspeed = число
максимальная скорость движения курсора в пикселах за один event (точнее - если в соответствующем "действии" эмуляции движения курсора - MovePtr уже задан параметр "смещение за один event" больше единицы, то максимальная скорость будет "смещение"*maxspeed);
mousekeystimetomax = число
через сколько повторов курсор достигает максимальной скорости
mousekeyscurve = число (в диапазоне -1000:1000)
"степень кривизны" кривой ускорения (в "режиме ускорения" скорость курсора нарастает от начального "смещения" до максимального не линейно, а пропорционально X^(1 + curve/1000).
Если mousekeyscurve = 0, то зависимость линейная)

Включение/выключение отдельных событий дополнительной звуковой индикации в AccessX

accessxtimeoutctrlson [ -= | += | = ] событие1 + событие2 + ...
(или axtctrlson ...)
accessxtimeoutctrlsoff [ -= | += | = ]  событие1 + событие2 + ...
(или axtctrlsoff ...)

где "событие" - slowkeyspress, slowkeysaccept, feature, slowwarn, indicator, stickykeys, slowkeysrelease, slowkeysreject, bouncekeysreject, dumbbell.

Подробнее об этих событиях можно прочитать в документации (XKBlib), поставляемой в "исходниках" XFree86.


Иван Паскаль [email protected]