elbahek 12.03.2011 01:38
How-to`s — Автоотключение тачпада при подключении мышки и GDM
В принципе, на большинстве ноутов тачпад можно выключить сочитанием Fn+F<1-9>, но автоотключение смотрится труевее.Собственно, данная хаутушка - лишь расширенная версия этого кусочка арчевики. Перед тем, как меня начнут пинать, за "незачем повторять вики" поясню - есть пару нюансов для GDM'a, из-за которых пришлось переписать правила udev'a... впрочем let's go ahead.
1. Включаем SHMConfig в конфиге иксов. Для Xorg 1.7 и выше, который перешел на множественные конфиги в xorg.conf.d - нужно добавить новый файл или поправить существующий, в котором указаны настройки тачпада. Для Xorg < 1.7 нужно добавить соответствующие настройки в общий xorg.conf.
В арче это /etc/X11/10-evdev.conf. Включение SHMConfg даст нам возможность редактировать настройки тачпада на лету.
2. Теперь пишем правило для udev'a. В оригинале (арчевики) это:
Разбираем по частям: первые три хмм... выражения
ACTION=="add", SUBSYSTEM=="input", KERNEL=="mouse<1-9>"
это условия, при которых выполнится правило, а именно "при добавлении устройтва с подсистемой 'input' и именем mouse1..9" сделать следующее... присвоить устройству переменные перечисленные в ENV. Про DISPLAY все знают, а XAUTHORITY - путь к файлу, который содержит X-куки для доступа к иксовым приложениям. Ну и RUN+= означает запустить соотв. команду (+= здесь для того, чтобы добавить данную команду ко всем командам запускаемым для данного девайса). В RUN всегда пишутся абсолютные пути (если написать относительный - он будет искать в /lib/udev).
Если у вас возник вопрос "А нафига мы передаем ему эти переменные", ответ - synclient выполняется отдельно для каждой сессии иксов и таким образом мы указываем ему, для какой конкретно сессии выполнить отключение тачпада. Если хотите - можете в обычной консоли (Ctrl+Alt+F1) залогиниться под любого юзера, для которого сейчас не запущены иксы и набрать "synclient TouchpadOff=0". Напишет "не могу соединиться с X-сервером".
Этот самый /home/USERNAME/.Xauthority и стал для меня камнем преткновения, т.к. его в моей домашней директории не было. Умный написал бы echo $XAUTHORITY и узнал бы, где находится файл. Но я был не умный, а сонный, потому полез гуглить и в итоге нагуглил, что менеджментом X-сессий занимаются логин-менеджеры, в моем случае - GDM. В его документации нашлось, что файл хранится в /var/run/gdm в случайно генерируемой директории. Итого /var/run/gdm/auth-for-USERNAME-блаблабла/database.
Итак окончательные правила udev'a выглядели так:
Теперь конкретнее: PROGRAM - выполняет указанную программу, а ее выхлоп сохраняется в RESULT. Чтобы вывести значение переменной в строке, в udev'e пишется название переменной в нижнем регистре и с долларом. Таким образом "$result/database" = "/var/run/gdm/auth-for-USERNAME-someLettersAndDigits/database". Осталось только перечитать правила udev'a
1 |
|
и вуаля! Подключил мышку - тачпад не работает и наоборот.
Хмм... напоследок, почему KERNEL=="mouse<1-9>"? У меня тачпад при старте системы всегда регистрируется как mouse0.
3. Остался завершающий штрих: если мышка подключена до включения ноута - udev не отключит тачпад - мы-то ему сказали правила на ADD/REMOVE. Потому идем в /etc/gdm. Здесь гдм хранит стартовые скрипты. Документация говорит нам, что скрипт в папке Init запускается после инициализации иксов и ровно перед тем, как отрисуется окошко с логином. Как раз то, что нужно.
По-умолчанию для каждого этапа (Init, PostLogin, PostSession, PreSession) запускается скрипт Default лежащий в одноименной папке. Мы можем указать свои скрипты для каждого DISPLAY'я, тогда вместо Default будет запускатся наш скрипт. Итак:
1 |
$ cat /etc/gdm/Init/:0
|
В принципе, можно было бы дописать последнюю строку в Default, но, скорее всего, Default будет меняться вместе с обновлениями GDM, так что не будем его трогать от греха подальше. Вот и все, it works, как говорит нам апач.
mealsforall 12.03.2011 02:19 #
+ 0 -
А разве в гноме нету опции Ignore touchpad when typing?