Blog‎ > ‎

VDR und XBMC parallel laufen lassen

veröffentlicht um 20.04.2010, 10:29 von Renier Roth   [ aktualisiert: 20.04.2010, 10:55 ]

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



ċ
switch_xbmc.sh
(0k)
Renier Roth,
20.04.2010, 10:51
ċ
vdr-sxfe-starter.sh
(1k)
Renier Roth,
20.04.2010, 10:43
Comments