Здесь описываются возможные типы клавиш. Тип клавиши определяет как должно меняться значение, выдаваемое клавишей в зависимости от модификаторов (‹Control›, ‹Shift› и т. п.). Так, например, ‘буквенные’ клавиши относятся к типу ALPHABETIC, что означает, что они имеют разное значение в зависимости от состояния ‹Shift› и ‹Caps Lock›. А клавиша ‹Enter› имеет тип ONE_LEVEL, что означает, что ее значение всегда одно и то же, независимо от состояния модификаторов.
• compat (сокращение от compability)
Здесь описывается ‘поведение’ модификаторов. В модуле XKB имеется несколько внутренних переменных, которые, в конечном счете, и определяют, какой символ будет генерироваться при нажатии клавиши в конкретной ситуации. Так вот, в файлах из каталога compat как раз описывается, как должны меняться эти переменные при нажатии различных клавиш-модификаторов. В этом же разделе обычно описывается и поведение ‘лампочек-индикаторов’ на клавиатуре.
• symbols
Это каталог содержит таблицы, в которых для каждого скан-кода (задаваемого именем скан-кода, определенным в keycodes) перечисляются все значения (symbols), которые должна выдавать клавиша. Естественно, количество различных значений зависит от типа клавиши (которые описываются в types), а какое именно значение будет выдано в конкретной ситуации, определяется состоянием модификаторов и их ‘поведением’ (которое описывается в compat).
• geometry
Здесь описываются варианты ‘геометрии’ клавиатуры, т. е. расположение клавиш на клавиатуре. Эти описания нужны не столько самому X-серверу, сколько прикладным программам, которые рисуют изображение клавиатуры.
Надо сказать, что в каждом из этих каталогов имеется несколько файлов (иногда, довольно много) с разными настройками. Более того, каждый файл внутри себя может содержать несколько блоков (секций, разделов) вида
тип_компонента 'имя_блока' {…...};
Поэтому, для того, чтобы выбрать конкретную настройку, ее обычно указывают в виде имя_файла (имя_блока), например, us(pc104). В то же время, обычно один из блоков в файле (не обязательно самый первый) помечается флагом default. Это означает, что если указать только имя файла, то будет выбран именно этот блок.
Полная конфигурация XKB задается в секции ImputDevice, определяющей клавиатуру, файла конфигурирования пакета XFree86, т. е. в файле /etc/X11/XF86Config-4. При этом имеется три способа задания конфигурации клавиатуры в этом файле.
Первый способ задания конфигурации заключается в том, что вы можете указать непосредственно каждый из компонентов, например
Option 'XkbKeycodes' 'xfree86'
Option 'XkbTypes' 'default'
Option 'XkbCompat' 'default'
Option 'XkbSymbols' 'us(pc104)'
Option 'XkbGeometry' 'pc(pc104)'
Как легко догадаться, это означает, что:
• описание keycodes берется из файла ‘xfree86’ в подкаталоге keycodes, причем из файла будет выбран тот блок, который помечен в нем флагом default;
• описание types берется из файла ‘default’ в подкаталоге types;
• описание compat берется из файла ‘default’ в подкаталоге compat;
• описание symbols берется из файла ‘us’ в подкаталоге symbols, причем будет выбран блок ‘pc104’;
• описание geometry берется из файла ‘pc’ в подкаталоге geometry, блок ‘pc104’;
Надо заметить, что в любом блоке (в любых компонентах) может встретиться инструкция include ‘имя_файла(имя_блока)’ (естественно, имя_блока может отсутствовать) что означает, что в текущий блок должно быть вставлено другое описание из указанного файла (указанного блока). Поэтому полное описание может неявно включать в себя данные из многих других файлов, кроме тех, которые вы явно укажете в файле конфигурации X-сервера.