xorg and udev
Давным-давно Xorg решил сделать жизнь простых юзеров лучше и сделал автоконфигурацию настроек X сервера. Но для Xorgу надо знать, как общаться с операционной системой. В далеком 2008 году интерфейсом был выбран HAL.
С тех пор HAL был предан анафеме: плохой событийный интерфейс, недружелюбен к энергосбередению, плохая архитектура, xml и прочие преступления, которых он не совершал. И был изгнан из дистрибутивов.
Вместо этого Xorg теперь разыскивает устройства через udev.
Всё бы хорошо, если бы не одна особенность: конфигурация udev не позволяет сделать всего того, что что позволял HAL.
Пример конфига для HAL, использующего x11_options:
<?xml version="1.0" encoding="ISO-8859-1"?>
deviceinfo version="0.2">
<device>
<match key="info.capabilities" contains="input.mouse">
<match key="info.product" contains="Logitech USB Receiver">
<merge key="input.x11_options.AngleOffset" type="string">-35</merge>
<merge key="input.x11_options.YAxisMapping" type="string">4 5</merge>
<merge key="input.x11_options.XAxisMapping" type="string">6 7</merge>
<merge key="input.x11_options.EmulateWheel" type="string">True</merge>
<merge key="input.x11_options.EmulateWheelButton" type="string">9</merge>
<match>
</match>
</device>
</deviceinfo> </
Тут мы видим, как заполняются произвольные атрибуты драйвера evdev (из man evdev). Казалось бы, можно было бы реализовать в udev похожие штуки, как советует wiki ubuntu:
ENV{x11_options.JumpyCursorThreshold}="90", \
"4100"
ENV{x11_options.AreaBottomEdge}=#
ENV{ID_INPUT_TOUCHPAD}=="1", ENV{x11_options.AreaBottomEdge}="5000"
Но вот шутка, оно работает только в части дистрибутивов (ubuntu, RHEL). В Gentoo, например, не работает.
Немного поковырявшись в исходниках оказалось, что патч (2 строки), добавляющий эту “фишку” отсутствует в апстриме.
Я попробовал его заслать и получил ответ, что “фича” была вырезана специально и основным механизмом настройки теперь является …. xorg.conf!
Xorg по прежнему использует udev для получения списка текущих и для отслеживания появления новых устройств, но вся конфиграция должна находиться в /etc/X11/xorg.conf или раздельных файлах /etc/X11/xorg.conf.d/${name}.conf.
Ну и ладно :] Теперь можно брать за основу стандартный конфиг:
cp /usr/share/X11/xorg.conf.d/10-evdev.conf /etc/X11/xorg.conf.d/input.conf
и добавлять туда свои настройки для мыши, клавиатуры и др.:
Section "InputClass"
Identifier "evdev touchpad catchall"
MatchIsTouchpad "on"
MatchDevicePath "/dev/input/event*"
Driver "evdev"
#
# here go our options
Option "AreaBottomEdge" "5000"
# ...
EndSection
Как в старые добрые времена :]