LINUX.ORG.RU

[EeePC 1201N][Fedora][Fn+F9]Вкл./откл. тачпада


0

1

Есть нетбук Asus EeePC 1201N, на котором установлена RFR14. Многие из функциональных клавиш заработали «из коробки», но не Fn + F9 (вкл./откл. тачпада). Порядок моих действий:

$ acpi_listen
hotkey ASUS010:00 00000037 00000006
 PNP0C14:01 000000d2 00000000
так я узнал код сочетания клавиш Fn + F9. Далее:
$ ls /etc/acpi/events/
powerconf  videoconf
$ sudo touch /etc/acpi/events/touchpadconf
$ ls /etc/acpi/events/
powerconf  touchpadconf  videoconf
В /etc/acpi/events/touchpadconf пишу:
event=hotkey ASUS010:00 00000037
action=/etc/acpi/actions/touchpad.sh
Далее:
$ ls /etc/acpi/actions/
power.sh
$ sudo touch /etc/acpi/actions/touchpad.sh
$ sudo chmod +x /etc/acpi/actions/touchpad.sh
$ ls /etc/acpi/actions/
power.sh  touchpad.sh
В /etc/acpi/actions/touchpad.sh пишу:
#!/bin/sh

# get the current state of the touchpad
TPSTATUS=`synclient -l | grep TouchpadOff | awk '{print $3}'`

# if getting the status failed, exit
test -z $TPSTATUS && exit 1

if [ $TPSTATUS = 0 ]; then
synclient TouchpadOff=1
else
synclient TouchpadOff=0
fi
Потом делаю рестарт демона acpid. Нажимаю Fn + F9, и... Реакции ноль.
Эксперимантальным путём выяснил, что эта схема начинает работать после после того, как руками сделаю:
$ sudo acpid
Работа службы acpid выставлена на всех runtime_level'ах в system-config-services (это видно в логе загрузки). Также пробовал запихивать запуск acpid rc.local - аналогично: автоматом не срабатывает.
Как заставить работать Fn + F9 сразу после загрузки системы без вмешательства пользователя?

★★★★★

Ответ на: комментарий от snoopcat

ой, сорри, не заметил что с ручным запуском все работает.
тогда так: экспериментальным путём выясняете, работает ли схема после того, как руками сделаете не $ sudo acpid, а # acpid

snoopcat ★★★★★ ()
Ответ на: комментарий от carasin

дык, может косяк какой с передачей переменных окружения (сам на этом попался)

snoopcat ★★★★★ ()

Перепишите скрипт с абсолютными путями, те:

#!/bin/sh

# get the current state of the touchpad
TPSTATUS=`/usr/bin/synclient -l |/bin/awk '/TouchpadOff/{print $3}'`

# if getting the status failed, exit
/usr/bin/test -z $TPSTATUS && exit 1

if [ $TPSTATUS = 0 ]; then
/usr/bin/synclient TouchpadOff=1
else
/usr/bin/synclient TouchpadOff=0
fi
Убедитесь, что файл является исполняемым.

anon_666 ()
Ответ на: комментарий от anon_666

Файл исполняемый, я об этом ещё в топике написал. А переписывание скрипта с использованием абсолютных путей толку не даёт, ибо если вручную сделать:

$ sudo /etc/acpi/actions/touchpad.sh
или:
# /etc/acpi/actions/touchpad.sh
то тачпад включается / выключается. А вообще, сейчас попробовал этот скрипт от имени обычного пользователя запускать - тоже срабатывает. А вот «связи» между конф'ом и скриптом нет до тех пор, пока не сделаю либо $ sudo acpid, либо # acpid.
Ещё сейчас заметил: после того, как сделаю
$ sudo service acpid restart
Fn + F9 перестаёт работать до очередного $ sudo acpid.

carasin ★★★★★ ()
Ответ на: комментарий от carasin

>переписывание ... толку не даёт, ибо если вручную сделать ...

Так проверяли или нет? У демонов свой environment, и может быть не установлен $PATH.

пока не сделаю либо $ sudo acpid, либо # acpid.


Всё правильно, когда запускаете демона ручками - подставляется ваш environment.

anon_666 ()
Ответ на: комментарий от anon_666

Ух-ты как всё лихо закручено!
Тогда извиняйте за непоследование Вашему совету. Сейчас попробую и отпишусь.

carasin ★★★★★ ()
Ответ на: комментарий от anon_666

В общем, прописал абсолютные пути. Всё по-прежнему. Сам скрипт рабочий, автоматом после загрузки сочетание клавиш не фурычит.
Ещё один интересный момент:

$ sudo service acpid status
acpid (pid  2945) выполняется...
$ sudo acpid
$ sudo service acpid status
acpid (pid  2996) выполняется...
То есть, он не запускает копию демона (как, например, происходит с wpa_supplicant'ом), а рестартует его. Но если делать sudo service acpid restart , то получается фигня.
А что насчёт $DISPLAY , и с чем его едят?

carasin ★★★★★ ()
Ответ на: комментарий от carasin

>Всё по-прежнему.

что насчёт $DISPLAY , и с чем его едят?


Пропишите в начало скрипта:
export DISPLAY=:0

у меня работает.

//anon_666

anonymous ()
Ответ на: комментарий от anon_666
Вот как можно эмулировать происходящее:

# env -i sh -c 'synclient -l'
Failed to connect to X Server.

# env -i sh -c 'DISPLAY=:0 synclient -l'
Parameter settings:
    LeftEdge                = 1760
    RightEdge               = 5304
    TopEdge                 = 1653
...
anon_666 ()
Ответ на: комментарий от anon_666

У меня вот так:

# env -i sh -c 'DISPLAY=:0 synclient -l'
No protocol specified
Failed to connect to X Server.
После того, как вручную сделаю sudo acpid, всё равно так же.

carasin ★★★★★ ()
Ответ на: комментарий от anon_666

Опять 25!

# env -i sh -c 'export DISPLAY=:0; xhost +; synclient -l'
No protocol specified
xhost:  unable to open display ":0"
No protocol specified
Failed to connect to X Server.
Ещё объясни, пожалуйста, механизм влияния переменной $DISPLAY на вкл./откл. тачпада. А то я никак не могу логическую цепочку представить.

carasin ★★★★★ ()
Ответ на: комментарий от anon_666

Может, если это прописать в rc.local, тогда заработает? А то оно, вроде, ругается, что не может присоединиться (к уже занятому) дисплею 0.

carasin ★★★★★ ()
Ответ на: комментарий от carasin

>механизм влияния переменной $DISPLAY на вкл./откл. тачпада.

Synclient коннектится к X-серверу (Яхз зачем) на дисплей, указанный в переменной; если не выходит - отваливается с ошибкой.

anon_666 ()
Ответ на: комментарий от anon_666

Но ведь, если «запустить» руками acpid, то скрипт пашет. Впрочем, непосредственно сам скрипт пашет в любом случае, даже если ничего не запускать (если просто его запустить - в консоли, например). Суть-то как раз в том, что изначально по Fn + F9 скрипт не срабатывает.
А в предыдущем своём посту да, я сморозил чушь.

carasin ★★★★★ ()
Ответ на: комментарий от carasin

>Суть-то как раз в том, что изначально по Fn + F9 скрипт не срабатывает.

Ээм, если прописать в шапку touchpad.sh
echo 666 >/tmp/666
и нажимать Fn + F9, файлик появляется?

anon_666 ()
Ответ на: комментарий от anon_666

Вставил в начало скрипта echo abc >/tmp/abc. Нажимаю Fn + F9, затем:

$ ls /tmp/ | grep abc
$ /etc/acpi/actions/touchpad.sh 
$ ls /tmp/ | grep abc
abc
В общем, насколько я понял, acpid не запускает скрипт (запускает только после «дополнителного» ручного старта).

carasin ★★★★★ ()
Ответ на: комментарий от PolarFox

Это чтобы не парить людям мозг (и избежать заведомо ошибочной ветви трэда). На самом деле что при использовании спец.кнопки, что при нажатии Fn + F9, acpi_listen определяет один и тот же код (который я привёл в топике).

carasin ★★★★★ ()
Ответ на: комментарий от anon_666

Мне всё-таки кажется, что стОит копать в сторону /etc/acpi/events/touchpadconf . Но что ему надо...

carasin ★★★★★ ()
Ответ на: комментарий от carasin

> Кстати, у Вас эта кнопка (или Fn + F9) работает?

Из коробки в убунте.

Сейчас дам параметры ядра (прописывались ради других функциональных кнопок).

PolarFox ★★★★★ ()
Ответ на: комментарий от carasin

> А ещё интересуют параметры загрузки ядра.

acpi_osi=Linux acpi_backlight=vendor pci=nomsi

Кнопки яркости, звука работают.

Суспенд работает на ядре 2.6.33 и новее. При нагрузке на проводную сеть нет кёрнел паников на 2.6.32 и 2.6.37. В итоге единственным адекватным ядром для этого устройства оказалось 2.6.37.

PolarFox ★★★★★ ()
Ответ на: комментарий от PolarFox

Аналогично всё. Только мультимедийные клавиши работают и без acpi_osi=Linux acpi_backlight=vendor (кроме кнопки wi-fi). Но с этими параметрами перестаёт работать регулировка яркости (хотя в KDE появляется полоска, но стоИт на месте), а кнопка wi-fi начинает работать.
А что у Вас в каталогах /etc/acpi/* ?

carasin ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.