Freitag, 20. Juli 2012

Ubuntu 12.04 per crontab mit Meldung herunterfahren

Problem

Ubuntu per Crontab herunterzufahren ist ja kein Problem, etwas schwieriger wird es, wenn man Warnungen auf dem Desktop des angemeldeten Users haben möchte.

Vorarbeiten

Unter 
/etc/xdg/autostart
die Datei
 postlogin-xhost-root.desktop
anlegen. Diese Datei wird bei jedem Login ausgeführt. Folgenden Inhalt einfügen:
#!/usr/bin/env 
xdg-open 
[Desktop Entry] 
Encoding=UTF-8 
Name=Postlogin-xhost-root 
Comment=Zugriffsrecht für root auf Display 
Exec=/usr/bin/xhost +local:root 
Terminal=false 
Type=Application 
OnlyShowIn=GNOME;XFCE;KDE;Unity; 
NoDisplay=true
Jetzt darf der User root auf das Display des Users zugreifen.
Nun die Datei
/etc/crontab
bearbeiten und folgende Zeile ganz unten einfügen:
00 18    * * *   root   env DISPLAY=:0 /usr/bin/herunterfahren
Damit wird das weiter unten beschriebene Skript um 18:00 Uhr ausgeführt. Die Datei
/usr/bin/herunterfahren
anlegen und sie ausführbar machen:
 sudo chmod +x herunterfahren
Es gibt nun 2 Wege, Weg A blendet für 6 Sekunden (Timeout entgegen der man-Pages leider nicht einstellbar) Warnmeldungen ein, Weg B lässt dem User die Möglichkeit, das Herunterfahren abzubrechen.

Weg A:

  In die Datei /usr/bin/herunterfahren folgendes einfügen:

#!/bin/bash
notify-send -u critical -i /usr/share/icons/Humanity/status/48/dialog-warning.svg "ACHTUNG!" "Der Rechner schaltet sich in 2 min aus! Speichern Sie Ihre Daten jetzt!" &
sleep 60
notify-send -u critical -i /usr/share/icons/Humanity/status/48/dialog-warning.svg "ACHTUNG!" "Der Rechner schaltet sich in 1 min aus! Speichern Sie Ihre Daten jetzt!" &
sleep 60
notify-send -u critical -i /usr/share/icons/Humanity/status/48/dialog-warning.svg "ACHTUNG!" "Der Rechner schaltet sich JETZT aus!" &
sleep 15
shutdown -h now
exit 0

 Weg B:

In die Datei /usr/bin/herunterfahren folgendes einfügen:
#!/bin/bash
USERCOUNT=$(who | wc -l) 

if [ $USERCOUNT = "0" ]; then 
shutdown -h now; else
zenity --question --timeout=30 --text="Der Rechner wird in 30 Sekunden abgeschaltet. Ist das OK?" --title="PC-Abschaltung"; STATUS=$?
if [ $STATUS = "1" ]; then
echo "";
else
zenity --info --timeout=120 --text "Der Rechner wird in 2 Minuten oder mit einem Klick auf OK heruntergefahren. Bitte speichern Sie JETZT Ihre Arbeit!"; shutdown -h now 

fi
fi

Quellen (überarbeitet und Fehler behoben!):

Keine Kommentare: