#!/bin/sh # # run vdr . /etc/init.d/rc.functions rm -f /tmp/vdr_stop /tmp/vdr_quick_restart case "$1" in -k) touch /tmp/vdr_stop killproc "/usr/bin/vdr" 10 exit $? ;; -r) killproc "/usr/bin/vdr" 10 exit $? ;; -q) touch /tmp/vdr_quick_restart killproc "/usr/bin/vdr" 0 exit $? ;; -n) norestart=1 ;; -*) echo "Usage $0 {-k | -r | -q}" echo " -k kill vdr" echo " -r restart vdr" echo " -q quick restart vdr" echo " -n no restart if an error occur" exit 1 ;; esac ps=$(ps); echo "$ps" | grep "{${0##*/}}" | grep -q -v $$ && { echo "${0##*/} is already running"; exit 1; } /etc/vdr/run.d/rc.action start while (true) do . /etc/rc.config export LANG export LC_ALL=$LANG export VDR_CHARSET_OVERRIDE # check if a remote control must be enabled if ps | grep -v "grep" | grep -q "lircd" && (! test -e /usr/bin/vdr-sxfe || ! grep -sqi "^lirc\." /etc/vdr/remote.conf); then VDR_ARGS="$VDR_ARGS --lirc" fi # update remote configuration file cat /etc/vdr/remote.conf.* 2>/dev/null >> /etc/vdr/remote.conf rm -f /etc/vdr/remote.conf.* mv /tmp/remote.conf.* /etc/vdr 2>/dev/null # update reccmds.conf cat /etc/vdr/reccmds.conf.* 2>/dev/null > /etc/vdr/reccmds.conf find /etc/vdr -name "reccmds.sh.*" -exec {} \; >> /etc/vdr/reccmds.conf # check if a input device must be train if ! grep -sqi "^lirc\." /etc/vdr/remote.conf && [ -z "${VDR_ARGS%%* --lirc}" ] || ! grep -sqi "^rcu\." /etc/vdr/remote.conf && [ -z "${VDR_ARGS%%* -Prcu}" ] || ! grep -sqi "^remote\." /etc/vdr/remote.conf && ls /etc/vdr/remote.rc* >/dev/null 2>&1 && [ -e /usr/bin/av7110_loadkeys ] || ! grep -sqi "^XKeySym\." /etc/vdr/remote.conf || ! grep -sqi "^kbd\." /etc/vdr/remote.conf then echo "xineliboutput.OSD.Size = 720x576" >> /etc/vdr/setup.conf.add elif grep "xineliboutput.OSD.Size = 720x576" /etc/vdr/setup.conf; then echo "xineliboutput.OSD.Size = automatic" >> /etc/vdr/setup.conf.add fi # update vdr configuration file while read line; do sed "/${line%% *}/d" -i /etc/vdr/setup.conf echo "$line" >> /etc/vdr/setup.conf done 2>/dev/null < /etc/vdr/setup.conf.add rm -f /etc/vdr/setup.conf.add # activate selected channel list if [ -n "$VDR_CHANNELLIST" ]; then ln -fs /etc/vdr/channels/$VDR_CHANNELLIST.conf /etc/vdr/channels.conf fi # suche Plugins und Parameter zusammen plugins="" for plugin in $VDR_PLUGIN_ORDER `ls /usr/lib/vdr/libvdr* 2>/dev/null | sed 's/.*libvdr-\([^.]*\).*/\1/'`; do if [ -z "`echo "$plugins" | grep -e "-P[^a-z]$plugin " 2>/dev/null`" -a -n "`ls /usr/lib/vdr/libvdr-$plugin* 2>/dev/null`" ]; then eval options=\$VDR_PLUGIN_ARGS_$(echo "$plugin" | sed 's/-/_/g') plugins="$plugins -P\"$plugin $options\"" fi done # wait for dvb adapters i=0; while [ $i -lt 10 -a ! -e /tmp/vdr_quick_restart -a $(ls /dev/dvb/adapter?/dvr? 2>/dev/null | wc -l) -lt 0$VDR_DVB_ADAPTER_COUNT ]; do i=$(($i+1)); sleep 1 "#waiting for dvb adapters"; done update_setting "VDR_DVB_ADAPTER_COUNT" "$(ls /dev/dvb/adapter?/dvr? 2>/dev/null | wc -l)" starttime=`date +%s` rm -f /tmp/vdr_quick_restart # starte vdr eval /usr/bin/vdr -s /etc/vdr/shutdown.d/rc.action -r /etc/vdr/recording.d/rc.action -w 60 -L /usr/lib/vdr -c /etc/vdr -E /var/cache/vdr/epg.data -v /data/tv/tv0 -g /tmp -u root $VDR_ARGS $plugins >>${VDR_STDOUT-/dev/stderr} test -e /tmp/vdr_stop && break if [ -e /tmp/vdr_quick_restart ]; then /etc/vdr/run.d/rc.action quick_restart else echo -n "VDR exits at "; date killproc "/usr/bin/vdr" 0 test -e /tmp/vdr_stop -o "$norestart" = "1" && break # schnelle wiederholte Neustarts verzögern if [ $starttime -gt $(( `date +%s` - 15 )) ]; then sleep 10 # waiting for vdr fi /etc/vdr/run.d/rc.action restart fi done /etc/vdr/run.d/rc.action stop rm -f /tmp/vdr_stop /tmp/vdr_quick_restart