Ввод с клавиатуры

В последних выпусках X (X11R61 и выше) имеются два "стандартных"  способа ввода с клавиатуры: Xkb или X KeyBoard (раздел “Настройка Xkb”) и старый способ, работающий через утилиту xmodmap (см. раздел “xmodmap”).

Настройка Xkb

Полную и исчерпывающую (даже слишком исчерпывающую) документацию по настройке Xkb можно найти у Ивана Паскаля.

Немного теории

При старте X-сервера, модуль XKB зачитывает все необходимые данные из текстовых файлов, которые образуют "базу данных"  настроек XKB.

Строго говоря, большинство из этих файлов сам модуль XKB не читает. Он вызывает программу xkbcomp, которая переводит содержимое этих файлов в двоичный формат, понятный непосредственно модулю XKB.

Но для настройки это не так уж важно, поскольку вызов xkbcomp происходит автоматически, незаметно для пользователя.

База данных, необходимых XKB, состоит из 5 компонентов:

  • keycodes Таблицы, которые просто задают символические имена для скан-кодов. Например:

    <TLDE>= 49; <AE01> = 10;
  • types Описывает типы клавиш. Тип клавиши определяет — как должно меняться значение, выдаваемое клавишей в зависимости от модификаторов (Control, Shift и т.п.). Так, например, "буквенные"  клавиши относятся к типу ALPHABETIC, что означает, что они имеют разное значение в зависимости от состояния Shift и CapsLock. А клавиша [Enter] имеет тип — ONE_LEVEL, что означает, что её значение всегда одно и то же, независимо от состояния модификаторов.

  • compat (сокращённое от compability) Описывает "поведение"  модификаторов. В XKB имеется несколько внутренних переменных, которые, в конечном счёте, и определяют — какой символ будет генерироваться при нажатии клавиши в конкретной ситуации. Так вот, в compat как раз описывается — как должны меняться эти переменные при нажатии различных клавиш-модификаторов. В этом же разделе обычно описывается и поведение "лампочек-индикаторов"  на клавиатуре.

  • symbols Таблицы, в которых для каждого скан-кода (имени скан-кода, определённого в keycodes) перечисляются все значения (symbols), которые должна выдавать клавиша. Естественно, количество различных значений зависит от типа клавиши (которые описываются в types), а какое именно значение будет выдано в конкретной ситуации, определяется состоянием модификаторов и их "поведением"  (которое описывается в compat).

  • geometry Описывает "геометрию"  клавиатуры — то есть расположение клавиш на клавиатуре. Эти описания нужны не столько самому X-серверу, сколько прикладным программам, которые рисуют изображение клавиатуры.

Все эти компоненты разложены по одноимённым директориям в директории {XROOT}/lib/X11/xkb (в дальнейшем, я буду обозначать её {XKBROOT}).

Весь набор компонентов, необходимых для настройки XKB, описывается в файле конфигурации X-сервера в секции Keyboard.

Настройка

Чтобы настроить XKB, в файле конфигурации X-сервера надо задать параметры XkbRules, XkbModel, XkbLayout и, если вам нужно что-то не совсем стандартное — XkbVariant и XkbOptions.

Например,

XkbRules "xfree86" XkbModel "pc104" XkbLayout "ru" XkbVariant "winkeys" XkbOptions "grp:shift_toggle,grp_led:scroll"

означает, что XKB должен в соответствии с правилами, описанными в файле {XKBROOT}/rules/xfree86, выбрать настройки для клавиатуры типа "pc104"  (104 кнопки), русского алфавита (английский алфавит будет включён "по умолчанию"). Если у вас "windows"  клавиатура (что верно в 99% случаев), то полезно указать XkbVariant как "winkeys", в противном случае оставьте эту опцию пустой — "". В самом конце идут дополнительные опции для вашей "раскладки клавиатуры"  — "grp:shift_toggle,grp_led:scroll", которые описывают метод — переключения: две клавиши "Shift"  , при этом загорается лампочка Scroll Lock на клавиатуре.

Несколько практических рекомендаций.

Небольшое отступление — "о клавише-переключателе рус/лат".

Другие варианты смены кодировки:

  1. grp:toggle — переключение правым Alt;

  2. grp:shift_toggle — двумя клавишами shift;

  3. grp:ctrl_shift_toggle — ctrl+shift;

  4. grp:ctrl_alt_toggle — ctrl+alt;

  5. grp:caps_toggle— переключение по CapsLock;

  6. grp:lwin_toggle— переключение по левой "Win" клавише на Windows клавиатуре (для X Window старше 4.2);

  7. grp:rwin_toggle— переключение по правой "Win" клавише на Windows клавиатуре (для X Window старше 4.2);

  8. grp:menu_toggle— переключение по клавише "Контекстное меню" на Windows клавиатуре (для X Window старше 4.2);

  9. ctrl:ctrl_ac — CapsLock;

  10. grp:switch— переключение по правому Alt только на момент нажатия[6];

Когда был написан первый вариант этих рекомендаций, сама раскладка "русской"  клавиатуры (symbols/ru) включала в себя и "переключатель групп"  рус/лат, "подвешенный"  на клавишу CapsLock. С одной стороны, это было удобно — в простейшем случае достаточно было выбрать "русскую раскладку", и вы автоматически получали и клавишу для переключения "на русский". Но, с другой стороны, это было неудобно для тех, кто предпочитает в качестве переключателя рус/лат другую клавишу (или комбинацию клавиш). Конечно, выбрать другой переключатель не составляло труда, но при этом оставался и переключатель на CapsLock, что многим не нравилось. Для того, чтобы убрать его, надо было "залезть" в соответствующий файл и вручную подправлять соответствующую раскладку.

В конце концов (начиная с версии 3.3.4) сами разработчики XFree убрали этот "переключатель"  из "русской раскладки". Но в связи с этим появились и некоторые проблемы — теперь клавишу-переключатель надо явно "заказывать"  при конфигурировании XKB.

Самый простой способ настройки — использовать программу для автоматической настройки X Window.

В XFree86 такая программа называется XF86Setup.

При этом "по умолчанию"  используются "правила"  (XkbRules) — xfree86. Вам нужно будет только выбрать "модель"  (XkbModel), "схему"  (XkbLayout) и "способ переключения групп"  (переключатель "РУС/ЛАТ").

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

Итак. Запустите программу XF86Setup, выберите раздел Keyboard. В этом разделе выберите из меню Model (тип клавиатуры) и Layout (язык). Не забудьте отметить в отдельных списках (в правой части) подходящий "переключатель групп"  и, если хотите — "расположение Ctrl".

При выходе из программы она запишет соответствующие строчки в файл конфигурации XFree в секции Keyboard.

Для смены кодировки можно воспользоваться любой из многочисленных программ переключения кодовых страниц через xkb — например, я пользуюсь программой xxkb Ивана Паскаля.

xmodmap

Описанное ниже относится к относительно старым версиям X Window (Заведомо к версиям, меньшим 3.3.3), в которых способ Xkb (раздел “Настройка Xkb”) не работает.

В случае русификации через xmodmap первое, что вы должны сделать, — это отключить Xkb!

Чтобы отключить поддержку Xkb, в файле XF86Config изучите раздел Keyboard и закомментируйте все строки, начинающиеся с Xkb (регистр не имеет значения). Взамен добавьте следующую строку:

XkbDisable

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

Я настоятельно советую вам самостоятельно не разбираться с xmodmap, по крайней мере для начала. Вы не получите ничего, кроме головной боли и разочарования. Вместо этого я рекомендую вам установить пакет xruskb, который позволяет вам сконфигурировать большинство входных параметров перекодировки без необходимости сталкиваться с xmodmap.



[6] В случае замены toggle на switch в комбинациях, описанных выше, переключение регистра возникает только на момент нажатия комбинации.