Online video hd

Free video online

Официальный сайт forexnw 24/7/365

Смотреть видео бесплатно

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.
 1
2
3
4
5
6
7
8
9
10
Section "InputClass"
Identifier "touchpad catchall"
Driver "synaptics"
MatchIsTouchpad "on"
MatchDevicePath "/dev/input/event*"
..
ваши опции для тачпада
..
Option "SHMConfig" "true"
EndSection


В арче это /etc/X11/10-evdev.conf. Включение SHMConfg даст нам возможность редактировать настройки тачпада на лету.

2. Теперь пишем правило для udev'a. В оригинале (арчевики) это:
1
2
3
4
ACTION=="add", SUBSYSTEM=="input", KERNEL=="mouse<1-9>", ENV{DISPLAY}=":0.0", 
ENV{XAUTHORITY}="/home/USERNAME/.Xauthority", ENV{ID_CLASS}="mouse", RUN+="/usr/bin/synclient TouchpadOff=1"
ACTION=="remove", SUBSYSTEM=="input", KERNEL=="mouse<1-9>", ENV{DISPLAY}=":0.0",
ENV{XAUTHORITY}="/home/USERNAME/.Xauthority", ENV{ID_CLASS}="mouse", RUN+="/usr/bin/synclient TouchpadOff=0"


Разбираем по частям: первые три хмм... выражения
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 выглядели так:
1
2
3
$ cat /etc/udev/rules.d/10-touchpad.rules
ACTION=="add", KERNEL=="mouse<1-9>", SUBSYSTEM=="input", PROGRAM="/usr/bin/find /var/run/gdm -name *USERNAME*", ENV{DISPLAY}=":0.0", ENV{XAUTHORITY}="$result/database", RUN+="/usr/bin/synclient TouchpadOff=1"
ACTION=="remove", KERNEL=="mouse<1-9>", SUBSYSTEM=="input", PROGRAM="/usr/bin/find /var/run/gdm -name *USERNAME*", ENV{DISPLAY}=":0.0", ENV{XAUTHORITY}="$result/database", RUN+="/usr/bin/synclient TouchpadOff=0"


Теперь конкретнее: PROGRAM - выполняет указанную программу, а ее выхлоп сохраняется в RESULT. Чтобы вывести значение переменной в строке, в udev'e пишется название переменной в нижнем регистре и с долларом. Таким образом "$result/database" = "/var/run/gdm/auth-for-USERNAME-someLettersAndDigits/database". Осталось только перечитать правила udev'a
1
# udevadm control restart


и вуаля! Подключил мышку - тачпад не работает и наоборот.
Хмм... напоследок, почему KERNEL=="mouse<1-9>"? У меня тачпад при старте системы всегда регистрируется как mouse0.

3. Остался завершающий штрих: если мышка подключена до включения ноута - udev не отключит тачпад - мы-то ему сказали правила на ADD/REMOVE. Потому идем в /etc/gdm. Здесь гдм хранит стартовые скрипты. Документация говорит нам, что скрипт в папке Init запускается после инициализации иксов и ровно перед тем, как отрисуется окошко с логином. Как раз то, что нужно.
По-умолчанию для каждого этапа (Init, PostLogin, PostSession, PreSession) запускается скрипт Default лежащий в одноименной папке. Мы можем указать свои скрипты для каждого DISPLAY'я, тогда вместо Default будет запускатся наш скрипт. Итак:
1
2
3
4
5
6
7
8
$ cat /etc/gdm/Init/:0
#!/bin/sh

# Execute Default script
/etc/gdm/Init/Default

# Touchpad auto-disable if usb mouse detected
< -n "$(lsusb | grep -i mouse)" > && synclient TouchpadOff=1


В принципе, можно было бы дописать последнюю строку в Default, но, скорее всего, Default будет меняться вместе с обновлениями GDM, так что не будем его трогать от греха подальше. Вот и все, it works, как говорит нам апач.


Тэги: gdm udev тачпад
+ 2 -
Похожие Поделиться

mealsforall 12.03.2011 02:19 #
+ 0 -
А разве в гноме нету опции Ignore touchpad when typing?
mealsforall 12.03.2011 02:20 #
+ 0 -
В свойствах мышки которая.
mealsforall 12.03.2011 02:21 #
+ 0 -
А блин, я тупой, не прочитал сабж )) Это когда мышка включена, выклбчить тачпад. nevermind.

В хорошем качестве hd видео

Онлайн видео бесплатно


Смотреть русское с разговорами видео

Online video HD

Видео скачать на телефон

Русские фильмы бесплатно

Full HD video online

Смотреть видео онлайн

Смотреть HD видео бесплатно

School смотреть онлайн