пʼятниця, 19 червня 2009 р.

Проблеми з мишою в новому Xorg в зв’язці з hal

Після оновлення Xorg, якому тепер не потрібно мати файл настройки xorg.conf, виявилося, що не все так радісно, як би мало бути. Проблема проявилася як на мому лаптопі з Убунту Jaunty, так і на Archlinux, який віднедавна загніздився в мене на стаціонарному компі. Проблемка проявилася в тому, що при клацанні лівою клавішою миші, наприклад, при згортуванні програми, один клік ідентифікувався як два кліка, тому програма спочатку згорталася і потім відразу відкривалася. Це також проявлялося на закриванні вкладок в Вогнелисиці і в інших програмах. Аналіз /var/log/Xorg.0.log показав, що hal якогось чорта знаходить 2 миші, одна як "USB mouse", що відповідає дійсності, і друга "Macintosh mouse button emulation". Зрозуміло, що при натисканні клавіші на миші сигнал йшов два рази від кожного знайденого девайса, що і спричиняло ефект подвійного кліку. Це легко можна було побачити, запустивши xev і перевіривши за допомогою xinput list скільки мишей є в системі. Досить тривалий пошук по інтернету дав купу згадувань про цю проблему, як в Убунту, так і інших дистрибутивах. Знайшов і вирішення цієї проблеми, досить просте - заблокувати Macintosh мишку в полісах hal. Робиться все досить просто:

1. Створити файлик /etc/hal/fdi/preprobe/10-blacklist.fdi з таким вмістом:

<?xml version="1.0" encoding="UTF-8"?>
<deviceinfo version="0.2">
<device>
<match key="info.category" contains="input">
<match key="input.product" contains="Macintosh">
<merge key="info.ignore" type="bool">true</merge>
</match>
</match>
</device>
</deviceinfo>

2. Записати файл, перезапустити hal через sudo /etc/init.d/hal restart в Убунту чи sudo /etc/rc.d/hal restart в Archlinux.
3. Рестартувати X-сервер sudo /etc/init.d/gdm restart в Убунту або /etc/rc.d/gdm restart в Archlinux.
4. Перевірити, що є одна миша, заглянувши в /var/log/Xorg.0.log або запустивши xinput list.

Рецепт взятий звідси. Крім того, постійно в інтернеті є нарікання, що hal-івські правила погано документовані, причому немає аплікації, яка б могла на ходу змінювати їх по бажанню користувача. Наприклад, я довго бився, як в новому Xorg зробити так, щоб по замовчуванні були ті розкладки клавіатури, які мені потрібні. Виявилося, що це робиться досить просто через hal правила. А саме, треба створити файлик /etc/hal/fdi/policy/10-keymap.fdi з таким вмістом:

<?xml version="1.0" encoding="utf-8"?>
<deviceinfo version="0.2">
<device>
<match key="info.capabilities" contains="input.keypad">
<merge key="input.xkb.rules" type="string">base</merge>
<merge key="input.xkb.model" type="string">pc105</merge>
<merge key="input.x11_driver" type="string">evdev</merge>
<merge key="input.xkb.layout" type="string">pl,ua</merge>
<merge key="input.xkb.variant" type="string">,unicode</merge>
<merge key="input.xkb.options" type="string">grp:alt_shift_toggle,lv3:ralt_switch,grp_led:scroll</merge>
</match>
</device>
</deviceinfo>

фактично прописавши те, що раніше було в xorg.conf. Правила hal, які вміщаються в /etc/hal/fdi/policy, перезаписують правила по замовчуванню, які можна знайти в /usr/share/hal/fdi/. Позадававши таким чином відповідні пристрої в власноручно написаних правилах, можна дійсно спокійно видаляти xorg.conf. Не знаю, наскільки такий спосіб є зручніший від того, щоб все було компактно в xorg.conf...

Google Analytics