Portál AbcLinuxu, 12. května 2025 01:45

Dotaz: vlastni acpi script

7.8.2012 09:07 martin
vlastni acpi script
Přečteno: 343×
Odpovědět | Admin
ahoj, konečně jsem se dokopal k tomu že si pořádně ošetřím ovládání notasu
ale nejak se mi to zaseklo na získávání dat parsovaním výpisu.
Tady je kus kodu. Čísla kláves a selektování sedí.Ty jsem získal pomocí
"acpi_listen".Jen nějak nechápu proč je proměnná TOUCHPAD pořád prázdná.
Žádný záznam v logu pořád jen
Aug  7 08:21:44 1201N martin: Touchpad is:
Aug  7 08:21:44 1201N martin: Error in parsing synclient!!!
#!/bin/sh
case "$1" in
    hotkey)
        case "$3" in
            00000037)
                TOUCHPAD=`synclient -l | grep TouchpadOff | awk '{print $3}'`
                logger "Touchpad: $TOUCHPAD"
                case "$TOUCHPAD" in
                    0)
                         echo 0 > /sys/class/leds/eeepc::touchpad/brightness
                         synclient TouchpadOff=1
                         unclutter -idle 2 -root &
                         notify-send "Touchpad is OFF"
                         ;;
                    1)
                         echo 1 > /sys/class/leds/eeepc::touchpad/brightness
                         synclient TouchpadOff=0
                         pkill unclutter
                         notify-send "Touchpad is ON"
                         ;;
                    *)
                         logger "Error in parsing synclient !!!"
                         ;;
                esac
                ;;
              *)
                logger "Unknown Media Key: $1 / $2 / $3"
                ;;
..... atd, atd

Přitom když přepíšu jen to parsování do test souboru

#!/bin/sh
TOUCHPAD=`synclient -l | grep TouchpadOff | awk '{print $3}'`
echo $TOUCHPAD

nastavím mu +x a vyzkouším tak jede normálně.
Je to můj první bash script tak pomalu na mě, studoval jsem bash asi 5min :)
Dík za pomoc.
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

7.8.2012 09:25 Patrik Uhrak | skóre: 31 | blog: pato
Rozbalit Rozbalit vše Re: vlastni acpi script
Odpovědět | | Sbalit | Link | Blokovat | Admin

Bolo by vhodne sem dat cely skript, tak ako je a nie len cast.

7.8.2012 13:45 martin
Rozbalit Rozbalit vše Re: vlastni acpi script
Příloha:
Ok,
No problemo. Všechno funguje až na parsování touchpad statusu.
10.8.2012 07:58 Patrik Uhrak | skóre: 31 | blog: pato
Rozbalit Rozbalit vše Re: vlastni acpi script

Ono to funguje, len si tam spravil chybu. Odkazujes na 3. (slovom treti) argument namiesto 2 v sekcii pre hotkey. :)


#!/bin/sh
# Default acpi script that takes an entry for all actions

minspeed=`cat /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_min_freq`
maxspeed=`cat /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_max_freq`
setspeed="/sys/devices/system/cpu/cpu0/cpufreq/scaling_setspeed"

set $*

case "$1" in
    hotkey)
        # povodny zapis 
        # case "$3" in
        case "$2" in
            00000037)
                TOUCHPAD=`synclient -l | grep TouchpadOff | awk '{print $3}'`
                logger "Touchpad is: $TOUCHPAD"
                case "$TOUCHPAD" in
                        0)
                                echo 0 > /sys/class/leds/eeepc::touchpad/brightness
                                synclient TouchpadOff=1
                                unclutter -idle 2 -root &
                                logger "Touchpad si ON"
                                ;;
                        1)
                                echo 1 > /sys/class/leds/eeepc::touchpad/brightness
                                synclient TouchpadOff=0
                                pkill unclutter
                                logger "Touchpad is OFF"
                                ;;
                        *)
                                logger "Error in parsing synclient!!!"
                                ;;
                esac
                ;;
            *)
                logger "Unknown mediakey $1 / $2 / $3 / $4"
                ;;
        esac
        ;;
    button/mute)
        case "$2" in
            MUTE)
                logger "Mute button pressed: $2"
                amixer set Master toggle
                ;;
            *)
                logger "ACPI action undefined: $2"
                ;;
        esac
        ;;
    button/volumedown)
        case "$2" in
            VOLDN)
                amixer set Master 2dB- unmute
                ;;
            *)
                logger "ACPI error volumedown"
                ;;
        esac
        ;;
    button/volumeup)
        case "$2" in
            VOLUP)
                amixer set Master 2dB+ unmute
                ;;
            *)
                logger "ACPI Error volumeup"
                ;;
        esac
        ;;
    button/power)
        case "$2" in
            PBTN|PWRF)
                logger "PowerButton pressed: $2"
                poweroff
                ;;
            *)
                logger "ACPI action undefined: $2"
                ;;
        esac
        ;;
    button/sleep)
        case "$2" in
            SLPB|SBTN)
                echo -n mem >/sys/power/state
                ;;
            *)
                logger "ACPI action undefined: $2"
                ;;
        esac
        ;;
    ac_adapter)
        case "$2" in
            AC|ACAD|ADP0)
                case "$4" in
                    00000000)
                        echo -n $minspeed >$setspeed
                        #/etc/laptop-mode/laptop-mode start
                        ;;
                    00000001)
                        echo -n $maxspeed >$setspeed
                        #/etc/laptop-mode/laptop-mode stop
                        ;;
                esac
                ;;
            *)
                logger "ACPI action undefined: $2"
                ;;
        esac
        ;;
    battery)
        case "$2" in
            BAT0)
                case "$4" in
                    00000000)
                        logger 'Battery online'
                        ;;
                    00000001)
                        logger 'Battery offline'
                        ;;
                esac
                ;;
            CPU0)
                ;;
            *)  logger "ACPI action undefined: $2" ;;
        esac
        ;;
    button/lid)
        case "$3" in
            close)
                logger 'LID closed'
                ;;
            open)
                logger 'LID opened'
                ;;
            *)
                logger "ACPI action undefined: $3"
                ;;
    esac
    ;;
    *)
        logger "ACPI group/action undefined: $1 / $2 / $3 / $4"
        ;;
esac

# vim:set ts=4 sw=4 ft=sh et:
10.8.2012 09:06 Patrik Uhrak | skóre: 31 | blog: pato
Rozbalit Rozbalit vše Re: vlastni acpi script

A mozno je to sprostost, co som napisal. Ale podstata je, ze by bolo viac nez vhodne skontrolovat, ake argumenty sa pouzivaju. Daj si tam kontrolne body, napr. echo $3 pred case a tak podobne, pripadne echo $@ alebo najlepsie obe.

10.8.2012 12:41 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
Rozbalit Rozbalit vše Re: vlastni acpi script
Odpovědět | | Sbalit | Link | Blokovat | Admin
Zkuste třeba přidat řádky:
synclient -l | grep TouchpadOff > /nekam/kde/lze/zapisovat/ttest1 2> /nekam/kde/lze/zapisovat/ttest1_err
synclient -l > /nekam/kde/lze/zapisovat/ttest2 2> /nekam/kde/lze/zapisovat/ttest2_err
před TOUCHPAD=`synclient -l … a stisknout a juknout do těch souborů.
A ještě bych si před tím case vypsal parametry, klidně třeba
echo "Vstupní parametry '$1'  '$2'  '$3'" > /nekam/kde/lze/zapisovat/ttest0
Samozřejmně můžete všechno do jednoho souboru pomocí >> to už je na Vás.
PS: TouchpadOff může nabývat tří hodnot 0,1,2
To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
11.8.2012 15:11 martin
Rozbalit Rozbalit vše Re: vlastni acpi script
Jak jsem psal.
Problem neni s podminkami, tam je vse ok. hodnoty mi odchytava spravne.
o tom svedci i rozsvecovani led diody pro touchpad.
problem je v tom ze se mi proste ten prikaz `synclient` ani nevykona :(.
zrovna tak hlaska v notifikatoru se nikdy nezobrazi.
11.8.2012 16:13 Ash | skóre: 53
Rozbalit Rozbalit vše Re: vlastni acpi script
Zkuste napsat celou cestu, např. /usr/bin/synclient, a vemte v potaz že ten acpi skript se pouští pod rootem.
11.8.2012 16:23 martin
Rozbalit Rozbalit vše Re: vlastni acpi script
Díky,
To jsem zkoušel taky a nic.
Ted jsem vsak znovu asi objevil kolo.
Skript uz bezi v plne parade a jeste jsem par veci dopsal.

Stacilo na zacatek skriptu dopsat:
export XAUTHORITY=/home/martin/.Xauthority
export DISPLAY=":0"

a uz to beha jak ma.ten DISPLAY bych pochopil ale XAUTHORITY ???
dokaze mi to nekdo objasnit kdyz musi vedet ze bezi pod rootem.
Dik.
11.8.2012 16:35 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
Rozbalit Rozbalit vše Re: vlastni acpi script
No a to byste se právě dozvěděl v těch dvou souborech ttest1_err a ttest2_err,
asi by tam bylo něco jako: Failed to connect to X Server.
To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
11.8.2012 18:47 martin
Rozbalit Rozbalit vše Re: vlastni acpi script
Ano bylo tam presne ono v test2_err.
exportoval jsem DISPLAY ale stale nic.chybelo tomu XAUTHORITY.
a to me mate.
proste by me zajimalo na co root potrebuje prava k pristupu na muj Xserver.
Nikdy jsem toto neresil :( ale alespon jsem ted o neco chytrejsi.
11.8.2012 19:11 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
Rozbalit Rozbalit vše Re: vlastni acpi script
Vysvětlení bude asi nějak takto (¡jen úvaha!): synclient nastavuje touchpad pro X-ka a musí komunikovat z Xserverem a musí vědět komu to nastavuje, tedy i kterou xseesion, a v .xauthority je uložena cookie, přes kterou se synclient autorizuje vůči Xserveru a tím vlastně komunikuje pod rolí určenou v .xauthority a tím pádem nastaví touchpad pro vaši session.
To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
11.8.2012 19:28 martin
Rozbalit Rozbalit vše Re: vlastni acpi script
Krásné a 'polopatické' vysvětlení.
Tím se i vysvětluje proč všechno ostatní fungovalo.
Díky.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.