12/29/2008

brainfuck: X.org и HAL

После обновления X.org сервера до версии 1.5.3, и его перезапуска обнаружилось, что клавиатура и мышка напрочь отказываются работать. Причем зависания были такими, что систему привести в чувства можно было лишь при помощи Magic Sysrq клавиш.

Все оказалось очень просто, разработчики X.org'a решили отдать всю работу с устройствами ввода, на откуп подсистеме hal (Hardware Abstraction Layer).

Теперь для того, чтобы заработали иксы, нужно демону hal сказать, как управляться с устройствами. Для этого нужно создать файл /etc/hal/fdi/policy/10-x11-input.fdi
с вот таким вот содержанием:

<?;xml version="1.0" encoding="UTF-8"?>
<deviceinfo version="0.2">
<device>
<match key="info.capabilities" contains="input.mouse">
<merge key="input.x11_driver" type="string">evdev</merge>
</match>

<match key="info.capabilities" contains="input.keyboard">
<!--merge key="input.x11_driver" type="string">evdev</merge> -->
<merge key="input.xkb.model" type="string">evdev</merge>
<merge key="input.xkb.rules" type="string">xorg</merge>
<merge key="input.xkb.layout" type="string">us,ru</merge>
<merge key="input.xkb.variant" type="string">,winkeys</merge>
<merge key="input.xkb.options" type="strlist">grp:toggle,grp_led:scroll</merge>
</match>
</device>
</deviceinfo>



Все эелементы этого XML файда соттветствуют секциям InputDevice для мышки и клавиатуры из конфигурационного файла X.org. Следовательно, эти секции из конфиг файла иксов можно удалить.

По умолчанию иксы все равно пытаются получать информацию об устройствах ввода из своего конфиг файла, и тогда начинается просто кошмар. У меня в системе курсор начинает метаться по экрану, и клавиатура перестает работать.Чтобы это вылечить, нужно указать иксам получать устройства от hal. Делается это с помощью добавления в конфиг файл X11 (/etc/X11/xorg.conf) дополнительной секции:

Section "ServerFlags"
Option "AutoAddDevices" "False"
EndSection

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

Вот костыль, который я применяю, для решения этой проблемы:
после рестарта иксов, установить правило для переключения раскладки через xkb:
setxkbmap -layout "us,ru(winkeys)" -option "grp:switch,grp:toggle,grp_led:scroll"
Ввиду того, что комп я перезагружаю очень и очень редко, то это мне это не очень сильно мешает.

И все таки, проблема так и остается не решенной. Если у кого-то получилось ее решить, отпишите пожалуйста.

P.S. Разработчикам, конечно видней, но вот зачем было переходить с использования удобного и понятного конфигурационного файла, на использования не очень внятного xml, мне совершенно непонятно. Ведь удобство пользователя должно цениться превыше всего,
а мучиться пол дня с этим HAL как то совсем не хочется.

3 комментария:

  1. в строчке, где описываются xkboptions, следует поменять type="strlist" на string

    ОтветитьУдалить
  2. Переключение раскладки лечится правкой файла /etc/default/console-setup

    Теперь кодировка и раскладка определены для всей системы в одном месте, и не надо по отдельности настраивать консоль и иксы.

    Пишем в файл:
    CHARMAP="UTF-8"
    CODESET="CyrSlav" (это для консоли)
    XKBMODEL="pc105"
    XKBLAYOUT="us,ru"
    XKBVARIANT=",winkeys"
    XKBOPTIONS="grp:toggle,grp_led:scroll"

    Довольно логично, и с XML возиться не надо. А вот то, что в старом Xorg.conf относится непосредственно к устройствам, действительно теперь идет в /etc/hal/fdi/policy/ лучше отдельным .fdi файлом. В моем случае мне нужна была опция SHM для тачпада, сделал файлик отдельный, все ок.

    ОтветитьУдалить