"Третий способ"
Если у вас используется третий способ - через задание "правил", "модели", "схемы".
В этом случае все немного сложнее, поскольку непосредственно xkbcomp не понимает этот способ.
Однако, в этом случае можно "вручную" выполнить преобразование правил/модели/схемы в компоненты настройки (keycodes,symbols и т.п.).
Например, у вас в файле конфигурации написано
XkbRules "xfree86" XkbModel "pc104" XkbLayout "ru" XkbOptions "grp:shift_toggle"
Сначала надо найти файл "правил" (rules). Это будет файл {XKBROOT}/rules/xfree86.
В первой секции, которая после "шаблона"
! model = keycodes geometry
по вашей модели - "pc104" находим название файлов (блоков) для xkb_keycodes
и xkb_geometry. Скорее всего это будет
xkb_keycodes - "xfree86" xkb_geometry - "pc(104)"
Теперь, во второй секции, после "шаблона"
! model layout = symbols
найдем по "модели" - "pc104" и "схеме" - "ru" подходящий файл для xkb_symbols.
Скорее всего, схема "ru" там не упомянута. Но зато есть правило
pc104 * = en_US(pc104)+%l%(v)
где %l надо "заместить" названием "схемы" (layout), а %(v) - названием "варианта".
Поскольку "вариант" у вас не задан, то это правило "развернется" в
xkb_symbols - "en_US(pc104)+ru"
Следующая секция, после "шаблона"
! model layout = compat types
вообще очень простая
* * = complete complete
То есть, независимо от конкретных значений model и layout, и xkb_compat, и xkb_types надо брать из файлов "complete".
Таким образом, для нашего файла полной конфигурации значения
xkb_types - "complete" xkb_compat - "complete"
И, наконец, последняя секция, после "шаблона"
! option = symbols
указывает, что для нашей "опции" - grp:shift_toggle, к уже выбранному файлу для xkb_symbols надо "приплюсовать" еще и блок "group(shift_toggle)"
Теперь не забудьте добавить слова include, скобки в нужном месте и "обрамление" xkb_keymap { ... };
Должно получится
xkb_keymap { xkb_keycodes { include "xfree86" }; xkb_types { include "complete" }; xkb_compat { include "complete" }; xkb_symbols { include "us(pc104)+ru+group(shift_toggle)" }; xkb_geometry { include "pc(pc104)" }; };
Это и есть наша рабочая "полная конфигурация", к которой можно писать "добавки" - исправления/дополнения.
Наконец, надо заметить, что делать все это (и полное описание и фалы-добавки) вы можете в отдельной директории, поскольку xkbcomp при "разборке" include
сначала ищет файла в текущей директории, а только потом в "стандартном" месте - {XROOT}/lib/X11/xkb. Естественно, подразумевается, что мы при экспериментах запускаем xkbcomp, находясь в этой директории.
А вот потом, если вы решите, что "это хорошо", можно будет разложить файлы с исправлениями в соответствующие поддиректории (keycodes, types, symbols
и т.д ) "домашней директории" XKB - {XROOT}/lib/X11/xkb. И подправить файл конфигурации X-сервера так, чтобы он при старте загрузил вашу конфигурацию.
Итак, если вы используете третий способ указания конфигурации XKB, то в файле конфигурации X-сервера, надо задать параметры XkbRules, XkbModel, XkbLayout и, если вам нужно что-то не совсем стандартное - XkbVariant и XkbOptions.
Например,
XkbRules "xfree86" XkbModel "pc104" XkbLayout "ru" XkbVariant "" XkbOptions "ctrl:ctrl_ac"
означает, что XKB должен
- в соответствии с правилами, описанными в файле {XKBROOT}/rules/xfree86, выбрать настройки для
- клавиатуры типа "pc104" (104 кнопки),
- русского алфавита (английский алфавит будет включен "по умолчанию"),
- вариант - "стандартный" (то есть, этот параметр можно было не писать)
- и, наконец, дополнительные опции для вашей "раскладки клавиатуры" - "ctrl:ctrl_aa".
Кстати, что означают различные опции, а также - какие "модели" и "схемы" определены в "правилах" (и что они означают) можно посмотреть в файле xfree86.lst (или другом файле *.lst, если вы выбрали "правила" не xfree86), который находится в той же директории, что и файл "правил", то есть - {XKBROOT}/rules.