Portál AbcLinuxu, 20. května 2025 20:55
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 & ;; esacPrvy 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.