Aktuální pythonní verze uspávače pecí je na
sourceforge.net, informace vždy v tomto vlákně.
Původní obsah:
Napsal jsem na popud jednoho zdejšího dotazu malý skriptík na vypínání a uspávání počítače po nastavené době. Třeba to někomu bude k užitku, případně dá nějaké náměty na vylepšení, nebo mi řekne, že je to k ničemu a je tu hromada lepších řešení, kterých jsem si já nevšiml.
Pro správnou funkci skriptu je potřeba mít nainstalován balík libnotify-bin, tedy pokud nemáte, zadejte do
trminálu:
sudo apt-get install libnotify-bin
Skript je možno stáhnout
zde, uložte ho, kam uznáte za vhodné a nezapomeňte nastavit
spustitelný příznak. Pak stačí vytvořit
spouštěč do Panelu, na Plochu, či jinam, nebo si nastavíte
klávesovou zkratku.
Po spuštění zadáte počet minut do vypnutí a potvrdíte. Minutu před koncem odpočtu ještě budete pro jistotu upozorněni, abyste náhodou nebyli nemile překvapeni. Pokud se rozhodnete, že chcete odpočet zrušit, stačí skript spustit znovu. Informace o činnosti skriptu budete dostávat ve formě informačních bublin. Dále skript poslouchá na přepínače
--suspend a
--hibernate, které změní vypínání na uspávání do RAM, či hibernaci na disk. Minimální nastavitelný čas je 0 minut, vstup je limitovaný na 4 číslice a při špatném zadání budete upozorněni a znovu vyzváni k zadání času. Přednastavená hodnota 120 minut se dá ve skriptu jednoduše změnit na řádku
t=`zenity --entry --title 'Shutdown timer' --text 'Zadej čas do '"$mod"' PC v minutách' --entry-text=120`.
Testováno na Ubuntu 8.04, 9.04, 9.10, 10.04, Debian Squeeze.
#!/bin/bash
if PID=`pidof -x "$0"`; then
if echo "$PID" | grep -q '\ '; then
# máme více procesů, kill'em all!
notify-send --icon gnome-shutdown "Shutdown timer" "Odpočet zrušen!" &
killall `basename $0`
fi
else
echo "Nejsem schopen najít ani sám sebe, raději končím.."; exit 1
fi
if [ `dbus-send --system --print-reply --dest=org.freedesktop.Hal /org/freedesktop/Hal/devices/computer org.freedesktop.DBus.Introspectable.Introspect | grep -E "\"Hibernate\"|\"Shutdown\"|\"Suspend\"" | wc -l` == 3 ]
then
cmdp="dbus-send --system --print-reply --dest=org.freedesktop.Hal /org/freedesktop/Hal/devices/computer org.freedesktop.Hal.Device.SystemPowerManagement."; serv1=1
elif [ `dbus-send --system --print-reply --dest=org.freedesktop.UPower /org/freedesktop/UPower org.freedesktop.DBus.Introspectable.Introspect | grep -E "\"Hibernate\"|\"Suspend\"" | wc -l` == 2 ];then
cmdp="dbus-send --system --print-reply dest=org.freedesktop.UPower /org/freedesktop/UPower org.freedesktop.UPower."; serv2=1
fi
[ `dbus-send --system --print-reply --dest=org.freedesktop.ConsoleKit /org/freedesktop/ConsoleKit/Manager org.freedesktop.DBus.Introspectable.Introspect | grep "\"Stop\"" | wc -l` == 1 ] && serv3=1
no_service()
{
zenity --error --text "V systému není přítomna potřebná\n služba, ukončuji aplikaci"; exit 1
}
case $1 in
--suspend)
[[ ! "$serv1" && ! "$serv2" ]] && no_service
mod="uspání"
cmd="${cmdp}Suspend int32:0";;
--hibernate)
[[ ! "$serv1" && ! "$serv2" ]] && no_service
mod="hibernace"
cmd="${cmdp}Hibernate";;
*)
[[ ! "$serv1" && ! "$serv3" ]] && no_service
mod="vypnutí"
if [ $serv1 ]; then
cmd="${cmdp}Shutdown"
else
cmd="dbus-send --system --print-reply --dest=org.freedesktop.ConsoleKit /org/freedesktop/ConsoleKit/Manager org.freedesktop.ConsoleKit.Manager.Stop"
fi;;
esac
while :; do
time=`zenity --entry --title 'Shutdown timer' --text 'Zadej čas do '"$mod"' PC v minutách' --entry-text=120` || exit 1
echo "$time" | grep -Eq '^[0-9]{1,4}$' && break
notify-send --icon dialog-warning "Shutdown timer" "Špatné zadání!
povelená jsou pouze celá čísla
v rozsahu 0 - 9999" &
done
notify-send --icon gnome-shutdown "Shutdown timer" "$time minut do $mod počítače" &
for ((i=1;i<=$time;i++)); do
[[ $i == $(($time)) ]] && notify-send --icon dialog-warning "Shutdown timer" "1 minuta do $mod počítače!" &
sleep 60
done
eval "$cmd"
Update 26.5.2010 - Skript nyní detekuje dostupné služby power managementu a dá vědět, když potřebnou službu nenajde.