Ubuntu HD VDR mittels SoftHDDevice und VDPAU/VDR
Installation VDR
Downloadverzeichnis vorbereiten
mkdir -p /data/installfiles/vdr
Installationsmedien herunterladen
cd /data/installfiles/vdr wget ftp://ftp.tvdr.de/vdr/vdr-2.2.0.tar.bz2
vdruser in die Gruppe video und audio aufnehmen
sudo adduser vdruser video sudo adduser vdruser audio
Danach müsst Ihr euch erneut am System anmelden damit die neue Gruppenzugehörigkeit für den vdruser angezogen wird. Alternativ einfach einen Neustart durchführen.
VDR entpacken, vorbereiten und installieren
cd /usr/local/src sudo tar -xjf /data/installfiles/vdr/vdr-2.2.0.tar.bz2 sudo ln -s vdr-2.2.0/ vdr
Shutdownskript erstellen und ablegen
sudo vi /usr/local/bin/vdrpoweroff.sh
#!/bin/bash sudo /sbin/poweroff
und anschließend das Skript ausführbar machen:
sudo chmod +x /usr/local/bin/vdrpoweroff.sh
Skripte/Module mit Root-Rechten und ohne Passwortaufforderung ausführen
Damit der Benutzer vdruser die benötigten Skripte/Module mit Root-Rechten und ohne Passwortaufforderung ausführen kann muss dies mittels visudo konfiguriert werden. Achtung! Die Einträge müssen untereinander und am Ende der Datei eingefügt werden.
sudo visudo
vdruser ALL=(ALL) NOPASSWD: /sbin/poweroff,/usr/local/bin/vdrpoweroff.sh
VDR Installation starten
cd /usr/local/src/vdr sudo make REMOTE=LIRC && sudo make install
Videoverzeichnis anpassen
In das Videoverzeichnis werden später die TV Aufnahmen vom VDR abgelegt. Da ich mich an den Standardpfad für das Videroverzeichnis des VDR halten möchte, mein vorhander Festplattenspeicher aber auf einer anderen Partition liegt, setzen wir einen Link.
mkdir -p /data/vdrrecords sudo rm -r /srv/vdr/video sudo ln -s /data/vdrrecords/ /srv/vdr/video
Somit werden die VDR Aufnahmen in das Standardverzeichnis /srv/vdr/video geschrieben, landen aber auf der Festplattenpartition mit dem dafür vorgesehen Speicherplatz.
VDR mittels runvdr starten
Um den VDR zu starten verwende ich das mittgelieferte runvdr Skript.
runvdr vorbereiten
sudo cp /usr/local/src/vdr/runvdr.template /usr/local/bin/runvdr
runvdr anpassen
Achtung! Die erste Zeile im Skript muss von #!/bin/sh nach #!/bin/bash angepasst werden.
sudo vi /usr/local/bin/runvdr
#!/bin/bash # runvdr: Loads the DVB driver and runs VDR # # If VDR exits abnormally, the driver will be reloaded # and VDR restarted. # # In order to actually use this script you need to implement # the functions DriverLoaded(), LoadDriver() and UnloadDriver() # and maybe adjust the VDRPRG and VDRCMD to your particular # requirements. # # Since this script loads the DVB driver, it must be started # as user 'root'. Add the option "-u username" to run VDR # under the given user name. # # Any command line parameters will be passed on to the # actual 'vdr' program. # # See the main source file 'vdr.c' for copyright information and # how to reach the author. # # $Id: runvdr.template 3.1 2015/02/05 10:28:53 kls Exp $ export LANG=de_DE.utf8 export LC_COLLATE=de_DE.utf8 export VDR_CHARSET_OVERRIDE=ISO-8859-9 VDRPRG="/usr/local/bin/vdr" VDROPTIONS="-w 0 -u vdruser -c /var/lib/vdr -s /usr/local/bin/vdrpoweroff.sh" # For other options see manpage vdr.1 VDRPLUGINS="" # You will need to select your output device plugin if you want # to use VDR to watch video. For instance, for a "Full Featured" # SD DVB card that would be # VDRPLUGINS="-P dvbsddevice" # For a "Full Featured" HD DVB card you could use # VDRPLUGINS="-P dvbhddevice" # There are also other output device plugins available, see # http://www.vdr-wiki.de/wiki/index.php/Plugins. VDRCMD="$VDRPRG $VDROPTIONS $VDRPLUGINS $*" KILL="/usr/bin/killall -q -TERM" # Detect whether the DVB driver is already loaded # and return 0 if it *is* loaded, 1 if not: DriverLoaded() { return 1 } # Load all DVB driver modules needed for your hardware: LoadDriver() { return 0 } # Unload all DVB driver modules loaded in LoadDriver(): UnloadDriver() { return 0 } # Load driver if it hasn't been loaded already: if ! DriverLoaded; then LoadDriver fi while (true) do eval "$VDRCMD" if test $? -eq 0 -o $? -eq 2; then exit; fi echo "`date` reloading DVB driver" $KILL $VDRPRG sleep 10 UnloadDriver LoadDriver echo "`date` restarting VDR" done
runvdr Skript ausführbar machen
sudo chmod +x /usr/local/bin/runvdr
Skripte/Module mit Root-Rechten und ohne Passwortaufforderung ausführen
Damit der Benutzer vdruser die benötigten Skripte/Module mit Root-Rechten und ohne Passwortaufforderung ausführen kann muss dies mittels visudo konfiguriert werden. Achtung! Die Einträge müssen untereinander und am Ende der Datei eingefügt werden.
sudo visudo
vdruser ALL=(ALL) NOPASSWD: /usr/local/bin/runvdr,/usr/local/bin/vdr,/usr/bin/killall
Optional: Tuner auf der TV Karte konfigurieren
Achtung! Falls nicht alle Tuner an der TV Karte angeschlossen bzw. benutzt werden, muss dies im VDR konfiguriert werden. Hier die VDR Parameter um einen der Tuner zu deaktivieren:
-D NUM, --device=NUM use only the given DVB device (NUM = 0, 1, 2...) there may be several -D options (default: all DVB devices will be used)
Das "runvdr" Skript könnte folgendermaßen erweitert werden wenn nur zwei der vier vorhandenen Tuner verwendet werden:
sudo vi /usr/local/bin/runvdr
VDROPTIONS="-w 0 -D0 -D1 -u vdruser -c /var/lib/vdr -s /usr/local/bin/vdrpoweroff.sh"
somit werden nur der Tuner 0 und Tuner 1 der TV-Karte verwendet.
Optional: remote.conf erstellen
Die Datei muss nicht manuell erstellt werden. Startet der VDR ohne diese Datei wird automatisch ein Anlernmenü am TV gestartet. Nach Konfiguration über das Anlernmenü wird automatisch eine remote.conf erzeugt.
sudo vi /var/lib/vdr/remote.conf
KBD.Up 00000000001B4F41 KBD.Down 00000000001B4F42 KBD.Menu 0000001B5B31397E #F8 KBD.Ok 000000000000000D #Enter KBD.Back 000000001B5B347E #Backspace KBD.Left 00000000001B4F44 KBD.Right 00000000001B4F43 KBD.Red 00000000001B4F50 #F1 KBD.Green 00000000001B4F51 #F2 KBD.Yellow 00000000001B4F52 #F3 KBD.Blue 00000000001B4F53 #F4 KBD.0 0000000000000030 KBD.1 0000000000000031 KBD.2 0000000000000032 KBD.3 0000000000000033 KBD.4 0000000000000034 KBD.5 0000000000000035 KBD.6 0000000000000036 KBD.7 0000000000000037 KBD.8 0000000000000038 KBD.9 0000000000000039 KBD.Power 0000001B5B32347E #F12 KBD.Volume+ 000000000000002B #+ KBD.Volume- 000000000000002D #- KBD.Mute 0000001B5B32307E #F9
remote.conf für IRTrans erweitern
Ihr könnt euch die remote.conf mittels VDR über das OSD-Anlernprogramm erstellen. Wenn Ihr euch die remote.conf manuell erstellen möchtet müssen die VDR-LIRC Kommandos mit den Tasten aus der obigen IRTrans Konfigurationsdatei zugeordnet werden. Achtung! Die Namen sind Case Sensitive.
sudo vi /var/lib/vdr/remote.conf
LIRC.Up up LIRC.Down down LIRC.Menu menu LIRC.Ok ok LIRC.Back exit LIRC.Left left LIRC.Right right LIRC.Red red LIRC.Green green LIRC.Yellow yellow LIRC.Blue blue LIRC.0 0 LIRC.1 1 LIRC.2 2 LIRC.3 3 LIRC.4 4 LIRC.5 5 LIRC.6 6 LIRC.7 7 LIRC.8 8 LIRC.9 9 LIRC.Info info LIRC.Play play LIRC.Pause pause LIRC.Stop stop LIRC.Record rec LIRC.FastFwd fwd LIRC.FastRew rew LIRC.Next skip LIRC.Prev replay LIRC.Power power LIRC.Channel+ ch+ LIRC.Channel- ch- LIRC.PrevChannel prev LIRC.Volume+ vol+ LIRC.Volume- vol- LIRC.Mute mute LIRC.Audio audio LIRC.Subtitles subtitle LIRC.Schedule guide LIRC.Channels channels LIRC.Timers timer LIRC.Recordings recordings LIRC.Setup setup LIRC.Commands commands LIRC.User1 user1 LIRC.User2 user2 LIRC.User3 user3 LIRC.User4 user4 LIRC.User5 user5 LIRC.User6 user6 LIRC.User7 user7 LIRC.User8 user8 LIRC.User9 user9
svdrphosts.conf anpassen
sudo vi /var/lib/vdr/svdrphosts.conf
# svdrphosts This file describes a number of host addresses that # are allowed to connect to the SVDRP port of the Video # Disk Recorder (VDR) running on this system. # Syntax: # # IP-Address[/Netmask] # 127.0.0.1 # always accept localhost #192.168.100.0/24 # any host on the local net #204.152.189.113 # a specific host #0.0.0.0/0 # any host on any net (USE THIS WITH CARE!) 192.168.0.0/24 # Euer Netzwerk
VDR auf non-root vdruser umstellen
sudo chown -R vdruser.vdruser /var/lib/vdr /var/cache/vdr
VDR auf Lauffähigkeit überprüfen
Achtung! Bisher kann noch kein TV Bild angezeigt werden da noch kein Ausgabedevice Plugin eingerichtet ist. Die ERROR Meldungen sind hier vorerst normal. Am besten Ihr öffnet zwei SSH Sessions, wie folgt, auf eurem VDR.
SSH Session 1
Hier wird das syslog geöffnet um die VDR Meldungen beim starten zu sehen:
tail -f /var/log/syslog
SSH Session 2
Hier wird der VDR manuell gestartet:
/usr/local/bin/runvdr
VDR Logausgabe
Jetzt könnt Ihr auf der "SSH Session 1" genau mitverfolgen was der VDR macht. Wenn der VDR ordnungsgemäß läuft sollte es so aussehen:
Jan 31 16:40:17 vdr vdr: [4320] VDR version 2.1.9 started Jan 31 16:40:17 vdr vdr: [4320] switched to user 'vdruser' Jan 31 16:40:17 vdr vdr: [4320] codeset is 'UTF-8' - known Jan 31 16:40:17 vdr vdr: [4320] found 28 locales in /usr/local/share/locale Jan 31 16:40:17 vdr vdr: [4320] creating directory /var/lib/vdr/themes Jan 31 16:40:17 vdr vdr: [4320] loading /var/lib/vdr/sources.conf Jan 31 16:40:17 vdr vdr: [4320] loading /var/lib/vdr/diseqc.conf Jan 31 16:40:17 vdr vdr: [4320] loading /var/lib/vdr/scr.conf Jan 31 16:40:17 vdr vdr: [4320] loading /var/lib/vdr/channels.conf Jan 31 16:40:17 vdr vdr: [4320] loading /var/lib/vdr/svdrphosts.conf Jan 31 16:40:17 vdr vdr: [4320] loading /var/lib/vdr/remote.conf Jan 31 16:40:17 vdr vdr: [4320] loading /var/lib/vdr/keymacros.conf Jan 31 16:40:17 vdr vdr: [4320] registered source parameters for 'A - ATSC' Jan 31 16:40:17 vdr vdr: [4320] registered source parameters for 'C - DVB-C' Jan 31 16:40:17 vdr vdr: [4320] registered source parameters for 'S - DVB-S' Jan 31 16:40:17 vdr vdr: [4320] registered source parameters for 'T - DVB-T' Jan 31 16:40:17 vdr vdr: [4322] video directory scanner thread started (pid=4320, tid=4322, prio=high) Jan 31 16:40:17 vdr vdr: [4323] epg data reader thread started (pid=4320, tid=4323, prio=high) Jan 31 16:40:17 vdr vdr: [4323] epg data reader thread ended (pid=4320, tid=4323) Jan 31 16:40:17 vdr vdr: [4321] video directory scanner thread started (pid=4320, tid=4321, prio=high) Jan 31 16:40:17 vdr vdr: [4320] probing /dev/dvb/adapter0/frontend0 Jan 31 16:40:17 vdr vdr: [4320] creating cDvbDevice Jan 31 16:40:17 vdr vdr: [4320] new device number 1 Jan 31 16:40:17 vdr vdr: [4320] DVB API version is 0x050A (VDR was built with 0x050A) Jan 31 16:40:17 vdr vdr: [4320] frontend 0/0 provides DVB-S,DVB-S2,DSS with QPSK ("STV090x Multistandard") Jan 31 16:40:17 vdr vdr: [4325] frontend 0/0 tuner thread started (pid=4320, tid=4325, prio=high) Jan 31 16:40:17 vdr vdr: [4320] cTimeMs: using monotonic clock (resolution is 1 ns) Jan 31 16:40:17 vdr vdr: [4320] probing /dev/dvb/adapter1/frontend0 Jan 31 16:40:17 vdr vdr: [4320] creating cDvbDevice Jan 31 16:40:17 vdr vdr: [4320] new device number 2 Jan 31 16:40:17 vdr vdr: [4326] device 1 section handler thread started (pid=4320, tid=4326, prio=low) Jan 31 16:40:17 vdr vdr: [4320] frontend 1/0 provides DVB-S,DVB-S2,DSS with QPSK ("STV090x Multistandard") Jan 31 16:40:17 vdr vdr: [4320] probing /dev/dvb/adapter2/frontend0 Jan 31 16:40:17 vdr vdr: [4320] creating cDvbDevice Jan 31 16:40:17 vdr vdr: [4320] new device number 3 Jan 31 16:40:17 vdr vdr: [4329] device 2 section handler thread started (pid=4320, tid=4329, prio=low) Jan 31 16:40:17 vdr vdr: [4328] frontend 1/0 tuner thread started (pid=4320, tid=4328, prio=high) Jan 31 16:40:17 vdr vdr: [4320] frontend 2/0 provides DVB-S,DVB-S2,DSS with QPSK ("STV090x Multistandard") Jan 31 16:40:17 vdr vdr: [4331] frontend 2/0 tuner thread started (pid=4320, tid=4331, prio=high) Jan 31 16:40:17 vdr vdr: [4320] probing /dev/dvb/adapter3/frontend0 Jan 31 16:40:17 vdr vdr: [4320] creating cDvbDevice Jan 31 16:40:17 vdr vdr: [4320] new device number 4 Jan 31 16:40:17 vdr vdr: [4332] device 3 section handler thread started (pid=4320, tid=4332, prio=low) Jan 31 16:40:17 vdr vdr: [4320] frontend 3/0 provides DVB-S,DVB-S2,DSS with QPSK ("STV090x Multistandard") Jan 31 16:40:17 vdr vdr: [4320] found 4 DVB devices Jan 31 16:40:17 vdr vdr: [4334] frontend 3/0 tuner thread started (pid=4320, tid=4334, prio=high) Jan 31 16:40:17 vdr vdr: [4320] setting primary device to 1 Jan 31 16:40:17 vdr vdr: [4320] device 1 has no MPEG decoder Jan 31 16:40:17 vdr vdr: [4320] assuming manual start of VDR Jan 31 16:40:17 vdr vdr: [4335] device 4 section handler thread started (pid=4320, tid=4335, prio=low) Jan 31 16:40:17 vdr vdr: [4320] SVDRP listening on port 6419 Jan 31 16:40:17 vdr vdr: [4320] setting current skin to "lcars" Jan 31 16:40:17 vdr vdr: [4320] loading /var/lib/vdr/themes/lcars-default.theme Jan 31 16:40:17 vdr vdr: [4320] remote control LIRC - keys known Jan 31 16:40:17 vdr vdr: [4320] remote control KBD - keys known Jan 31 16:40:17 vdr vdr: [4337] KBD remote control thread started (pid=4320, tid=4337, prio=high) Jan 31 16:40:17 vdr vdr: [4336] LIRC remote control thread started (pid=4320, tid=4336, prio=high) Jan 31 16:40:17 vdr vdr: [4320] OSD size changed to 720x480 @ 1 Jan 31 16:40:17 vdr vdr: [4320] ERROR: no OSD provider available - using dummy OSD! Jan 31 16:40:20 vdr vdr: [4322] video directory scanner thread ended (pid=4320, tid=4322) Jan 31 16:40:21 vdr vdr: [4321] video directory scanner thread ended (pid=4320, tid=4321)
Achtung! Ein TV Bild wird noch nicht angezeigt da noch kein VDR Ausgabedevice Plugin eingerichtet ist.