VDR und XBMC parallel laufen lassen
Post date: 20.04.2010 17:29:46
Vorraussetzung
VDR läuft mit dem Plugin xineliboutput
xineliboutput wird nur remote ausgeführt und nicht lokal
Linux Desktop (Fenstermanager) wie zum Beispiel GDM (Gnome) + automatische Anmeldung des Users (damit nicht der Loginscreen nicht kommt)
VDR Seite
Wie schon geschrieben, wird das xineliboutput plugin zu Anzeige verwendet. Wichtig hierbei ist, das es unabhängig vom VDR Prozess läuft also Remote (acuh auf der gleiche Maschine) und nicht lokal gestartet über das Plugin.
Wir benötigen dies, damit wir die Anzeige beenden können und anstelle dazu XMBC starten.
XBMC Seite
Hier ist nichts weiter zu tun, es muss nur sichergestellt werden, das die Fernbedienung erkannt wird und beim beenden des XBMC der Rechner nicht heruntergefahren wird, sondern einfach nur das Programm beendet wird
Script zum Wechseln des Prozesses
In der Grafischen Oberfläche einfach das hier angehängte Script (vdr-sxfe-starter.sh) automatisch mitstarten, sobald der Desktop startet.
#!/bin/bash
PIDFILE="/tmp/vdr-sxfe-starter.pid"
VDRSXFEPID=""
XBMCPID=""
# store pid
[ -n "$PIDFILE" ] && echo $$ > $PIDFILE
start_vdrsxfe() {
logger -s "Starting vdr-sxfe into background"
/usr/local/bin/vdr-sxfe --display=:0 --lirc=/dev/lircd --video=vdpau --audio=alsa:spdif --reconnect --aspect=\"16:9\" -f &
}
refresh_pids() {
VDRSXFEPID=`pidof vdr-sxfe`
XBMCPID=`pidof xbmc.bin`
echo "VDR-SXFE: $VDRSXFEPID"
echo "XBMC: $XBMCPID"
}
on_terminate() {
# cleanup
kill $VDRSXFEPID
exit 1
}
trap 'on_terminate' TERM
# start vdr-sxfe
start_vdrsxfe
sleep 20
while [ true ] ; do
# refresh pids
refresh_pids
# at least vdr-sxfe or xbmc must be running
if [ "$VDRSXFEPID" == "" ] && [ "$XBMCPID" == "" ] ; then
logger -s "VDR-SXFE nor XBMC is not running try to start it"
start_vdrsxfe
sleep 5
refresh_pids
# check if clients has startet
if [ "$VDRSXFEPID" == "" ] ; then
logger -s "VDR-SXFE break within 5 seconds, something is wrong i quit here"
on_terminate
fi
fi
# wait 5 seconds before next check
sleep 5
done
# usually not reached
exit 0
Das Script startet den vdr-sxfe client und prüft ob nicht der XBMC läuft. Ist dies der Fall pausiert das Script, ansonsten wird der vdr-sxfe client erneut gestartet.
Sollte der vdr-sxfe client innerhalb von 5 Sekunden neu starten, wird das ganze script abgebrochen da davon ausgegangen wird, das etwas anderes fehlgeschlagen ist.
Und wie wird der XBMC gestartet?
Hier benutzen wir die "commands.conf" vom VDR. Dort hinterlegen wir ein Startscript (switch_xbmc.sh), das den Client beendet und XBMC startet
#!/bin/bash
# switch to xbmc
VDRSXFEPID=`pidof vdr-sxfe`
if [ "$VDRSXFEPID" != "" ] ; then
# start xbmc
su -c "DISPLAY=:0 xbmc" vdr &
sleep 2
# terminate vdr
kill $VDRSXFEPID
fi
# other prozess take care of restarting vdr-sxfe
exit 0
Eintrag einfach in der oben genannten Commands.conf vom VDR Eintragen, damit wir im Menu zum XBMC wechseln können. Zurück kommen wir indem wir den XBMC beendet. Das im Hintergrund laufende obige Script starten den vdr-sxfe client automatisch neu.
Hinweis:
Die IR Fernbedienung sollte über die clients (also vd-sxfe und xbmc) laufen und im VDR selbst deaktiviert sein, damit beim bedienen nicht versehentlich der VDR mit bedient wird.
Der VDR Hauptprozess bleibt im Hintergrund aktiv. Das Heisst auch das weiter aufgenommen wird und alles andere weiter läuft. Lediglich die Anzeige wird gestoppt und wieder gestartet