neděle 15. listopadu 2009

Vlastní skript spouštěný při suspend / resume

Nejen Ubuntu 9.04, ale většina aktuálních linuxových distribucí, využívá pro obsluhu uspávání a probouzení počítače balík pm-utils. Možnosti tohoto nástroje vypíše příkaz man pm-actions zadaný do terminálu. Osobně jsem měl problém s tím, že se velmi často nedařilo uspat počítač kvůli programu gnome-do, který se uspání bránil. ...



Proto jsem si napsal skript (základ jsem tedy převzal z jiného suspend skriptu, proč to psát znovu), který neposlušný program odstaví a při probuzení opět rozběhne. Skripty pro sleep i hibernaci jsou uloženy v adresářích /etc/pm/sleep.d a /usr/lib/pm-utils/sleep.d, přičemž každý skript má standardně jméno začínající dvoumístnou číslicí a obsahuje kód jak pro uspání/hibernaci, tak pro  probuzení. Číslo v názvu určuje pořadí, v jakém se skripty budou spouštět a nejnižší číslo určuje, že při usínání bude spouštěn jako první a při probuzení jako poslední. Vlastně se ve skutečnosti skripty spouští podle abecedy, čísla se používají pro lepší přehled. Běžné uživatelské skripty by měly začínat 00 až 49. Pokud jsou ve zmíněných adresářích soubory se stejným názvem, měl by mít přednost ten v /etc/pm/sleep.d. Skript si tedy uložím do adresáře /etc/pm/sleep.d, nazvu ho třeba 0000gdh.sh, aby se spouštěl jako první/poslední a nastavím mu spustitelný příznak. Každý skript je volán s jedním parametrem, který udává při jaké příležitosti je volán a má hodnoty hibernate, suspend, thaw a resume. Log se ukládá do /var/log/pm-suspend.log

0000gdh.sh
#!/bin/sh

suspend_nm()
{
    killall -s STOP gnome-do
}

resume_nm()
{
    sleep 8
    killall -s CONT gnome-do
    aplay /usr/share/sounds/voice/voice-all-systems-operational-remix.wav
}

case "$1" in
   suspend)
       suspend_nm
       ;;
   resume)
       resume_nm
       ;;
esac

Skript obsahuje dvě funkce, které definují co dělat při sleep/resume a rozhodovací program, který je volá. Stačí si tedy mezi složené závorky dopsat, co je potřeba. Já kromě zastavení a spuštění gnome-do, přidal ještě přehrání zvukového efektu. Tento skript bude spouštěn s právy roota, takže pozor, co děláte. Nelze takto jednoduše spouštět uživatelské grafické programy a při uspávání končí nezdarem pokusy o zastavení programů vyluzujících zvuk, jako třeba Rhythmbox, nebo MeTV.
Hrající Rhythmbox v základu brání uspání počítače a systém jen vypíše, že není možné počítač uspat. Toto je možné pomocí gconf-editoru vypnout, ale pak se uspání stejně nepovede a skončí nezdarem. Samozřejmě je tu možnost napsat si krátký skript, který budeme spouštět třeba klávesovou zkratkou dříve, než zavoláme vlastní Suspend (třeba pomocí D-Bus) a ošetřit v něm všechny běžně používané problémové aplikace, ale to neřeší problém, pokud suspend volají jiné aplikace přímo.

Odkazy:
http://wiki.debian.org/Suspend
https://wiki.archlinux.org/index.php/Pm-utils#Creating_your_own_hooks

Žádné komentáře:

Okomentovat

Zkuste prosím při komentováni používat místo volby Anonymní volbu Název/adresa URL, kde vyplníte nějakou přezdívku, adresu zadávat nemusíte. Vědět, které příspěvky jsou od jednoho člověka, je fajn. Díky.

Pokud by se vám náhodou odeslaný komentář na stránce nezobrazil, vytáhnu ho z koše hned jak si toho všimnu. I Google spam filter se občas sekne.