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