Portál AbcLinuxu, 30. dubna 2025 11:20

Double click na Power button

11.5.2006 03:38 | Přečteno: 2129× | Linux | poslední úprava: 11.5.2006 13:12

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é :-)).

       

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 (1) ?Zašle upozornění na váš email při vložení nového komentáře. , Tisk

Vložit další komentář

11.5.2006 11:07 Petr M. | skóre: 7 | blog: blogcek
Rozbalit Rozbalit vše Re: Double click na Power button
Odpovědět | Sbalit | Link | Blokovat | Admin
Tohle jsem dlooouho hledal.. Díky MOC !!!
11.5.2006 11:10 alium | skóre: 38 | blog: Category 1100
Rozbalit Rozbalit vše Re: Double click na Power button
Odpovědět | Sbalit | Link | Blokovat | Admin
Skvělé... Díky.
11.5.2006 14:14 pholie | skóre: 4 | Košice
Rozbalit Rozbalit vše Re: Double click na Power button
Odpovědět | Sbalit | Link | Blokovat | Admin
Jo, celkom pekne. Pekny napad je aj restart po dvojkliku :)
11.5.2006 17:25 Petr M. | skóre: 7 | blog: blogcek
Rozbalit Rozbalit vše Re: Double click na Power button
Odpovědět | Sbalit | Link | Blokovat | Admin
Mohl by jsi sem dat ten handler.sh ? Predpokladam ze mas taky Archlinux....
herne the hunter avatar 11.5.2006 20:58 herne the hunter | skóre: 10 | tor lara
Rozbalit Rozbalit vše Re: Double click na Power button
myslím, že autor to vysvětlil docela jasně, ale když ti to pomůže … doufám, že mě za to nikdo neukamenuje když to sem postnu ;)

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í?

i am herne the hunter and you are a leaf driven by the wind.
12.5.2006 09:09 Petr M. | skóre: 7 | blog: blogcek
Rozbalit Rozbalit vše Re: Double click na Power button
díky za upřesnění, ale i tak se mi namísto vypnutí počítače 2x spustí hibernate.. Nevíte co s tím ?
Mikos avatar 11.5.2006 22:36 Mikos | skóre: 34 | blog: Jaderný blog | Praha
Rozbalit Rozbalit vše Re: Double click na Power button
Odpovědět | Sbalit | Link | Blokovat | Admin
Počkej, nějak nechápu proč by ti neměl fungovat když se spouští na pozadí? Nějak nevidim rozdíl v tom když by ho acpid daemon spustil na pozadí nebo ne, v obou případech není spouštěn z Xek v kterých předpokládam pracuješ, tak jaký je mezi tím z hlediska toho skriptu rozdíl?

IMHO nejlepší by bylo přijít na to co to způsobuje a opravit si ten skript.

Jinak ale acpid daemon nedělá nic jiného než že čte soubor /proc/acpi/event v kterém se ty eventy objevují. Takže pokud bys chtěl, můžeš se na acpid uplně vykašlat a řešit si to po svém v nějakém skriptu-daemonu který bude číst obsah toho souboru /proc/acpi/event. Taková kompletní náhrada za acpid daemon je otázka jen pár řádek v bashi nebo Pythonu ;-)
CETERUM CENSEO DRM ESSE DELENDAM Ostatně soudím, že DRM musí být zničeno!
Mikos avatar 11.5.2006 22:37 Mikos | skóre: 34 | blog: Jaderný blog | Praha
Rozbalit Rozbalit vše Re: Double click na Power button
Eh, vedle :-) Byla to samozřejmě reakce na tu větu "když se spustí na pozadí, tak se mi počítač už neprobere".
CETERUM CENSEO DRM ESSE DELENDAM Ostatně soudím, že DRM musí být zničeno!
12.5.2006 11:42 Michal Čihař | skóre: 61 | blog: Bláboly | Praha
Rozbalit Rozbalit vše Re: Double click na Power button
Odpovědět | Sbalit | Link | Blokovat | Admin
No už nějaký ten pátek existuje twice2down, který dělá to samé :-).
Weblate - překládání přes web | Gammu SMSD - posílání SMS | Blog
Mikos avatar 15.5.2006 01:27 Mikos | skóre: 34 | blog: Jaderný blog | Praha
Rozbalit Rozbalit vše Re: Double click na Power button
Díky za info ;-) Já googlil před tím než jsem se rozhodl vymyslet vlastní řešení myslím opravdu důkladně, ale na tyhle stránky (ani žádné jiné, které by to řešili) jsem bohužel nenarazil.
CETERUM CENSEO DRM ESSE DELENDAM Ostatně soudím, že DRM musí být zničeno!

Založit nové vláknoNahoru

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