Autostart-plugin
Inhaltsverzeichnis
|
Beschreibung
Autor: Ulrich Eckhardt
Ermöglicht das automatische Starten von Plugins beim einlegen von Wechselmedien. Im Gegensatz zum mediad-Plugin ist man nicht auf vorkompilierte Plugins angewiesen, es lassen sich beliebige Plugins starten und ggf. Tastendrücke automatisch erzeugen.
Softwareanforderungen
- vdr >= 1.6
- libcdio >= 0.8.0
- libdvdread >= 4.1.0
- Dbus
- Devicekit-Disks oder besser UDisk
Installation
Das Plugin wird wie üblich installiert.
Konfiguration
Die Konfiguration des Plugins wird in der Datei $VDRCONFIG/conf/plugins/autostart/autostart.conf vorgenommen. Hier werden die Zuordnungen zwischen Medien und aufzurufenden Plugins konfiguriert.
Die autostart.conf ist ähnlich einer Windows ini Datei aufgebaut. Ein Abschnitt wird mit [Name] eingeleitet, darunter kommen Schlüssel/Werte Paare, getrennt durch ein =.
Der so genannte Media-Tester ist eine Instanz, die es ermöglicht nach bestimmten Medien zu suchen. Innerhalb eines Abschnittes muss der Media-Tester mittels einer "TYPE = tester" Zeile spezifiziert werden. Mittels des Schlüsselwortes KEY werden dann die Aktionen spezifiziert, die ausgeführt werden sollen sollen, wenn der Media-Tester ein entsprechendes Medium detektiert hat.
Schlüsselwörter für alle Media Tester.
Die folgenden zwei Schlüsselwörter müssen in jedem Abschnitt enthalten sein:
Schlüsselwort | Beschreibung | ||||||
---|---|---|---|---|---|---|---|
TYPE | Definiert die Instanz eines Media-Testers. Derzeit stehen folgende Media-Tester zur Verfügung:
| ||||||
KEY | Definiert das zu startende Plugin und die auszuführenden Tasten, wenn ein Medium eingelegt und erkannt wurde. Ein @ am Anfang des Namens kennzeichnet das zu startende Plugin. |
Die Zeile "keys = @externalplayer OK" bedeutet, starte Plugin externalplayer und sende die OK Taste.
Schlüsselwörter für den FILE-Media Tester
Keyword | Beschreibung |
---|---|
FILES | Datei-Endungen die der Media-Tester prüfen soll. |
LINKPATH | Generiert einen symbolischen Link vom automatisch gemounteten Medium zu einem fixen Verzeichnis. In der Sektion [MP3] zum Beispiel wird für einen USB-Stick, der z.B. automatisch nach /media/USB-Stick gemountet wird ein Link nach /video/mount/mp3 angelegt. |
GLOBAL Abschnitt
Hier gibt es das Schlüsselwort FILTERDEV. Hier sollte das root devices und alle devices eingetragen werden, die nicht automatisch geprüft werden. Wird FILTERDEV = AUTO eingetragen, so versucht das Plugin automatisch alle internen Platten anhand der /etc/fstab zu erkennen. Andere Devices, die auch nicht geprüft werden sollen, können hinter AUTO angehängt werden.
Beispiel für eine autostart.conf
Eine Audio-CD soll mit dem CD-Player Plugin abgespielt werden, eine Video-DVD via externalplayer-Plugin, ein USB-Stick oder Wechselplatte mit MP3-Files sollte mit dem Music Plugin abgespielt werden und bei Grafik-Dateien soll das Image Plugin verwendet werden.
; The global section contains definitions global to all detectors [GLOBAL] ; exclude the given devices from media detection, e.g. the root hard drives filterdev = sda sdb hda hdb [DVD] type = dvd ; DVD Media tester keys = @externalplayer OK [CD] type = cd ; CD Media tester keys = @cdplayer ; Start CD-Player plug-in [MP3] type = file ; File Media tester files = mp3 ; Suffix to match keys = @music YELLOW ; If a file ending with .mp3 is found, start music plug-in linkpath = /video/mount/mp3 [IMG] type = file ; File Media tester files = jpg gif bmp ; If a file ends with .jpg .gif or .bmp, start image plug-in keys = @image YELLOW DOWN RED RED linkpath = /video/mount/image
Beispielkonfiguration für das externalplayer-Plugin
Bei dieser Konfiguration gibt es nur einen Menüpunkt, entsprechend ist es ausreichend nur einen OK-Tastendruck zu simulieren.
# Externalplayer-plugin example configuration. { Command = "xine -L --stdctl -c /video/etc/xine.conf dvd://"; MenuEntry = "Xine DVD"; OutputMode = extern; InputMode = slave; BlockMenu = true; # This makes sense, because an invisible main menu would block all the keys. vdrKeyUp = specialKeyPageUp; # See below for a full list of "special keys." vdrKeyDown = specialKeyPageDown; vdrKeyLeft = specialKeyLeft; vdrKeyRight = specialKeyRight; vdrKeyOk = specialKeyReturn; vdrKeyBack = noKey; vdrKeyRed = noKey; vdrKeyGreen = "<"; vdrkeyyellow = ">"; .... }
Beispielkonfiguration für das music-Plugin
Die musicsources.conf sollte für obiges Beispiel in der ersten Zeile folgenden Eintrag haben:
/video/mount/mp3;USB-Stick;0;*.mp3/*.ogg/*.wav/*.MP3/*.OGG/*.WAV/*.m3u/*.M3U/*.pls/*.PLS
Beispielkonfiguration für das image-Plugin
Ein etwas komplexeres Beispiel für das Image-Plugin:
/video/images; Bilder;0; *.jpg *.jpeg *.png *.tif* *.bmp /video/mount/image; USB; 0; *.jpg *.jpeg *.png *.tif* *.bmp
Parameter
Parameter (kurz) | Parameter (lang) | Beschreibung |
---|---|---|
-c <directory> | --configdir=<directory> | Konfigurationsverzeichnis |
SVDRP Befehle
Die Medienerkennung kann mittels svdrpsend.pl plug autostart DETECT z.B. per Skript gestartet werden.
PolicyKit configuration
Falls der VDR nicht als root oder unter X gestartet wird, hat VDR nicht die Berechtigung Geräte automatisch zu mounten. Im syslog findet sich in dem Falle folgende Fehlermeldung: AutoMount DeviceKit Error dbusdevkit.cc dbus_connection_send_with_reply failed Not Authorized
Im Verzeichnis contrib des Plugins gibt es die Datei "com.vdr.autostart.pkla". Diese muss nach /var/lib/polkit-1/localauthority/10-vendor.d kopiert werden. Wird der VDR nicht mit dem vdr-Benutzer gestartet, muss in der Datei noch der Benutzer angepasst werden.
com.vdr.autostart.pkla:
[Mounting, checking, etc. of internal drives] Identity=unix-user:vdr Action=org.freedesktop.udisks.filesystem-* ResultActive=yes ResultAny=auth_admin ResultInactive=yes
Probleme
Um Probleme und Bugs zu Melden ist es hilfreich möglichst viele Ansatzpunkte zu haben. Entsprechend sollte dann der vdr mittels der Kommandozeilenoption -l 3 möglichst viele Debugging-Infos ins syslog loggen.
Bei Abstürzen ist ein Backtrace äußerst hilfreich. Dazu muß zumindest das Plugin mit Debugging-Informationen compiliert werden. Der Compiler muß mit der -g Option aufgerufen werden. In der Datei Make.config sollte dann folgendes stehen (noch besser ist es, das -O2 noch durch ein -O0 zu ersetzten):
### The C compiler and options: CC = gcc CFLAGS = -g -O2 -Wall CXX = g++ CXXFLAGS = -g -O2 -Wall -Woverloaded-virtual -Wno-parentheses
Dann in einer Shell mittels
ulimit -c unlimited
das schreiben eines Core-Files erlauben und aus der Shell den VDR starten. Nach dem Absturz gibt es dann eine Datei "core", die man mit folgendem Shell-Script auswerten kann:
#!/bin/sh gdb $1 --core $2 --quiet --batch -ex "thread apply all bt full" -ex "where" -ex "quit"
Das erste Argument ist das VDR-Executable, das zweite Argument das Core-File. Diese Ausgabe kann man dann dem Bugreport noch anhängen.
Aktuelle Version(en)
Mercurial Repository
hg clone http://hg.uli-eckhardt.de/autostart