Настройка дополнительных клавиш на клавиатуре BTC 9000A
- Если используется ядро 2.6.x, необходимо добавить в параметры загрузки ядра опцию atkbd.softraw=0. При использовании ядер 2.4.x этого не требуется – можно сразу переходить к пункту 2.
Опция
atkbd.softraw=0 необходима из-за особенностей обработки ввода с клавиатуры в ядрах 2.6.x. В этих версиях работа со всеми типами клавиатур (в том числе и с интерфейсом PS/2) идёт через подсистему ввода (input subsystem), причём по умолчанию обработка ввода идёт следующим образом:
- Модуль atkbd преобразует скан-коды, поступающие от клавиатуры, в коды клавиш, используемые в Linux input subsystem (см. константы KEY_* в файле /usr/include/linux/input.h).
- Модуль keyboard преобразует эти коды клавиш назад в скан-коды для совместимости со старыми программами, использующими режим ввода RAW (в частности, X именно таким образом получает события от клавиатуры).
Проблема в том, что в таблице модуля atkbd не для всех возможных скан-кодов есть соответствующие коды KEY_* (в частности, из-за того, что скан-коды для дополнительных клавиш не стандартизованы). Можно добавить записи в эту таблицу, используя утилиту setkeycodes, однако при этом возникают новые проблемы:
- Программа setkeycodes, входящая в пакет console-tools, устарела – она не поддерживает коды клавиш больше 127, а именно такие коды используются для мультимедиа-клавиш. Правильная версия setkeycodes есть только в пакете kbd, который, в свою очередь, доступен только в достаточно свежих срезах Сизифа.
- Таблица для обратного преобразования кодов клавиш в скан-коды, имеющаяся в модуле keyboard, фиксирована; если при использовании setkeycodes выбирать коды KEY_* для клавиш в соответствии с функциями этих клавиш, во многих случаях оказывается, что скан-код, полученный в результате обратного преобразования, не совпадает с тем, который на самом деле выдаёт клавиатура. Если выполнить настройку X, пользуясь такими скан-кодами, получившийся файл конфигурации будет непригоден для систем с ядром 2.4.x, где преобразование скан-кодов не производится.
При использовании опции atkbd.softraw=0 подобных проблем не возникает – запускать setkeycodes не нужно, а скан-коды, получаемые X через драйвер keyboard, соответствуют тем, которые реально посылает клавиатура.
Перезагружать систему для установки atkbd.softraw=0 не обязательно – нужный режим можно установить командой:
(нужно обязательно указывать опцию -n – без этой опции режим не устанавливается).
- Хотя описание дополнительных клавиш для клавиатуры BTC 9000A уже входит в стандартную конфигурацию XKB, коды клавиш там указаны неверно. Поэтому необходимо найти в файле /usr/X11R6/lib/X11/xkb/symbols/inet найти секцию xkb_symbols “btc9000a” и заменить её содержимое на следующее:
- В файле /etc/X11/xorg.conf нужно в опции XkbModel указать модель клавиатуры btc9000a. Например, соответствующая секция может выглядеть так:
После выполнения всех этих действий при нажатии дополнительных клавиш будут генерироваться события X с соответствующими кодами keysym, для которых уже можно назначать действия, например, средствами используемого оконного менеджера.