Portál AbcLinuxu, 20. května 2025 20:55

Doubleclick na powerbutton II.

7.2.2009 14:48 | Přečteno: 1424× | Skripty | poslední úprava: 7.2.2009 18:07

Inspirovany uz skoro 3 roky starym blogom o pocitani stlaceni powerbuttonu a podla toho uspavani/vypinani pocitaca som sa rozhodol, ze si napisem obecnejsie riesenie a bez zapisu na filesystem. Takze pomocou signalov.

1 stlacenie = uspat do pamate, 2 stlacenia = uspat na disk, 3 stlacenia = vypnut. Vsetko podstatne je v linkovanom blogu, takze iba strucne: Nie je nutne vyuzivat powerbutton na pocitaci iba jednu akciu, ale je mozne pocas casoveho intervalu pocitat pocet stlaceni a podla vykonat prislusnu akciu. Riesenia, ktore som doteraz videl to vzdy riesili cez vytvaranie a mazanie docasnych suborov, co sa mi nepacilo, takze som napisal pomocou posielania signalov. Potrebujeme na to dva kratke skriptiky.

Skript powerclick:
#!/bin/bash

WAITNAME="${0##*/}-wait"

# ak uz nejaky $WAITNAME bezi, tak mu poslat signal, inak ho spustit
killall -USR1 "$WAITNAME" >/dev/null 2>&1 ||
    "$WAITNAME" &
A skript powerclick-wait:
#!/bin/bash

TIMEOUT=2

# kazdy prijaty click zvysuje counter
trap '((clicks++))' USR1

clicks=1
while true; do
    # $TIMEOUT sekund cakat na dalsi signal
    sleep "$TIMEOUT" &
    # skoncit ak sleep nebol preruseny signalom
    wait %% &&
        break
done
case "$clicks" in
1) hibernate-ram &
    ;;
2) hibernate &
    ;;
3) poweroff &
    ;;
esac
Prvy skript je spustany ako ACPI handler na udalost button/power. Po spusteni sa snazi poslat signal uz beziacemu druhemu skriptu, ak taky neexistuje, tak ho spusti. Druhy skript po kazdom prijatom signale caka $TIMEOUT sekund na dalsi signal a tento timeout vyprsi, tak spusti prislusnu akciu a skonci.

Tak ako je to momentalne naprogramovane, tak druhy skript sa musi nazyvat rovnako ako prvy s pridanym "-wait". T.j. aj aaa a aaa-wait by fungovalo. Pokial sa to niekomu nepaci, tak staci do premennej WAITNAME v prvom skripte vyplnit meno druheho skriptu. Oba skripty musia mat prava na spustenie a byt niekde v ceste $PATH (naprv. v /usr/local/sbin, inak ich volajte plnymi cestami).

Este uprava ACPI handleru (pravdepodobne v /etc/acpi/default.sh alebe niekde "pobliz"):
case "$1" in
    button/power) /usr/local/sbin/powerclick &
        ;;
    *) logger "ACPI event unhandled: $*"
        ;;
esac
       

Hodnocení: 100 %

        špatnédobré        

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

Komentáře

Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře. , Tisk

Vložit další komentář

7.2.2009 17:01 Jary | skóre: 30 | blog: Jary má blog | Dům
Rozbalit Rozbalit vše Re: Doubleclick na powerbutton II.
Odpovědět | Sbalit | Link | Blokovat | Admin

Doubleclick na power je prima nápad.

.sig virus 3.2_cz: Prosím, okopírujte tento text do vaší patičky. GitHub
7.2.2009 17:09 R
Rozbalit Rozbalit vše Re: Doubleclick na powerbutton II.
Odpovědět | Sbalit | Link | Blokovat | Admin
Dvojklik som riesil jednoducho, tiez dvoma skriptami -hlavny powerbtn.sh a pomocny powerbtn-delay.sh (ten obsahoval iba "sleep 10"). Hlavny skript zistil, ci bezi pomocny - ak nie, tak ho spustil, ak ano, tak vypol PC (ulohou bolo vypnutie PC na dve stlacenia, nie na jedno).
Josef Kufner avatar 8.2.2009 03:01 Josef Kufner | skóre: 70
Rozbalit Rozbalit vše Re: Doubleclick na powerbutton II.
Odpovědět | Sbalit | Link | Blokovat | Admin
Hehe. Tak tohle používám na stolním počítači už asi pět let. A začalo to kvůli tomu, že se mi pes otíral o vypínač, takže jsem si udělal vypínání na tripple-click :-D
Hello world ! Segmentation fault (core dumped)

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