Sleep Timer
Da mir die in MythTV oder XBMC/Kodi integrierten Lösungen einer Sleep Funktion nie wirklich zusagten, stelle ich euch hier meinen eigenen Sleep Timer vor.
Dieses Skript lässt sich mittels irexec einer freien Taste der Fernbedienung zuweisen.
Es funktioniert exakt so, wie man es von klassischen Sleep Timern (z.B. in TVs) gewohnt ist:
- Einmaliges Betätigen der Sleep-Taste aktiviert den Timer und setzt ihn auf den kleinsten konfigurierten Wert (15 Minuten)
- Mehrmaliges Betätigen der Sleep-Taste erhöht den Timer bis zum nächsthöheren Wert
- Ist der Maximalwert erreicht, wird bei nochmaligem Betätigen der Sleep-Taste der Timer wieder deaktiviert
- Drückt man einige Minuten nach Aktivieren des Sleep Timers einmalig die Sleep Taste, so wird lediglich die Restzeit in Minuten angezeigt
- Nochmaliges Drücken innerhalb der nächsten Minute erhöht den Timer wieder bis zum nächsthöheren Wert
- Beträgt die Restzeit bis zum Herunterfahren nur noch zwei Minuten, wird kurz der Hinweis „Sleep in 2 Minuten“ angezeigt
- Während der letzten verbliebenen Minute wird die Restzeit sekundengenau als Countdown eingeblendet
Dieses Skript nutzt unter anderem die in MythTV oder Kodi verwendeten APIs für die Bildschirmausgabe („mythutil“ für MythTV bzw. JSON-RPC für Kodi), so dass es sich automatisch dem verwendeten Design anpasst und dadurch sehr homogen wirkt.
Unter Kodi wird außerdem ein JSON-RPC Befehl zum Herunterfahren genutzt, so dass auch Kodi sauber beendet wird, anstatt mit einem SIGKILL abgeschossen zu werden.
Bei Verwendung des auch von diesem Skript unterstützten Befehls „osd_cat“ ist theoretisch ein universeller Einsatz in allen anderen Desktop-Umgebungen oder HTPC-Systemen möglich, da hier über das „X Window System“ einfach ein Text-Overlay erfolgt und sich über alle anderen Grafiken legt. Dabei sieht es auch tatsächlich so aus, wie der klassische Sleep Timers eines Fernsehers, da es als Text am oberen Bildschirmrand ausgegeben wird.
Anzeige mittels „osd_cat“
Solltet ihr MythTV oder Kodi verwenden, könnt ihr diesen Absatz überspringen, da wir hier die eingebauten UI Funktionen nutzen können.
Für die Anzeige mittels „osd_cat“ ist es erforderlich, zuvor die XOSD Library zu installieren.
In Gentoo muss dazu folgender emerge ausgeführt werden:
emerge -av x11-libs/xosd
…oder unter Ubuntu:
sudo apt-get install xosd-bin
Unter Gentoo müssen noch einige Schriftarten installiert werden (nur für osd_cat benötigt):
emerge -av media-fonts/font-adobe-75dpi media-fonts/font-adobe-100dpi
An einem Mythbuntu Client muss zusätzlich zu den Schriftarten der „X Font Server“ (XFS) installiert werden:
sudo apt-get install xfs xfstt t1-xfree86-nonfree ttf-xfree86-nonfree xfonts-75dpi xfonts-100dpi
Nun muss nur noch im Skript unten die Variable „msg_cmd“ auf „osd_cat“ geändert werden.
MythTV / Kodi
Da MythTV und Kodi die entsprechenden Anzeigebibliotheken an Bord haben, muss nichts weiter installiert werden.
Im Skript muss also lediglich die Variable „msg_cmd“ auf „mythutil“ bzw. „xbmc-json“ geändert werden.
Unter Kodi empfiehlt es sich außerdem, den internen Shutdown-Befehl zu nutzen. Hierfür muss lediglich die Variable „shutdown_cmd“ auf „xbmc-json“ gesetzt werden.
Das Sleep Timer Skript
Hier jetzt ohne weitere Umwege das Sleep Timer Skript:
nano -w /usr/local/bin/osd-sleep
Einbinden in irexec
Um dieses Script mit irexec anzusteuern, muss es in der lircrc konfiguriert werden (in diesem Beispiel auf die rote Farbtatste):
nano -w ~/.lircrc
…oder unter Ubuntu:
nano -w ~/.lirc/irexec
# Sleep Timer begin prog = irexec button = KEY_RED config = /usr/local/bin/osd-sleeptimer & end
Herunterfahren
Unter Kodi kann dieser Absatz übersprungen werden, da hier die JSON-RPC Variante zum Herunterfahren genutzt wird (siehe oben).
Damit man als User das System ohne root Kennwort mittels „shutdown“ herunterfahren kann, hat man zwei Möglichkeiten:
Bei Desktop- oder HTPC-Systemen mit nur einem Benutzer, kann man z.B. das SUID Bit für „/sbin/shutdown“ setzen, um allen eingerichteten Benutzern das Recht hierauf zu geben:
chmod 4755 /sbin/shutdown
Sollte hingegen eine eingeschränktere Rechtevergabe notwendig sein, empfiehlt sich die Konfiguration von sudo mittels visudo:
visudo
Hier folgende Zeile hinzufügen:
%shutdown ALL = NOPASSWD: /sbin/shutdown
Nun nur noch die Gruppe „shutdown“ erstellen:
groupadd shutdown
…und euren User dieser Gruppe hinzufügen:
useradd -G shutdown username
Bei der ersten Variante muss die Variable „shutdown_cmd“ ganz oben im osd-sleep Skript zu „shutdown“ abgeändert werden, bei der zweiten zu „sudo_shutdown“.