[Решено] Настройка тачпада Elantech.

Разбираемся с подключением и настройкой устройств ввода информации.

Модератор: Модераторы разделов

Ответить
Аватара пользователя
baldman88
Сообщения: 233

[Решено] Настройка тачпада Elantech.

Сообщение baldman88 »

Доброго времени суток всем. Тема избитая. НО. Появилось немного свободного времени и захотелось настроить некоторые мелочи. И с тачпадом возникла проблема. Уже раз пытался, но потом забросил. Вот попытка номер два. Тачпад Elantech. Написал правило для udev, написал скрипт, но он не хочет включать и отключать тачпад при отключении и включении мыши. Само правило срабатывает и запускает скрипт, но эффекта 0. А вот если запустить скрипт вручную -- всё работает. Прочитал про плагин mouse в gconf, отключил его. Не помогло, да ещё и горизонтальный скроллинг пропал. Пробовал дописывать в xorg.conf различные настройки -- не помогает. На просторах интернета всё одно и тоже. Можно ли сделать так, чтобы это работало? Не особо принципиально, но пол дня потратил, а результатов никаких. Обидно :unsure:
Спасибо сказали:
Аватара пользователя
vr13
Сообщения: 876
ОС: gentoo

Re: [Решено] Настройка тачпада Elantech.

Сообщение vr13 »

покажите правило и скрипт. ну и фрагменты вывода dmesg, где говорится про touchpad и время включения/отключения мыши

кстати, а что там такого, что заставляет скрипт создавать? казалось, что кроме synclient Touchpad=0|1 больше ничего делаеть не нужно. elantech - это какое-то специальное устройство?
Спасибо сказали:
Аватара пользователя
baldman88
Сообщения: 233

Re: [Решено] Настройка тачпада Elantech.

Сообщение baldman88 »

Правило:

Код: Выделить всё

#ACTION=="add", SUBSYSTEM=="input", ENV{ID_INPUT_MOUSE}=="1", RUN+="/usr/bin/synclient TouchpadOff=1"
#ACTION=="remove", SUBSYSTEM=="input", ENV{ID_INPUT_MOUSE}=="1", RUN+="/usr/bin/synclient TouchpadOff=0"
ACTION=="add", SUBSYSTEM=="input", ENV{ID_INPUT_MOUSE}=="1", RUN+="/etc/udev/scripts/touchpad_off.sh"
ACTION=="remove", SUBSYSTEM=="input", ENV{ID_INPUT_MOUSE}=="1", RUN+="/etc/udev/scripts/touchpad_on.sh"

Скрипт (выключение тачпада):

Код: Выделить всё

#!/bin/sh
#id=`xinput list | grep "Logitech Wheel Mouse" | awk '{print($7)}' | grep -o [0-9]*`
id=`xinput list | grep "ETPS/2 Elantech Touchpad" | grep -o "id=[0-9]*" | grep -o [0-9]*`
`xinput set-int-prop $id 'Device Enabled' 8 0`
#echo $id > /home/baldman/off

Только строчка echo $id > /home/baldman/off, при запуске udev-ом, файл создаёт, но он пустой и тачпад не реагирует. А когда запускаешь вручную, то в файле есть id и тачпад выключается.
В выводе dmesg про тачпад ничего толком не нашёл:

user@host

[11:31:20][baldman@bcs-laptop][~]$ dmesg | grep elantech [ 7.037251] elantech.c: assuming hardware version 2, firmware version 4.1.1 [ 7.084981] elantech.c: Synaptics capabilities query result 0x7e, 0x13, 0x0d. [11:32:29][baldman@bcs-laptop][~]$ dmesg | grep touchpad [ 9.197516] Registered led device: asus::touchpad [11:33:39][baldman@bcs-laptop][~]$


А вот вывод при отключении и включении мыши:

user@host

[11:37:57][baldman@bcs-laptop][~]$ dmesg [ 912.349271] usb 2-2: USB disconnect, address 2 [ 914.792096] usb 2-2: new low speed USB device using ohci_hcd and address 3 [ 915.006851] usb 2-2: configuration #1 chosen from 1 choice [ 915.017115] input: Genius Laser Mouse as /devices/pci0000:00/0000:00:04.0/usb2/2-2/2-2:1.0/input/input12 [ 915.017302] generic-usb 0003:0458:003A.0002: input,hidraw0: USB HID v1.10 Mouse [Genius Laser Mouse] on usb-0000:00:04.0-2/input0 [11:39:23][baldman@bcs-laptop][~]$


И да, на synclient TouchpadOff=0|1 тачпад вообще не реагирует.
Спасибо сказали:
Аватара пользователя
baldman88
Сообщения: 233

Re: [Решено] Настройка тачпада Elantech.

Сообщение baldman88 »

И ещё. Насколько я понял из описания udev, после создания корневой фс, он проверяет все события и инициализирует устройства. Тогда, по идее, он должен обрабатывать правило для тачпада, ведь мышь была "add", и запускать соответствующий скрипт. Но этого не происходит. Или я чего-то недопонял?
Спасибо сказали:
FlySnake
Сообщения: 992
ОС: openSUSE
Контактная информация:

Re: [Решено] Настройка тачпада Elantech.

Сообщение FlySnake »

baldman88 писал(а):
30.10.2011 13:49
И да, на synclient TouchpadOff=0|1 тачпад вообще не реагирует.

Правильно, synclient для тачпадов Synaptics, тут Elantech

Чисто предположение: $PATH в скрипте, запускаемом udev-ом
Спасибо сказали:
Аватара пользователя
baldman88
Сообщения: 233

Re: [Решено] Настройка тачпада Elantech.

Сообщение baldman88 »

FlySnake писал(а):
30.10.2011 17:35
baldman88 писал(а):
30.10.2011 13:49
И да, на synclient TouchpadOff=0|1 тачпад вообще не реагирует.

Правильно, synclient для тачпадов Synaptics, тут Elantech

Это ответ на:

vr13 писал(а):
30.10.2011 08:56
казалось, что кроме synclient Touchpad=0|1 больше ничего делаеть не нужно. elantech - это какое-то специальное устройство?

На счёт $PATH -- не совсем понял. Можно поконкретнее?
Спасибо сказали:
Аватара пользователя
vr13
Сообщения: 876
ОС: gentoo

Re: [Решено] Настройка тачпада Elantech.

Сообщение vr13 »

baldman88 писал(а):
30.10.2011 13:49
Только строчка echo $id > /home/baldman/off, при запуске udev-ом, файл создаёт, но он пустой и тачпад не реагирует. А когда запускаешь вручную, то в файле есть id и тачпад выключается.

скорее всего дело в том, что udev выполняет скрипт не от вашего имени и не в окружении x11, а нужно чтобы для выполнялось для вашей x11-сессии, поэтому измените в правила udev:

Код: Выделить всё

ACTION=="add", SUBSYSTEM=="input", ENV{ID_INPUT_MOUSE}=="1", \
  ENV{DISPLAY}=":0.0", ENV{XAUTHORITY}="/home/baldman/.Xauthority", \
  RUN+="/etc/udev/scripts/touchpad_off.sh"
ACTION=="remove", SUBSYSTEM=="input", ENV{ID_INPUT_MOUSE}=="1", \
  ENV{DISPLAY}=":0.0", ENV{XAUTHORITY}="/home/baldman/.Xauthority", \
  RUN+="/etc/udev/scripts/touchpad_on.sh"

это (установка окружения) позволит выполнять все в контексте существующей x11-сесии. понятно, что права скрипты должны быть - "выполнять всем"

а что это за elantech такой? он в системе как мышь видится или какой-нить специальный драйвер есть?
Спасибо сказали:
Аватара пользователя
baldman88
Сообщения: 233

Re: [Решено] Настройка тачпада Elantech.

Сообщение baldman88 »

О да. Спасибо. Всё заработало. Видится он в xinput как ETPS/2 Elantech Touchpad, но synclient на него не влияет, хотя, насколько я понял, драйвер он использует синаптиковский. Хотя могу и ошибаться. Осталось настроить горизонтальный скроллинг и поменять действия по нажатию 2-х и 3-х пальцев.
Спасибо сказали:
Аватара пользователя
baldman88
Сообщения: 233

Re: [Решено] Настройка тачпада Elantech.

Сообщение baldman88 »

Всё оказалось на много проще. Оказывается, драйвер synaptics нормально справляется с данным тачпадом. Просто не нужно его (тачпад) трогать с помощью xinput set-int-prop. Раньше видимо было иначе, так как в /etc/acpi/asus-touchpad.sh используется включение и выключение с помощью xinput. После того, как всё поправил и снял галочку в gconf-editor в пункте /apps/gnome_settings_daemon/plugins/mouse/active, всё заработало как часы. В общем, может кому пригодится.

Такой вот /etc/udev/rules.d/99-touchpad.rules :

Код: Выделить всё

ACTION=="add", SUBSYSTEM=="input", ENV{ID_INPUT_MOUSE}=="1", ENV{DISPLAY}=":0.0", ENV{XAUTHORITY}="$XAUTHORITY", RUN+="/usr/bin/synclient TouchpadOff=1"
ACTION=="remove", SUBSYSTEM=="input", ENV{ID_INPUT_MOUSE}=="1", ENV{DISPLAY}=":0.0", ENV{XAUTHORITY}="$XAUTHORITY", RUN+="/usr/bin/synclient TouchpadOff=0"

Поправил /etc/acpi/asus-touchpad.sh :
Spoiler

Код: Выделить всё

#!/bin/sh
[ -f /usr/share/acpi-support/state-funcs ] || exit 0

. /usr/share/acpi-support/power-funcs

# if this is the right behavior, then this should be moved out of acpi-support
# to hal (or whatever is replacing hal for such events)
getXconsole
# get the current state of the touchpad
TPSTATUS=`synclient -l | grep TouchpadOff | grep -o [0-9]*`
if [ $TPSTATUS = 0 ]; then
    synclient TouchpadOff=1
else
    synclient TouchpadOff=0
fi

И добавил в автозапуск скрипт, который немного настраивает тачпад и отключает его при наличии подключенной мыши :
Spoiler

Код: Выделить всё

#!/bin/sh
STATE=`synclient -l | grep TouchpadOff | grep -o [0-9]*`
if [ "$STATE" = 0 ]
then
    if [ "`xinput list | grep "Mouse"`" ]
    then `synclient TouchpadOff=1`
    fi
fi
synclient TapButton2=2 # 2 пальца -- средняя кнопка
synclient TapButton3=3 # 3 пальца -- правая кнопка, по умолчанию они поменяны местами
synclient VertEdgeScroll=0 # выключает вертикальную прокрутку по краю, я её всё равно не смог поймать
synclient HorizEdgeScroll=0 # тоже самое с горизонтальной
synclient HorizTwoFingerScroll=1 # включает горизонтальную прокрутку двумя пальцами
synclient CircularScrolling=1 # включает прокрутку круговыми движениями а-ля iPod
Спасибо сказали:
Ответить