Portál AbcLinuxu, 30. dubna 2025 11:20
Nedávno mě napadla zajímavá myšlenka - pokud nemám na svém desktopu speciální tlačítko na uspání (suspend-to-disk), proč k tomuto účelu nepoužít klasické tlačítko Power? Jedno kliknutí by počítač jen uspalo, kdežto dvojklik by počítač rovnou vypnul. Tohle řešení mě nadchlo a co víc, ukázalo se, že zrealizovat ho není nic těžkého
Jediné co potřebujete je acpid daemon. Ten je součástí snad každé distribuce. Dále budete potřebovat změnit konfigurační soubor /etc/acpi/events/anything (nebo jiný konfigurační soubor v tomto adresáři, může jich být klidně více rozdělené na různé druhy ACPI událostí, to záleží na distribuci), a to sice tak, aby provedená akce byla vykonávána na pozadí (tedy je za příkaz nutno přidat znak &). Můj vypadá po příslušné změně takto:
event=.* action=/etc/acpi/handler.sh %e &
Tato změna je nutná, protože acpid daemon jinak po odchycení události čeká až na dokončení příslušné akce, než začne zpracovávat další událost (dvojklik by tedy nešlo nijak zaregistrovat). Následně zeditujeme samotný soubor /etc/acpi/handler.sh (či jeho ekvivalent ve vaší distribuci) a do sekce odchytávající signál PWRF vložíme tento kód:
pwrbtn_pressed=/tmp/acpid_powerbutton_pressed if [ ! -f "$pwrbtn_pressed" ]; then logger "PowerButton pressed: PWRF" touch "$pwrbtn_pressed" sleep 2 if [ -f "$pwrbtn_pressed" ]; then logger "Time for second PowerButton press exceeded" rm "$pwrbtn_pressed" ## For suspend-to-disk with suspend2 hibernate ## For suspend-to-disk with standard swsusp # echo "disk" > /sys/power/state fi else logger "PowerButton pressed (for the second time): PWRF" rm "$pwrbtn_pressed" ## Standard shutdown # shutdown -h now ## Graceful shutdown for KDE users dcop --all-users --all-sessions ksmserver ksmserver logout 0 2 0 fi
Řešení je to jednoduché, ale funguje naprosto výborně (alespoň tedy pro mě). Když jsem hledal něco podobného na netu, nic jsem nenašel, to snad ještě myšlenka dvojkliku na Power button nikoho předtím nenapadla? Tomu se mi nechce věřit, spíš jsem možná jen špatně hledal
Jinak pokud by měl někdo zájem, mohl bych tenhle "scriptlet" (či jak to nazvat) rozšířit, aby byl ještě víc flexibilní (např. reakce na libovolný počet kliknutí, třeba graceful softwarový reset po trojkliku na Power button, i když to už je asi zbytečně překombinované ).
Tiskni
Sdílej:
inkrimovaná sekce
case "$1" in button/power) #echo "PowerButton pressed!">/dev/tty5 case "$2" in PWRF) ## sem doplň kód z blogu ## a nezapomeň za poslední fi dát ;; *) logger "ACPI action undefined: $2" ;; esac ;;
btw mám malinkej problém. na suspend používám vlastní skript, kterej mi, na rozdíl od hibernate nebo prostýho echo -n "[standby|mem|disk]" > /sys/power/state
, funguje :) bohužel, když se spustí na pozadí, tak se mi počítač už neprobere :( nenapadá někoho jak spojit obě věci dohromady, tj. „doubleclick“ na power tlačítko a zároveň zajistit, aby se ten můj skript nespouštěl na pozadí?
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.