Portál AbcLinuxu, 4. listopadu 2025 00:49
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. Skriptpowerclick:
#!/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
    
    
    
        Tiskni
            
                Sdílej:
                
                
                
                
                
                
            
    
Doubleclick na power je prima nápad.
            ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.