Перестали работать клавиатура и мышь в xorg-server-1.8 (настройка ввода через udev)
В связи с тем, что hal устарел и более не поддерживается, как только в xorg-server появился альтернативный модуль автонастройки устройств ввода udev
, USE-флаг "hal" таинственным образом из xorg-server испарился (хотя в коде старый модуль всё ещё есть). Соответственно, все те настройки, которые вы с таким трудом сделали через hal, больше не работают. Ниже следуют инструкции как настроить xorg-server на работу с udev
Внимание! Ниже представлены инструкции по более тонкой настройке системы, нежели нужно в большинстве случаев. Прежде чем следовать этому руководству, используйте официальное (англ.) руководство
Для начала проверьте, что у вас включен флаг udev
в xorg-server (он не глобальный). Если нет - добавьте и пересоберите xorg-server.
Некоторые основные отличия hal от udev:
- Иксы пытаются подцепить все устройства которые определяются
udev
как потенциальный ввод, включая веб-камеры, кнопки питания и прочее. Это может вызвать (и вызывает) проблемы. Системных фильтров для отсечения ненужного на момент написания не присутствует (и, видимо, это и есть основная причина того, что xorg-server-1.8 отсутствует в дереве portage до сих пор). Для нужд фильтрации следует использовать новую секциюxorg.conf
: InputClass. udev
поддерживает лишь минимальный набор параметров, которые можно передать в иксы, для более детальной настройки стоит использовать теже InputClass. Да, основная конфигурация опять вxorg.conf
и без него у вас иксы уже не запустятся (вернее запустятся, но без ввода).
Итак, для начала следует определить в xorg.conf
как минимум два InputClass'а, например, generic
и garbage
(секция InputClass подробно описана в man xorg.conf
):
Section "InputClass" Identifier "Generic Devices" Driver "evdev" MatchTag "generic" EndSection # А вот так настраиваются все прочие, специфичные устройства, для которых # возможностей настройки через udev не предусмотрено. Section "InputClass" Identifier "Synaptics Touchpad" Driver "synaptics" Option "VertTwoFingerScroll" "true" # ... # тут еще куча всяких Option, см. man synaptics # ... MatchTag "synaptics" EndSection Section "InputClass" Identifier "Garbage" MatchTag "garbage" Option "ignore" "true" EndSection
Теперь напишем новое правило для udev
, которое будет назначать устройствам нужные тэги: /etc/udev/rules.d/75-x11-input.rules
(лучше с названием не эксперементировать, поведение правил udev
очень сильно зависит от порядка их обработки)
# Если обрабатываемое устройство, не из категории ввода - пропускаем SUBSYSTEM!="input", GOTO="x11_input_end" # Если устройство удалено (не было добавлено или изменено), то тут уже нечего делать ACTION!="change|add", GOTO="x11_input_end" # По умолчанию, мы игнорируем все устройства, выбирая потом только нужные ENV{ID_INPUT.tags}="garbage" # Работать мы будем только с /dev/input/event* устройствами. Да, это рассчитано на то, # что Event Interface у вас в ядре включен. KERNEL!="event*", GOTO="x11_input_end" # По умолчанию используем драйвер evdev. Небольшая перестраховка, на самом деле. ENV{driver}="evdev" # Итак, пример реального правила: проверяем, что это клавиатура, что это именно # AT-клавиатура, а не какая-нибудь веб-камера, которая почему-то считает, что у неё # есть кнопки и гордо называет себя клавиатурой. Дальше идет стандартный набор настроек, # которым, практически, возможности по "доводке" средствами udev и ограничиваются. # В конце не забываем назначить тэг generic, ведь по умолчанию мы присвоили ему garbage ENV{ID_INPUT_KEYBOARD}=="?*", ATTRS{name}=="AT Translated Set 2 keyboard", \ ENV{xkblayout}="us,ru", \ ENV{xkbvariant}=",winkeys", \ ENV{xkboptions}="grp:caps_toggle,grp_led:caps,compose:rwin", \ ENV{ID_INPUT.tags}="generic" # А вот так можно (нужно) настраивать устройства требующие особого ухода ENV{ID_INPUT_TOUCHPAD}=="?*", ENV{ID_INPUT.tags}="synaptics" # Теперь настроим мышку. К сожалению почти всё, что присутствует в компьютере # норовит себя назвать если уж не клавиатурой, то хотя бы мышкой. Поэтому не забываем # проверять идентификатор ENV{ID_INPUT_MOUSE}=="?*", ENV{ID_INPUT_KEYBOARD}!="?*", \ ATTRS{name}=="Logitech USB Receiver", ENV{ID_INPUT.tags}="generic" LABEL="x11_input_end"
Теперь к тому, откуда брать параметры вроде ATTRS{name}
или ENV{ID_INPUT_KEYBOARD}
(в примерах eventX
означает конкретное устройство, которое вы хотите проверить)
- параметры, которые проверяются в
ATTRS
можно подглядеть в/sys/class/eventX/device/uevent
(ну или вообще в любомuevent
в дереве sysfs) - параметры, которые проверяются в
ENV
, проще всего посмотреть при помощиudevadm info --query=all --path=/class/input/eventX
. То, что начинается сE:
- и есть то, что вам нужно.
Как только вы закончите настройку правила udev
, надо заставить его обработать заново все устройства. Это делается коммандой udevadm trigger
(от суперпользователя). Проверить, что ваши настройки применились (т.е. вы не допустили нигде синтаксических или логических ошибок), можно при помощи вышеуказанной команды udevadm info --query=all --path=/class/input/eventX
. Если в списке E:
-параметров отсутствует ID_INPUT.tags
- скорее всего, вы допустили синтаксическую ошибку и вам следует проверить системный лог на предмет ругани udevd
.
- Для комментирования войдите или зарегистрируйтесь
Мрак. Как всегда все через
Мрак. Как всегда все через ***.
С уважением.
Пантер.
Не очень понимаю смысл пинать
Не очень понимаю смысл пинать udev... В xorg-sevrer 1.8 есть MatchIsTouchpad "on" для тачпадов, MatchIsKeyboard для клавиатур и MatchIsPointer для манипуляторов типа мышь.
Хотя назначая тэги через udev можно многого добится, но, помоему, для таких вещей это из все равно, что тараканов выжигать напалмом.
савсем не понятно зачем
совсем не понятно зачем отсеивать утсройтва (обычно нужно отсеить определенные устройства (напримет пульт tv-тюнера), а остальные пусть xorg отрабатывает (старый с hal-ом так и делал, проблем небыло))
PS. без всего этого безобразия (типа garbage) все работает
Какбе... Цитата: Это может
Какбе...
Не вызывает - я рад за вас =). У меня иксы видят штук 15 устройств и парочка выдает ioctl ошибки, после чего иксы вываливаются
Черновик официального
Черновик официального руководства по обновлению
Текстовый редактор vi имеет два режима работы: в первом он пищит, а во втором — всё портит.
and
Официальное руководство по обновлению
Соглашусь с некоторыми
Соглашусь с некоторыми товарищами выше, необходимости в допправилах удева для фильтрации устройств нет.
И так. как всё это делается.
После уствновки у вас уже есть /etc/X11/xorg.conf.в/10-evdev.conf с которым, в принципе, всё работает.
Если кого-то напрягает, что xorg цепляет вами уже настроенные в других местах кнопочки вне устройства клавы (например, с помощью универсальных acpid и actkbd), то можно явно указать в InputClass, что цеплять, а что нет.
0. Запускаем startx -- :1 c дефолтным /etc/X11/xorg.conf.в/10-evdev.conf после того, как сервер полностью загрузился, его можно вырубать - нам нужны только логи. Убираем /etc/X11/xorg.conf.в/10-evdev.conf из этой диры, или переименовываем в 10-evdev чтоб не мешал в дальнейшем.
1. Смотрим
$ grep "config/udev: Adding input device" /var/log/Xorg.1.log
между выражением для грепа и скобочками вы увидите имена девайсов, с ними и будем работать (ну и с путями тоже).2. Например, у нас две клавы Genius: ps/2 и usb, сделаннные измождёнными ручками китайских детей.
3. Также, например, у нас в ходу uvc-камера с кнопочкой и кнопка мощщи на системнике. хз, что с камерой делать, это вы уж сами как-нить нафантазируете, пока уберем, а кнопка питалова у нас обрабатывается acpid, так, что она в иксах нам и даром не нать.
4. Мышки. Их, например, тоже целых два щтука: 9 и 5-кнопочная. Настраиваем ту, что с большим количеством кнопок, вторая будет работать обычным образом, глюков не замечено:
5. Вот тут мойшет поджидать от ксорга ловушка - он цепляет всё, в итоге имеем:
Не кажется ли вам, что их многовато? Xorg'у они точно встали поперёк и свели его с ума: курсор (пока что один) прилип к левому краю экрана и шустро к нему полз если попытаться его отодрать. Решилось довольно тривиально:
На этом пока всё.
:)
Добавлю от себя, столкнулся с
Добавлю от себя, столкнулся с проблемой при переходе на xorg-server-1.8 и udev. Сбились клавиши, хотя в конфигах прописано все верно. Например нажимаю стрелку вниз, а отрабатывает как двойное нажатие "стрелка вниз" + "enter", и так практически с каждой управляющей клавишей. То есть, если просмотреть вывод команды "xmodmap --pke", на каждую клавишу было по навешено несколько действий.
Решилось удалением левых драйверов, в моем случае:
т.к. использовал драйвер evdev, оставил только
Цитата: Сбились клавиши, хотя
У меня на ноутбуке практически то же.
Решил добавив в ~/.xinitrc:
Смотрим результат:
Вот что у меня:
Теперь уменя с вводом проблем не наблюдается, хотя устройств, как видите, много.