Вы здесь

[Solved] Бешенная клавиатура при переходе на xorg-server-1.5.0

Трабла следующая:
Обновился в воскресенье - перещел на ксорг-сервер-1.5.0, после перегрузки иксов появляется окно kdm (все как раньше - имя пользователя стоит, поле пасворда пустое), пока клаву не трогаешь - ничего не происходит, стоит нажать любую клавишу на клаве - начинается вакханалия (такое чувство, что западают клавиши, причем все) - в полях ввода логина и пароля начинают набиваться случайные символы, включается/выключается капс...
соответственно ввести что-то осмысленное не получается. Помогает только вход в консоль (Ctrl+N Alt+Ctrl+F1), в консоли все нормально...
В логе иксов ошибки следующие: не может загрузить модули record, xtrap, type1
Пока откатился на 1.4.2, в багзилле искал, пока нет такой ошибки...
Есть предложенияпо исправлению ситуации?

Собрать без поддержки hal

Читаем руководство
x11-base-/xorg-server-1.5.0 USE="hal.... INPUT_DEVICE="evdev...
И добавляем в директорию /etc/hal/fdi/policy/ (не в /usr/share/hal/fdi/policy/20thirdparty/ как в wiki написано) файл скажем такого названия 10russian-layout.fdi и примерно такого содержания:

<?xml version="1.0" encoding="ISO-8859-1"?><!-- -*- SGML -*- -->
?deviceinfo version="0.2">
  ?device>
    ?match key="input.product" contains="AT Translated Set 2 keyboard">
      ?merge key="input.xkb.layout" type="string">en_US,ru?/merge>
      ?merge key="input.xkb.variant" type="string">,winkeys?/merge>
      ?merge key="input.xkb.model" type="string">pc104?/merge>
      ?merge key="input.xkb.options" type="strlist">grp:alt_shift_toggle,altwin:left_meta_win,grp_led:scrool?/merge>
      ?merge key="input.x11_driver" type="string">evdev?/merge>
      ?merge key="input.xkb.rules" type="string">xorg?/merge>
    ?/match>
  ?/device>
?/deviceinfo>

Разбираться в тегах некогда, вместо "?" в коде в начале строк надо поставить "<" и в ?/merge "?" на "<" в конце строк
И собственно

/etc/init.d/hald restart
/etc/init.d/xdm restart

Когда используется драйвер evdev + kxkb + хочу переключать по капслоку то выходит лажа :( (не kxkb не предлагать)

заработало нормалёк после указания в качестве модели клавы evdev :o До этого долго раскуривал маны по xorg и kxkb. Работают ваще все кнопки, даже ноуто-специфично-горячие, переключалка раскладок KDE... ;)

/etc/X11/xorg.conf:

Section "InputDevice"
Driver "kbd"
...
Option "XkbModel", "evdev"
...
EndSection

Ядро и система собирались с поддержкой evdev.

Последним версиям xorg-server начиная с 1.4 для работы инструкции из xorg.conf не особо нужны (они их просто игнорируют), если с поддержкой hal всё настроить. Зато глюков нет и можно в любой момент заменить и клаву и мышь))

Однако переключалка из kde-4.1.1 глючит (клавиши перемещения курсора, правый Сtrl и т.д. перемешаны)...

Мда, на анстейбл ветке весело сидеть :)
Вечером попробую... отпишусь...

Где мало слов, там вес они имеют... (с) W. Sheakespeare

Это не "анстейбл", это "тестед".

Надо убедится что в /etc/hal/fdi/policy/ нет fdi-файлов описывающих "input.keys" (grep -r xkb /etc/hal/fdi/*)
и создать нечто вроде:
/etc/hal/fdi/policy/10-x11-input.fdi:

<?xml version="1.0" encoding="utf-8"?>
<deviceinfo version="0.2">
   <match key="info.capabilities" contains="input.keys">
      <merge key="input.xkb.rules" type="string">xorg</merge>
      <merge key="input.xkb.layout" type="string">us,ru(winkeys)</merge>
      <!-- Option "XkbModel" "pc104" -->
      <merge key="input.xkb.model" type="string">evdev</merge>
      <merge key="input.xkb.variant" type="string">winkeys</merge>
      <merge key="input.xkb.options" type="strlist">grp:caps_toggle</merge>
      <append key="input.xkb.options" type="strlist">grp:switch</append>
      <append key="input.xkb.options" type="strlist">grp_led:caps</append>
   </match>
</deviceinfo>

Я тоже думал обновиться в погоне за новым релизом до 1.5.0, но все-таки решил дождаться, когда он выйдет в стабильной ветви. Пускай подлатают под генту...

и правильно, потому что багов там немеряно :(

Цитата:
Надо убедится что в /etc/hal/fdi/policy/ нет fdi-файлов описывающих "input.keys" (grep -r xkb /etc/hal/fdi/*)
и создать нечто вроде:
/etc/hal/fdi/policy/10-x11-input.fdi:

И это тоже не помогает. Похоже какие-то проблемы или с setxkbmap (то что вызывает кдешная переключалка), или она сама как-то глючит.

Я не в курсе конечно, а в KDE-4 может можно без переключалки обойтись. Там старым добрым kkbswitch и настроенным hal.

Nosk написал:
Я не в курсе конечно, а в KDE-4 может можно без переключалки обойтись. Там старым добрым kkbswitch и настроенным hal.

Приведённый мною, выше, конфиг работает с KDE4 и 3, переключает по CapsLock. В KDE, соответственно, надо полностью все повыключать в настройках раскладки клавиатуры.
В качестве индикатора - использую xxkb.

Удивительно, что все пишут тег match на "input.keys" (а это не только привычные клавиатуры). Чем, интересно, отличается кнопка включения компьютера на русской и английской раскладках: у нас "выключатель", а у них -- "включатель"?

asp amd64 написал:
Удивительно, что все пишут тег match на "input.keys"

а что туда ещё писать чтобы гарантировано отловить все клавиатуры?

Судя по форумам на gentoo.org сменился синтаксис файла для определения клавиатуры теперь он выглядит так:

<?xml version="1.0" encoding="utf-8"?>
<deviceinfo version="0.2">
   <match key="info.capabilities" contains="input.keyboard">                         
      <match key="info.product" string='A4Tech RF USB Receiver'>
<!--    <merge key="input.x11_driver" type="string">kbd</merge> -->                   <!-- в таком виде не работает -->
        <merge key="input.x11_options.XkbRules" type="string">xorg</merge>
        <!-- Option "XkbModel" "a4_rfkb23" -->
        <merge key="input.x11_options.XkbModel" type="string">evdev</merge>           <!-- ну или модель клавы -->
        <merge key="input.x11_options.AutoRepeat" type="string">500 30</merge>
        <merge key="input.x11_options.XkbLayout" type="string">us,ru</merge>
        <merge key="input.x11_options.XkbVariant" type="string"></merge>
        <merge key="input.x11_options.XkbOptions" type="strlist">grp:lwin_toggle</merge>
        <append key="input.x11_options.XkbOptions" type="strlist">grp_led:scroll</append>
      </match>
    </match>
</deviceinfo>

те кто используют только evdev для определения клавы и мыши могут убрать их разделы из xorg.conf и добавить туда

Section "ServerFlags"
   Option "AllowEmptyInput" "True" 
EndSection

но если используются дрйвера mouse или kbd то лучше этого не делать т.к. HAL не корректно обрабатывает их (т.е ничего не работает, по крайней мере у меня так не запустилось)
вот пример конфига мыши

<?xml version='1.0' encoding='UTF-8'?>
<!-- vim: set sw=2 sts=2 et: -->
<deviceinfo version='0.2'>
  <device>
    <match key='info.capabilities' contains='input.mouse'>
      <match key='info.product' string='A4Tech RF USB Receiver'>
<!--    <merge key='input.x11_driver'                   type='string'>mouse</merge> -->        <!-- в таком виде не работает -->
        <merge key='input.x11_options.Resolution'       type='string'>1600</merge>
        <merge key='input.x11_options.Buttons'          type='string'>8</merge>
        <merge key='input.x11_options.Protocol'         type='string'>auto</merge>
        <merge key='input.x11_options.ZAxisMapping'     type='string'>4 5</merge>
        <merge key='input.x11_options.ButtonMapping'    type='string'>1 2 3 6 7 4 5 8</merge>
        <merge key='input.x11_options.Sensitivity'      type='string'>0.5</merge>
      </match>
    </match>
  </device>
</deviceinfo>

Я использую пока драйвера kbd и mouse но только по причине, что не забрался пока как отключить evdev выборочно. т.к. у меня есть тюнер, пульт которого перебивают иксы (т.е. lirc при включенном флаге evdev у xorg-server не работает как нужно - управление над пультом захватывают иксы :( ).
Отсюда вопрос если кто знает как выборочно отключить evdev у иксов, просьба отписаться об этом.

интересно, а ничего, что в одном случае кавычки одинарные, а в другом двойные?

P.S. вобщем, это роли не играет, как только включается кдешная переключалка клавиши "перемешиваются" kde-4.1.1

оба варианта одинаково рабочие.

<merge key='input.x11_driver' type='string'>mouse</merge> делать можно, но нужно тогда уже явно указать девайс, потому что по умолчанию идет /dev/input/eventX, который, естественно, не обрабатывается корректно драйвером mouse.
Поэтому нужно прописать input.x11_options.Device <merge key="input.x11_options.Device" type="string">/dev/input/mice</merge>

P.S. лень разбираться с синтаксисом этих сообщений, надеюсь, расшифруешь :)

Цитата:
lirc при включенном флаге evdev у xorg-server не работает как нужно - управление над пультом захватывают иксы :( ).

такая же трабла.
Отказаться от evdev не могу клава ms 4000 нормально работает только с ним.
Говорят что надо попробовать запускать irexec не автоматом а с входом в кде/гном.
Попробую вечерком и отпишусь

Пульт это тоже клавиатура, поэтому, для того чтобы evdev не перехватывал события от пульта, надо создать более подробное правило HAL. Подробно не распишу, так как сделал давно и уже кое-что подзабыл и не помню какое правило (до, или после) имеет больший приоритет...
Утилита "hal-device" и рабочие policy из /usr/share/hal/fdi/ помогут.

У меня это выгляди так:
$ hal-device | grep "input.product"
input.product = 'bttv IR (card=72)' (string)
... скип пять сток...
input.product = 'Power Button (FF)' (string)

И своё определение polycy перекрывающее key=info.capabilities contains="input"(или input.keys):

    <match key="input.product" contains="bttv IR (card=72)">
      <merge key="info.ignore" type="bool">true</merge>
      <merge key="myTest" type="string">null</merge>
      <merge key="input.x11_driver" type="string">null</merge>
      <merge key="input.xkb.layout" type="string"></merge>
      <merge key="input.xkb.variant" type="string"></merge>
      <merge key="input.xkb.options" type="strlist"></merge>
    </match>

То что я искал, работает. спасибо!

Отдельно
true
или

не помогало..