VDR mit XBMC unter Debian-Linux

Diese Seite beschreibt den Aufbau meiner Linux-Multimedia-Box mit VDR (Video Disc Recorder) und XBMC. Das Gerät dient in erster Linie als DVB-Empfänger und Multimedia-Zentrale zum Abspielen von Audio- und Video-Dateien.

Inhalt

Hardware
   Gehäuse, Display und Fernbedienung
   DVB-T-Empfang
   Motherboard und sonstige Hardware
Software-Übersicht
Debian-Linux
   VDR, XBMC, X11 usw.
   Aufräumen
   Video: X11
   Audio: Alsa
DVB-Device
Infrarot-Fernsteuerung und VFD-Display
VDR-Plugins
   vdr-plugin-xineliboutput
VDR einrichten
   Bedienung
   Kanäle programmieren
   VDR-Ausgabe
XBMC starten
System Couch-Potato-tauglich machen
   Frontend automatisch starten und zwischen VDR und XBMC wechslen
   Rechner per Fernbedienung hochfahren
   Rechner automatisch hochfahren lassen
Bekannte Probleme
Anhang
   Konfigurationsdateien
   Alte Versionen dieser Beschreibung
   Links

Hardware

Da ich keine Streaming-Lösung sondern ein Standalone-Gerät verwenden möchte, muss die Hardware Wohnzimmer-tauglich sein, also schick, leise und per Fernbedienung steuerbar.
Für die Video-Ausgabe verwende ich einen PC-LCD-Monitor (mit DVI), meine Kiste hat also keine Full-Featured-Karte und keinen TV-Ausgang. Ansonsten das Übliche: Ethernet, USB, Maus, Tastatur, analoger Audio-Ausgang, CD/DVD-Laufwerk.

Gehäuse, Display und Fernbedienung

Als HTPC-Gehäuse verwende ich schon seit Jahren ein Dign HTPC HV5 von Uneed. Uneed heißt mittlerweile Origen AE, das Gehäuse H5 statt HV5, an den Eigenschaften scheint sich aber nichts Wesentliches geändert zu haben.

Gehäuse Das voluminöse Aluminium-Case im Standard-ATX-Format bietet Platz für maximal sieben PCI-Karten, zwei 3,5''-Festplatten und ein 5 1/4''-Laufwerk. In der Front sitzt bei mir ein (optional erhältliches) Modul mit VFD-Display und IR-Empfänger, dazu gehört eine Infrarot-Fernbedienung. Das Modul wird an die internen USB-Steckerleiste des Motherboards angeschlossen.

Fernbedienung Unter dem (transparenten) Start-Knopf der Fernbedienung klebt normalerweise ein kleines Windows-Logo. Als VDR-Nutzer konnte ich dies natürlich nicht so lassen und habe den Aufkleber gegen ein Linux-Logo ausgetauscht.

Auf der Rückseite des Gehäuses befindet sich ein 6 x 6 cm-Gehäuselüfter, ein zweiter kann nachgerüstet werden. Leider hat das Case keinerlei Lüftungsschlitze, was die Durchlüftung nicht ganz einfach macht. Ich habe das Problem so gelöst, dass ich die Abdeckbleche der drei freien PCI-Slots hinten links entfernt habe. Die Luft strömt so durch diese Öffnungen ins Gehäuse, muss um die DVB-Karten herum und verläßt das Gehäuse dann, vorbei an der CPU, wieder durch die Gehäuselüfter bzw. das Netzteil.

DVB-T-Empfang

Für den DVB-T-Empfang sorgt eine Avermedia AVerTV DVB-T-771, eine PCI-Karte mit halber Bauhöhe. Sie besitzt einen HF-Antennenanschluss sowie einen S-Video-Eingang. Sie empfängt sowohl DVB-T-Kanäle in normaler SD-Auflösung als auch, sofern verfügbar, HD-Kanäle.
Diese Budget-Karte wird ohne Patches von neueren Versionen des 2.6er-Kernels unterstützt. Ich verwende die Karte nur für DVB-T, ob und wie der S-Video-Eingang (unter Linux) verwendbar ist weiß ich nicht.

Motherboard und sonstige Hardware

Als CPU läuft ein Intel Core i3-3220 mit 3,3 GHz auf dem Motherboard GA-H77-DS3H von Gigabyte mit 8 GB RAM.

Fürs Betriebsystem verwende ich eine SSD OCZ Agility 3 mit 120 GB, für die Daten zwei Festplatten vom Typ Western Digital Green WD30EZRX mit jeweils 3 TB.

Da Origen AE wegen der optimalen Positionierung des Auswurf-Knopfes ein CD/DVD-Laufwerk von LG empfiehlt, steckt in meinem Gerät ein schwarzes LG GH24NS. Der saubere Einbau des Laufwerkes ins Gehäuse erfordert zwar etwas Geduld. Ist das Laufwerk aber erst mal an seiner genauen Position paßt es perfekt.

Als DVB-T-Antenne verwende ich eine sehr einfache Selbstbau-Antenne, wie sie z.B. unter vdr-wiki.de beschrieben ist. Für den Empfang im Stadtgebiet München reicht diese allemal aus.
Zum Anschluß von Maus, Tastatur und anderen USB-Geräten steht unsichtbar nahe dem Gehäuse im Schrank verstaut noch ein kleiner USB-Hub. Maus und Tastatur benötigt man ohnehin nur sporadisch, über den Hub kann man die Teile ohne Verrenkungen bequem anstecken.

Die Hardware im Überblick:

Software-Übersicht

Für Live-TV bin ich auch nach Jahren noch überzeugt von VDR.

Für die Medienwiedergabe hatte ich lange Zeit den Medienplayer des Xineliboutput-Plugins in Verwendung. Der Medienplayer spielt Audio-, Video- und Bilddateien anstandslos ab, mehr aber leider nicht; eine komfortable Medienverwaltung, Diashow, das Abspielen von Inhalten aus dem Internet o.ä. fehlen. Hier gibt es mittlerweile eine wesentlich bessere Alternative: XBMC.

Die einfachste Möglichkeit, um VDR und XBMC gemeinsam zu genießen ist wahrscheinlich die Installation von YaVDR. YaVDR, eine auf Ubuntu aufbauende Linux-Distribution, bringt die neuesten VDR- und XBMC-Pakete sowie diverse Tools zur einfachen Installation und Konfiguration von VDR und XBMC mit. Allerdings besteht YaVDR (meines Wissens) auf VDPAU für die Video-Ausgabe, was eine passende Grafikkarte voraussetzt.

Obwohl YaVDR/Ubuntu durchaus einige Vorteile bieten bin ich Debian als Linux-Distribution treu geblieben. Viele Funktionen aus YaVDR brauche ich einfach nicht. Außerdem möchte ich ein möglichst offenes, schlankes und transparentes System, welches (nur) das macht, was ich will. Hier vertraue ich Debian mehr als Ubuntu.

Nachteile von Debian sind die teils nicht aktuellen Versionen von VDR und XBMC und die etwas magere Auswahl an Plugins. Der Einsatz der Entwicklungsversion von Debian, Sid/Unstable, oder der etwas verzögerten, aber besser getesteten Testing-Version anstatt des Stable-Releases gleicht diese Nachteile teilweise aus. Zur Not lassen sich auch die Ubuntu/YaVDR-Pakete unter Debian bauen und installieren. Aktuell habe ich mich für Sid/Unstable als Basis für meinen VDR entschieden.

Für das Zusammenspiel von VDR mit XBMC verwende ich nicht das VNSI-Plugin. VNSI integriert den VDR als Live-TV-Backend in XBMC. Allerdings unterstützt das Plugin nicht alle Funktionen von VDR. Außerdem liegt der Fokus meiner Installation auf Live-TV, also auf VDR, nicht auf XBMC.

Die Bildausgabe von VDR und XBMC erfolgt unter X11. Dazu startet ein Init-Skript einen "nackten" X-Server mit Kwin als Composition Manager. Ein solcher wird benötigt, um im VDR ein hochauflösendes On Screen Display (HUD OSD) nutzen zu können. Angetestet hatte ich auch andere Composition Manager und die Optionen --hud=shape und --hud=opengl von vdr-sxfe, Kwin hat aber im Gegensatz zum ganzen Rest auf Anhieb das gemacht, was ich erwartet hatte.

VDR und XBMC laufen auf meinem System mehr oder weniger unabhängig voneinander. VDR läuft als Daemon permanent im Hintergrund. Für die Ausgabe des VDR-Bildes unter X11 wird der Remote-Client (Frontend) des Xineliboutput-Plugins, vdr-sxfe, lokal gestartet. Beim Umschalten auf XBMC wird (nur) vdr-sxfe gestoppt und XBMC gestartet, VDR läuft im Hintergrund weiter. XBMC wechselt beim Verlassen wieder zu vdr-sxfe.

Für die Infrarot-Fernsteuerung und die Ansteuerung des VFD-Displays stellt der Hersteller des Displays, IRTrans, eine eigene Software bereit (IRTrans Client/Server). Meine (schon länger zurückliegenden) Versuche, das Modul auch mit LIRC und LCDProc zu laufen zu bringen, waren nicht erfolgreich.

Diese Beschreibung umfasst nur die Grundfunktionalität meines Systems, keine sonstigen Plugins/Addons usw. Da sich Debian Sid täglich ändert muss man zudem davon ausgehen, dass die Installation nie 100%ig reproduzierbar ist.

Debian-Linux

Debian Sid/Unstable installiert man am einfachsten folgendermaßen:

Die Partitionierung meiner Platten schaut folgendermaßen aus:

################### SSD - 120 GB #################
/dev/sda1   50G GB  /                   ext4   Installation 1
/dev/sda5   50G GB  /media/sda5         ext4   Installation 2 (Test)
/dev/sda6   20 GB   -                   swap   Virtueller Speicher
################### HD  - 3 TB   #################
/dev/sdb1   Alles   /var/lib/data       ext4   Daten
################### HD  - 3 TB   #################
/dev/sdc1   Alles   /var/lib/data/Video ext4   Daten
Mit den zwei Root-Partitionen auf /dev/sda1 und /dev/sda5 habe ich die Möglichkeit, zwei getrennte Systeme zu installieren, was für Tests und zur Wiederherstellung einer zerschossenen Installation recht praktisch ist. Es ist allerdings ratsam, nur auf einer der beiden Partitionen einen Bootloader zu installieren, damit nichts durcheinander kommt. Auf Installation 2 wird dazu einfach GRUB mit apt-get purge grub-common entfernt. Nach einem Kernel-Update auf Installation 2 muss dann auf der ersten update-grub ausgeführt werden.

Alle Audio- und Video-Daten liegen auf /dev/sdb1 bzw. /dev/sdc1. Um ein paar GB Platz zu sparen macht es für diese Partition Sinn, sie mit der Option -m 1 zu formatieren bzw. im Installer den Wert für "Reservierte Blöcke" auf 1% zu setzen (siehe man mkfs.ext4).

Folgende Kommandos verhindern, dass beim Systemstart ein fsck ausgeführt wird:

vdrxbmc:# tune2fs -c 0 -i 0 /dev/sda1
vdrxbmc:# tune2fs -c 0 -i 0 /dev/sda5
vdrxbmc:# tune2fs -c 0 -i 0 /dev/sdb1
vdrxbmc:# tune2fs -c 0 -i 0 /dev/sdc1
Natürlich sollte man dann fsck -f /dev/sdXX gelegentlich manuell starten.

Als Paket-Quellen verwende ich die Standard-Repositories von Debian Sid. Nur das Paket libdvdcss2 kommt von http://www.videolan.org/. libdvdcss2 ist eine Bibliothek zur Wiedergabe von verschlüsselten DVDs. Details zur Technik und den rechtlichen Aspekten dieser Bibliothek findet man in der Wikipedia.

Hier die passende Datei /etc/apt/sources.list:

####### Debian Sid
deb http://ftp.de.debian.org/debian/       sid            main contrib non-free
#deb-src http://ftp.de.debian.org/debian/   sid            main contrib non-free

####### libdvdcss2
deb http://download.videolan.org/pub/debian/unstable/     /
#deb-src http://download.videolan.org/pub/debian/unstable/ /
Damit nur wirklich benötigte Pakete installiert werden kommt noch folgende Option in die Datei /etc/apt/apt.conf:
# Empfohlene Pakete standardmäßig nicht installieren
APT::Install-Recommends "false";
Die Kommandos
vdrxbmc:# wget -O - http://download.videolan.org/pub/debian/videolan-apt.asc | apt-key add -
vdrxbmc:# apt-get update
vdrxbmc:# apt-get dist-upgrade
vdrxbmc:# reboot
laden den Schlüssel zur Verifikation der Paket-Signaturen von videolan.org herunter und bringen Paket-Index und System auf den neuesten Software-Stand von Sid.

VDR, XBMC, X11 usw.

Es folgt die Installation von VDR mit Xineliboutput- und Teletext-Plugin, XBMC, X11 mit Kwin, Alsa sowie einigen praktischen Tools.
vdrxbmc:# apt-get install vdr vdr-plugin-xineliboutput vdr-plugin-osdteletext xineliboutput-sxfe
vdrxbmc:# apt-get install xbmc
vdrxbmc:# apt-get install xserver-xorg
vdrxbmc:# apt-get install kde-window-manager
vdrxbmc:# apt-get install alsa-utils
vdrxbmc:# apt-get install libdvdcss2
vdrxbmc:# apt-get install xterm vim rsync openssh-server sudo screen
vdrxbmc:# apt-get install unzip bzip2 hdparm hddtemp smartmontools
vdrxbmc:# apt-get purge vim-tiny
vdrxbmc:# reboot
Ein abschließender Neustart bootet das System mit dem neuesten Kernel.

Aufräumen

Da sich Debian Sid fast täglich ändert bleiben nach einem Update immer wieder alte Pakete zurück. apt-show-versions und deborphan helfen beim Auffinden solcher nicht mehr benötigten Pakete:
vdrxbmc:# apt-get install apt-show-versions deborphan
vdrxbmc:# apt-show-versions | grep -v uptodate$
vdrxbmc:# deborphan
vdrxbmc:# apt-get autoremove
vdrxbmc:# apt-get purge nicht mehr benötigte Pakete
Sollte das Paket lirc aus irgendeinem Grund installiert sein muss es ebenfalls gelöscht werden, weil das verbaute IR-Modul eine
eigene Software benötigt und nicht mit LIRC zusammenarbeitet.

Video: X11

Der X-Server benötigt auf meinem System keine Konfigurationsdatei /etc/X11/xorg.conf
. Bezüglich Hardware-Beschleunigung oder sonstige Optimierung habe ich mir keine Gedanken gemacht, das System läuft gut so wie es ist.

Auf einem Multimedia-Rechner wird eigentlich keine Desktop-Umgebung benötigt. Allerdings ist es für Tests manchmal ganz praktisch, auch lokal eine grafische Sitzung starten zu können. Über das ohnehin installierte Kwin läßt sich recht einfach manuell auf der Textkonsole eine rudimetäre X11-Oberfläche starten mit:

vdrxbmc:$ export DISPLAY=:0.0 ; X & kwin & sleep 5 ; xterm
Kwin mit xterm und glxgears Damit lassen sich nun aus dem Terminal-Fenster X11-Programme (z.B. vdr-sxfe) starten. Das Wechseln zur ersten Textkonsole bzw. der X11-Sitzung funktioniert wie üblich über Strg-Alt-F1 bzw. Strg-Alt-F7.

Audio: Alsa

Die Audio-Ausgabe erledigt
ALSA (Advanced Linux Sound Architecture). alsamixer hilft bei der Einstellung der gewünschten Lautstärke(n).
vdrxbmc:# alsamixer
vdrxbmc:# alsactl store
alsactl store speichert die eingestellten Werte in die Datei /var/lib/alsa/asound.state. Nach einem Neustart des Systems werden diese Einstellungen nun automatisch gesetzt.

DVB-Device

Bevor ein DVB-Empfang möglich ist, muss der Kernel die richtigen Module geladen haben. Ist dies der Fall gibt es pro DVB-Tuner ein entsprechendes Device unter /dev/dvb/:
vdrxbmc:~# ls -l /dev/dvb/
insgesamt 0
drwxr-xr-x 2 root root 120 Aug  9 21:03 adapter0
Der Kernel hat meine DVB-Karte ohne weiteres Zutun erkannt.

Falls mehrere DVB-Karten im System verbaut sind gibt es entsprechend viele Devices. bei der Zuordnung der Devices auf die Karten helfen die Meldungen in /var/log/syslog.

Infrarot-Fernsteuerung und VFD-Display

Für die Infrarot-Fernsteuerung und die Ansteuerung des VFD-Displays wird eine spezielle Software von IRTrans benötigt. Die aktuelle Version der IRTrans Client/Server-Software gibt es unter http://www.irtrans.de/de/download/. Heruntergeladen und installiert wird sie mit
vdrxbmc:# cd /tmp/
vdrxbmc:# wget http://www.irtrans.de/download/Server/Linux/irserver.tar.gz
vdrxbmc:# tar -xvzf irserver.tar.gz
vdrxbmc:# ./install.sh
unter /usr/local/irtrans/. Im Unterverzeichnis remotes/ befinden sich die Definitionen der Tasten-Codes von verschiedenen Fernsteuerungen. Mit
vdrxbmc:# cd /usr/local/irtrans/
vdrxbmc:# ./irserver64 -debug_code -loglevel 4 /dev/ttyUSB0
werden die von der IR-Fernsteuerung auf Tastendruck gesendeten Codes angezeigt, z.B.
7500c38011000000[0.0] ok mediacenter
[0.0]: S11101010000000000011110000010000011101 39
Die zweite Zeile entspricht einer nicht unter remotes/ aufgelisteten Taste. Die angezeigten Daten können zur Ergänzung von fehlenden Tastatur-Codes unter remotes/ verwendet werden. Für die bei mir mitgelieferte Fernbedienung paßt die Konfigurationsdatei remotes/mediacenter.rem. Einige noch fehlende Tasten-Einträge habe ich dort manuell nachgetragen. Die Zeile für den obigen unbekannten Code lautet z.B.
  [ast][T]0[D]S11101010000000000011110000010000011101
Alternativ können die Codes auch automatisch mit dem Kommando irclient64 in die Konfigurationsdatei eingetragen werden. Hier liegt meine Datei remotes/mediacenter.rem.

Der LIRC-kompatible Server wird mit

vdrxbmc:# ./irserver64 -daemon /dev/ttyUSB0
als Daemon gestartet. Mein Init-Skript /etc/init.d/irserver64 gibt's hier.

Die Kommandos

vdrxbmc:# chown root.root /etc/init.d/irserver64
vdrxbmc:# chmod 755 /etc/init.d/irserver64
vdrxbmc:# update-rc.d irserver64 defaults
machen das Skript startklar:
vdrxbmc:# /etc/init.d/irserver64 start
Mit dem Kommando
vdrxbmc:# /usr/local/irtrans/irclient64 127.0.0.1 Optionen
lassen sich weitere Funktionen des VFD-Modules steuern, insbesondere Text auf dem Display ausgeben oder die Willkommen-Meldung ändern. Die Dokumentation dazu finde ich ziemlich mager, hier hilft nur probieren.

Das Display nutze ich nicht (es zeigt nur Datum und Uhrzeit an), da es mir ein Rätsel ist, wie ich den VDR dazu bringen soll, das Display über die IRTrans-Programme anzusteuern.

VDR-Plugins

Der Schwerpunkt von VDR liegt zwar auf DVB. Über verschiedenste Plugins läßt er sich aber um sehr viele Funktionen erweitern. Eine Liste der (als Debian-Paket) verfügbaren Plugins zeigt das Kommando apt-get search vdr-plugin an. Installiert werden die Plugins wie gewohnt mit apt-get install Plugin-Name. Konfiguriert werden sie über das OSD von VDR - diese Einstellungen werden dann in /var/lib/vdr/setup.conf abgelegt - oder in den Dateien unter /etc/vdr/plugins/.

vdr-plugin-xineliboutput

Dieses Plugin wird wie bereits erwähnt für die Video-Ausgabe des VDRs verwendet. Es bringt nicht nur verschiedene Ausgabemöglichkeiten mit, sondern auch einen integrierten Multimedia-Player zur Wiedergabe von Filmen, DVDs, Musik und Bildern, sowohl von lokal gemounteten Quellen oder per Streaming aus dem Netz.

Zu Xineliboutput-Plugin gehören insgesamt sechs Debian-Binärpakete:

Über die Konfigurationsdatei des Plugins, /etc/vdr/plugins/plugin.xineliboutput.conf, wird neben einigen anderen Optionen festgelegt, welche Ausgabemöglichkeiten genutzt werden. Die Kommandos für die Tastatursteuerung werden in /var/lib/vdr/remote.conf abgelegt. Die Frontends haben ihrerseits eine eigene Konfigurationsdatei für die Xine-Lib, ~/.xine/config_xineliboutput.

VDR einrichten

Da ich nicht den Standardpfad /var/lib/video/ für die TV-Aufnahmen verwende muss das gewünschte Verzeichnis erst angelegt werden:
vdrxbmc:# mkdir /var/lib/data/Video/TV-Aufnahmen
vdrxbmc:# chown vdr.vdr /var/lib/data/Video/TV-Aufnahmen
In der Datei /etc/default/vdr werden einige Start-Parameter für den VDR angepaßt:
# VDR beim Booten starten
ENABLED=1
# VDR darf den Rechner herunterfahren
ENABLE_SHUTDOWN=1
# Verzeichnis für die TV-Aufnahmen
VIDEO_DIR=/var/lib/data/Video/TV-Aufnahmen
Die restlichen Konfigurationsdateien von VDR liegen unter /var/lib/vdr/ und /etc/vdr/. Einige grundlegende Einstellungen müssen manuell in die Dateien eingetragen werden, Großteils wird VDR allerdings bequem über das OSD konfiguriert. Dort kann man u.a. festlegen, dass der VDR die Systemzeit über das DVB-Zeitsignal setzt.

VDR-Logmeldungen stehen standardmäßig in /var/log/syslog.

Bedienung

Die Kommandos, auf die VDR reagieren soll, werden in der Datei /var/lib/vdr/remote.conf hinterlegt. Zeilen beginnend mit XKeySym gelten für die Tastatur-Steuerung, Einträge für die IR-Fernsteuerung starten mit LIRC.

Mit einem lokalen Frontend springt VDR automatisch ins Menü zum Lernen der Tasten-Codes, wenn er beim Starten ein Eingabegerät erkennt, für welches es noch keine Einträge in /var/lib/vdr/remote.conf gibt. In diesem Fall befüllt er die Datei automatisch. Da in meinem Fall kein lokales Frontend vorhanden ist habe ich sie manuell zusammengebaut.

Kanäle programmieren

Der VDR benötigt für den TV-Empfang prinzipiell nur eine Senderliste in der Datei channels.conf unter /var/lib/vdr/. Im einfachen Fall gibt es eine passende Vorlage im VDR-Wiki, z.B. für reines DVB-T.

Findet sich keine passende Sendertabelle für das eigene Empfangsgebiet lässt sich folgendermaßen eine erste Version erzeugen:

vdrxbmc:# apt-get install w-scan
vdrxbmc:# /etc/init.d/vdr stop
vdrxbmc:# echo ":DVB-T - w_scan"             >  /var/lib/vdr/channels.conf
vdrxbmc:# w_scan -f t -c DE                  >> /var/lib/vdr/channels.conf
vdrxbmc:# echo ":Von VDR erkannte Sender"    >> /var/lib/vdr/channels.conf
vdrxbmc:# /etc/init.d/vdr start
Das Ergebnis ist sicher nicht vollständig, aber eine gute Ausgangsbasis. VDR findet später eigenständig weitere Sender, und nach einigen manuellen Anpassungen (per OSD im VDR oder per Texteditor bei gestopptem VDR) entsteht nach und nach eine brauchbare Senderliste (siehe man 5 vdr).

VDR-Ausgabe

Für die lokale Ausgabe über X11 ist normalerweise das Paket xineliboutput-sxfe vorgesehen. Sobald VDR startet gibt xineliboutput-sxfe das Fernsehbild auf dem in /etc/vdr/plugins/plugin.xineliboutput.conf angegebenen Display aus. Wird allerdings das Ausgabefenster geschlossen beendet sich auch der VDR.

Im vorgesehenen Setup mit VDR und XBMC ist xineliboutput-sxfe bzw. vdr-sxfe aus zwei Gründen die bessere Wahl zur Ausgabe der VDR-Bildes:

Um letzteres zu erreichen wird der VDR in /etc/default/vdr für IR-Kommandos taub gestellt mit:
# LIRC/irserver64 ignorieren, weil über vdr-sxfe
LIRC=/dev/null
Tastaturkommandos kann VDR ohne Frontend ohnehin nicht entgegennehmen.

Gestartet wird der VDR anschließend über sein Init-Sktipt mit:

vdrxbmc:# /etc/init.d/vdr start
Da in unserem Fall jedoch noch kein lokales Ausgabegerät installiert ist (Full-Featured-TV-Karte bzw. Ausgabe-Plugin) läuft der VDR an dieser Stelle nur als Daemon im Hintegrund und nimmt auch keine Eingaben von Tastatur oder IR-Fernbedienung entgegen.

Erst das Kommando

vdrxbmc:# vdr-sxfe --lirc
zeigt zum ersten Mal das VDR-Bild in einem eigenen Fenster an und verbindet Tastatur und Fernbedienung mit dem VDR. Ohne Angabe der VDR-Server-Adresse verbindet sich vdr-sxfe dazu über die Loopback-Adresse 127.0.0.1 mit dem VDR-Daemon auf dem lokalen Rechner und gibt das Fernsehbild aus.

Falls VDR und vdr-sxfe auf unterschiedlichen Rechnern laufen, muss vdr-sxfe die Adresse des VDR-Servers mitgegeben werden mit vdr-sxfe "xvdr://Server-Adresse". Die Adresse des Rechners, auf dem vdr-sxfe läuft, muss dazu in der Datei /etc/vdr/plugins/xineliboutput/allowed_hosts.conf am Server freigeschaltet sein.

XBMC starten

XBMC wird einfach mit dem Kommando xbmc gestartet. vdr-sxfe sollte vorher gestoppt werden, damit nicht beide Porgramme die IR-Kommandos gleichzeitg befolgen.

Die IR-Fernbedienung hat XBMC ohne Zutun erkannt, ebenso nimmt es Kommandos per Tastatur entgegen.

Konfiguriert wird XBMC über die grafische Oberfläche; Einstellungen und Logdaten landen im Home-Verzeichnis, Ordner ~/.xbmc/. Für die Frontends wird allerdings gleich ein eigener User engerichtet, daher macht es hier keinen Sinn, sich länger mit der Einrichtung von XBMC aufzuhalten.

System Couch-Potato-tauglich machen

Nachdem nun alles soweit funktioniert, möchte man (und v.a. Frau) sich nicht jedesmal am System einloggen müssen und die Programme manuell starten. Das muss natürlich alles automatisch und möglichst schnell gehen. Dazu sind noch ein paar Ergänzungen nötig.

Zum automatischen Starten des VDR-Frontends vdr-sxfe und von XBMC wird ein eigener User namens frontrun mit gleichnamiger Gruppe eingerichtet und mit den benötigten Rechten versehen:

vdrxbmc:# adduser --group --system --uid 500 --gecos "Frontend user for xdr-sxfe and XBMC" frontrun
vdrxbmc:# usermod -G audio,video,cdrom frontrun

Frontend automatisch starten und zwischen VDR und XBMC wechslen

VDR startet bereits automatisch über das mitgelieferte Init-Skript /etc/init.d/vdr. Das Starten von X-Server, Kwin, vdr-sxfe sowie zum Wechseln zwischen vdr-sxfe und XBMC wird das Skript /etc/init.d/Xvdr-sxfe angelegt und aktiviert mit:
vdrxbmc:# chown root.root /etc/init.d/Xvdr-sxfe
vdrxbmc:# chmod 755 /etc/init.d/Xvdr-sxfe
vdrxbmc:# update-rc.d Xvdr-sxfe defaults
Das Skript kennt folgende Optionen: /etc/init.d/Xvdr-sxfe ist somit etwas mehr als ein "normales" Init-Skript und berücksichtigt auch einige Eigenheiten von XBMC und vdr-sxfe. Näheres dazu findet sich im Skript selbst.

Der X-Server und vdr-sxfe starten nach

vdrxbmc:# /etc/init.d/Xvdr-sxfe start
auf VT8/Display 1 (erreichbar mit Strg-Alt-F8). Damit kollidiert er nicht mit einem ggf. ebenfalls laufenden X-Display Manager, der standardmäßig auf VT7/Display 0 läuft (Strg-Alt-F7).

Wechseln von VDR zu XBMC...

Um vom VDR-Frontend zu XBMC zu wechseln wird das entsprechende Kommando in /etc/vdr/command-hooks/commands.custom.conf eingetragen, am besten an erster Stelle. Ausgeführt wird es dann im OSD unter "Befehle - Wechseln zu XBMC":
Wechseln zu XBMC : /usr/bin/sudo -u frontrun /etc/init.d/Xvdr-sxfe vdr2xbmc 2>&1 | logger -t "vdr: [$$] - Wechseln zu XBMC"
Damit das Ganze funktioniert muss die Konfiguration für sudo erweitert werden (/etc/sudoers.d/vdrOSDcommands):
# vdr darf folgende Kommandos als User frontrun ausfuehren
vdr ALL=(frontrun)NOPASSWD:/etc/init.d/Xvdr-sxfe
Um das Kommando alternativ auch über eine Taste an der Fernbedienung starten zu können kommt noch Folgendes in /etc/vdr/keymacros.conf:
# Wechseln zu XBMC
User4     commands 1
User4 steht für die in /var/lib/vdr/remote.conf definierte Taste (DVD Menu). Die 1 hinter commands bezeichnet das erste Kommando in /etc/vdr/command-hooks/commands.custom.conf, eine 2 das zweite usw.

...und zurück zu VDR

Von XBMC zurück zu VDR geht es über das Power-Symbol im Home Screen oder über die FB-Taste "Power". Dazu ist ein hässlicher Patch für die Datei /usr/share/xbmc/addons/skin.confluence/720p/DialogButtonMenu.xml des verwendeten XBMC-Skins nötig (zumindest habe ich keinen eleganteren Weg dafür gefunden). Der Patch ersetzt den Aufruf der Stopp-Funktion von XBMC durch den Aufruf von /home/frontrun/Xvdr-sxfe_xbmc2vdr.sh und kommentiert alle Ausschalt-Optionen bis auf "Verlassen" aus. Xvdr-sxfe_xbmc2vdr.sh gibt es nur deshalb, weil die Funktion XBMC.System.Exec keine Leerzeichen akzeptiert:
#!/bin/bash
# Since the function XBMC.System.Exec does not accept whitespaces we place this command here
#
# Do not modify this file manually, your changes will be overwritten by "/etc/init.d/Xvdr-sxfe start"
#
/etc/init.d/Xvdr-sxfe xbmc2vdr
Xvdr-sxfe_xbmc2vdr.sh wird von /etc/init.d/Xvdr-sxfe start automatisch angelegt.

Zusätzlich muss der Eintrag <power>power</power> unter <remote device="mediacenter"> in /usr/share/kodi/system/Lircmap.xml gelöscht werden.

Allerdings bleibt noch ein kleines Problem: Beim Drücken des Power-Knopfes der Fernbedienung schaltet der ACPI-Daemon den Rechner ohne Vorwarnung sofort aus. Dagegen hilft:

vdrxbmc:# apt-get purge acpid acpi-support-base
Update: Mit systemd beheben folgende Einträge in /etc/systemd/logind.conf dieses Problem:
HandlePowerKey=ignore
HandleSuspendKey=ignore
HandleHibernateKey=ignore
HandleLidSwitch=ignore

Rechner per Fernbedienung hochfahren

Zum Hochfahren des Rechners per Fernbedienung muss das VFD-Modul (bei laufendem irserver64) mit irclient64 programmiert werden:
vdrxbmc:# cd /usr/local/irtrans/
vdrxbmc:# ./irclient64 localhost


  1 - Send
  2 - Learn
  3 - Status

 99 - Exit

Select command 3

0 Device(s) Found:


99 - Exit

Select command 0
Device [0]:

Repeat Mask: o  o  o  o  o  o  o  x  x  o  o  o  o  o  o  o
             0  1  2  3  4  5  6  7  8  9  10 11 12 13 14 15

Device Mode Send             [20]: x
            IR               [21]: x
            SBUS             [22]: x
            IR RemoteCtrl    [23]: x
            SBUS RemoteCtrl  [24]: x
            RAW              [25]: o
            Fast Mode        [26]: o
            SBUS send Repeat [27]: x

PowerOn Remote               [40]: .04.30
PowerOn Command              [41]:

Cancel                     [88]
Save & Exit                [99]

Select command 40

Enter PowerOn Remote: mediacenter
Device [0]:

Repeat Mask: o  o  o  o  o  o  o  x  x  o  o  o  o  o  o  o
             0  1  2  3  4  5  6  7  8  9  10 11 12 13 14 15

Device Mode Send             [20]: x
            IR               [21]: x
            SBUS             [22]: x
            IR RemoteCtrl    [23]: x
            SBUS RemoteCtrl  [24]: x
            RAW              [25]: o
            Fast Mode        [26]: o
            SBUS send Repeat [27]: x

PowerOn Remote               [40]: mediacenter
PowerOn Command              [41]:

Cancel                     [88]
Save & Exit                [99]

Select command 41

Enter PowerOn Command: power
Device [0]:

Repeat Mask: o  o  o  o  o  o  o  x  x  o  o  o  o  o  o  o
             0  1  2  3  4  5  6  7  8  9  10 11 12 13 14 15

Device Mode Send             [20]: x
            IR               [21]: x
            SBUS             [22]: x
            IR RemoteCtrl    [23]: x
            SBUS RemoteCtrl  [24]: x
            RAW              [25]: o
            Fast Mode        [26]: o
            SBUS send Repeat [27]: x

PowerOn Remote               [40]: mediacenter
PowerOn Command              [41]: power

Cancel                     [88]
Save & Exit                [99]

Select command 99


  1 - Send
  2 - Learn
  3 - Status

 99 - Exit

Select command 99
mediacenter benennt die Datei remotes/mediacenter.rem mit den Fernbedienungs-Codes, power den Namen der Taste aus dieser Datei (siehe oben), über welche der Rechner eingeschalten werden soll.

Nach diesen Einstellungen kann der Rechner per Fernbedienung eingeschalten werden.

Rechner automatisch hochfahren lassen

Neuere Motherboards lassen sich per ACPI-Wakeup zu einer vorgegebenen Zeit einschalten. Damit der Rechner rechtzeitig vor dem Start eine TV-Aufnahme aufwacht gibt es ein kleines Skript, welches es noch nicht nach Debian geschafft hat und welches ich quick'n'dirty installiert habe mit:
vdrxbmc:# cd /var/cache/apt/archives/
vdrxbmc:# wget http://e-tobi.net/vdr-experimental/pool-sid/binary/addons/vdr-addon-acpiwakeup_0.0.11_all.deb
vdrxbmc:# dpkg --install vdr-addon-acpiwakeup_0.0.11_all.deb
Aktiviert wird das Skript in /etc/vdr/vdr-addon-acpiwakeup.conf mit dem Eintrag:
ACPI_ENABLED=yes

Bekannte Probleme

Leider aktiviert das Xineliboutput-Plugin beim Starten von VDR das TrueColor-OSD nur, wenn ein lokaler TrueColor-fähiger Client vorhanden ist. Daher bleibt mir die Nutzung eines TrueColor-Skins wie z.B. vdr-plugin-skinnopacity noch verwehrt (siehe hier).

Falls das VDR-Frontend vdr-sxfe oder XBMC abstürzen werden sie nicht automatisch neu gestartet.

Das VFD-Display ist nicht in Verwendung (es zeigt nur Datum und Uhrzeit an).

Anhang

Konfigurationsdateien

Im Archiv LinuxVDRconfig.tar.gz liegen die wichtigsten Konfigurationsdateien von meinem VDR-Rechner.

Alte Versionen dieser Beschreibung

Links




Letzte Änderung: 01.12.2015