Опция
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 – без этой опции режим не устанавливается).