[RISOLTO] Fare partire prima XBMC e poi VDR
Moderatori: ragno, tapino, alez, zulu, davidea
[RISOLTO] Fare partire prima XBMC e poi VDR
Vorrei realizzare un mediacenter HD che parta di default con XBMC e che da questo sia possibile fare partire solo quando serve VDR (che servirebbe tipicamente solo come PVR per il digitale terrestre, quindi solo per programmare / rivedere le registrazioni)
Il contrario con VDR e externalplayer funziona bene ma mi piacerebbe che partisse di default XBMC... ci vorrebbe qualcosa che funziona esattamente come externalplayer (che disabilita gli input utente come il telecomando) e che quando il frontend di VDR non serve più spenga XINE e ritorni ad XBMC
Una semi-porcata che mi è venuta in mente sarebbe fare partire subito XBMC e poi nello stesso script che lo avvia mettere lo start di XINE, in questo modo si avrebbe XBMC all'avvio e uscendo da XBMC partirebbe VDR normalmente, dal quale poi sarebbe possibile richiamare XBMC, ma mi piacerebbe capire se si può fare qualcosa di più elegante...
Idee?
Re: Fare partire prima XBMC e poi VDR
La macchina è una Ubuntu minimal che parte con autologin dell'utente root, il quale ha in bash_profile lo startx.
Il .xinitrc è così composto:
Codice: Seleziona tutto
xhost + localhost
/usr/local/bin/svdrpsend.pl -d 127.0.0.1 -p 2001 remo off
/scripts/start_xbmc.sh
/usr/local/bin/svdrpsend.pl -d 127.0.0.1 -p 2001 remo on
/scripts/start_xine.sh
0- VDR già in esecuzione e in ascolto su lirc
1- vengono disabilitati gli input di VDR (in modo che quando uso il telecomando con XBMC non vada ad interferire)
2- lancio XBMC
3- all'uscita di XBMC vengono riabilitati gli input a VDR
4- viene avviato xine, per mostrare l'output di VDR
da ora in avanti, se si vuole rivedere XBMC è sufficiente richiamare dal menu la voce di externalplayer, che si occupa anche di sospendere nuovamente gli input a VDR e di darli in esclusiva a XBMC.
Se lo startx viene fatto da terminale no problem, svdrpsend funziona correttamente ma se viene avviato dallo script da boot funziona tutto tranne svdrpsend... non riesco a capire cosa ci sia che non va...
Re: Fare partire prima XBMC e poi VDR
Ho scritto questo semplice scriptino che controlla che vdr sia in esecuzione ed attende 10 secondi:
salvato in /scripts/wait_until_it_is_running.sh
Codice: Seleziona tutto
#!/bin/bash
PROGRAM=runvdr
APPCHK=0
while [ $APPCHK -lt "2" ]; do
APPCHK=$(ps aux | grep -c $PROGRAM)
#echo "APPCHK, $PROGRAM is not running\n"
sleep 1
done
sleep 10
#echo "$APPCHK, PROGRAM is running\n"
poi ho modificato lo start_xbmc.sh mettendo xbmc in standalone mode, prima xbmc una volta eseguito restituiva il prompt quindi veniva eseguito il passo successivo dello script, ossia remo on, riabilitando di fatto il telecomando a VDR:
/scripts/start_xbmc.sh
Codice: Seleziona tutto
#!/bin/bash
DISPLAY=:0.0
xhost +
/usr/bin/xbmc --standalone
Codice: Seleziona tutto
xhost + localhost
/scripts/wait_until_it_is_running.sh
/usr/local/bin/svdrpsend.pl -d 127.0.0.1 -p 2001 remo off
/scripts/start_xbmc.sh
/usr/local/bin/svdrpsend.pl -d 127.0.0.1 -p 2001 remo on
/scripts/start_xine.sh
- Maggiolino
- Messaggi: 83
- Iscritto il: 17 gen 2008, 03:35
Re: [RISOLTO] Fare partire prima XBMC e poi VDR
Per risolvere ho scopiazzato a piene mani da yavdr usando openbox, dbus2vdr e upstart che ha il grosso vantaggio di riavviare xine qualora dovesse andare in crash, senza contare che non hai bisogno di scriptini di controllo.
Comunque, per la grana del telecomando, usando vdr-sxfe con xineliboutput il problema non sussiste perchè gli passi il parametro per il telecomando senza impostarlo sul vdr. Purtroppo mi andava in crash su Rai Hd e così ho dovuto usare xine e upstart
L'autologin l'ho abbandonato, perchè il bash_profile mi creava dei problemi quando mi collegavo in ssh, a volte andava in crash.
Re: [RISOLTO] Fare partire prima XBMC e poi VDR
Hai qualche tutorial sotto mano per replicare la tua configurazione?
Comunque, quello fatto finora è qui disponibile:
http://al3z77.altervista.org/dokuwiki/d ... untu_10.04
Edit: facendo riferimento a questo post di zio sul sif (richiede registrazione e login)
http://forum.sifteam.eu/722095-post38.html
sto riuscendo a fare qualcosa di meglio ora continuo a studiare...
Re: [RISOLTO] Fare partire prima XBMC e poi VDR
http://al3z77.altervista.org/dokuwiki/d ... g_senza_wm
- Maggiolino
- Messaggi: 83
- Iscritto il: 17 gen 2008, 03:35
Re: [RISOLTO] Fare partire prima XBMC e poi VDR
Tutorial no perchè ho guardato come era implementato su yavdr e l'ho adattato alle mie esigenze, domani, tempo permettendo, ti posto gli script che utilizzo e come ho fatto per per far funzionare il tutto.alez ha scritto: Hai qualche tutorial sotto mano per replicare la tua configurazione?
Ciao
Re: [RISOLTO] Fare partire prima XBMC e poi VDR
@alez: invece di aspettare 10 secondi, puoi utilizzare questo per testare se vdr risponde sulla porta di svdr (preso pari pari da yavdr)
Codice: Seleziona tutto
while ! netcat -z localhost <porta svdr>; do sleep 1; done;
Percorri la via che porta al sole,
e non camminare sui sentieri oscuri.
E quando penso che sia finita,
è proprio allora che comincia la salita.
Re: [RISOLTO] Fare partire prima XBMC e poi VDR
- Maggiolino
- Messaggi: 83
- Iscritto il: 17 gen 2008, 03:35
Re: [RISOLTO] Fare partire prima XBMC e poi VDR
Se usi ubuntu invece non dovresti avere problemi nel farli partire in automatico al boot.
Sono partito anch'io da una distro minimale ( con deboostrap) per poi aggiungere quello che serviva.
Per vdr non ho usato la versione fornita con debian ma ho compilato il tutto da zero (1.7.28) e lasciandolo nella directory /VDR.
Per Xine e xbmc invece ho usato le versioni fornite da Debian, installando i pacchetti con apt-get per evitare l'installazione di ciò che non mi interessava.
Questo è l'elenco per xine, se mancano alcuni pacchetti (dev) non riesci a compilare o non ti parte xine per la mancanza dei plugin di input per vdr:
libxine2
libxine2-bin
libxine2-dev
libxine2-doc
libxine2-ffmpeg
libxine2-misc-plugins
libxine2-plugins
libxine2-vdr
libxine2-x
libxine2-xvdr
xine-ui
Come dicevo servono upstart, openbox e dbus2vdr e menuorg, upstart e openbox li ho ovviamente installati tramite apt-get.
Dbus2vdr lo scarichi con git:
Codice: Seleziona tutto
git clone https://github.com/flensrocker/vdr-plugin-dbus2vdr.git
menuorg:
http://projects.vdr-developer.org/attac ... 4.5.tar.gz
xine-plugins
http://home.vrweb.de/~rnissl/vdr-xine-0.9.4.tgz
patch per compilare xine:
http://patchwork.linuxtv.org/patch/12937/raw/
xineliboutput come da wiki:
Codice: Seleziona tutto
cvs -z3 -d:pserver:anonymous@xineliboutput.cvs.sourceforge.net:/cvsroot/xineliboutput co vdr-xineliboutput
/etc/vdr/vdr.conf
Codice: Seleziona tutto
DAEMON=/VDR/vdr
VDR_LANG=it_IT.UTF-8
VIDEO_DIR="/mnt/dati/video"
CFG_DIR="/etc/vdr"
VDRSHUTDOWN="/etc/vdr/vdrshutdown"
EPG_FILE="/etc/vdr/epg.data"
SVDRP_PORT="6419"
OPTIONS=" --localedir=/VDR/locale"
LIRC="--lirc=/var/run/lirc/lircd"
LIB_PLUGINS="/VDR/PLUGINS/lib"
PLUGINS="-Pxine -Pmenuorg -Pdbus2vdr -P'xineliboutput --local=none --primary --remote=37890'"
Codice: Seleziona tutto
!--
This is the config file for the Menuorg plug-in.
-->
<menus>
<system name="Schedule" />
<system name="Channels" />
<menu name="Timer">
<system name="Timers" />
<plugin name="epgsearchonly" />
<plugin name="quickepgsearch" />
<plugin name="conflictcheckonly" />
</menu>
<menu name="Video">
<system name="Recordings" />
<plugin name="burn" />
<plugin name="dvdswitch" />
<plugin name="dvdselect" />
<plugin name="dvd" />
<plugin name="xineliboutput" />
</menu>
<menu name="XBOX MEDIA CENTER">
<command name="XBMC" execute="/Script/menuorg-appswitcher standalone=yes app=xbmc &> /dev/null " />
</menu>
<menu name="Sistema">
<menu name="Comandi">
<command name="Rimozione unità USB in sicurezza" confirm="yes" execute="/usr/bin/halevt-umount -ra &> /dev/null" />
<command name="Aggiorna elenco registrazioni VDR" execute="vdr-dbus-send /Recording recording.Update &> /dev/null " />
<command name="Elenco Comandi" execute="/Script/echo_comandi.sh" />
<command name="Riavvia VDR" confirm="yes" execute="restart vdr" />
<command name="Riavvia sistema" confirm="yes" execute="/sbin/reboot" />
<command name="Arresta sistema" execute="/sbin/shutdown -h now > /dev/null & " />
</menu>
<system name="Setup" />
<plugin name="femon" />
<plugin name="filebrowser" />
<plugin name="avolctl" />
<plugin name="suspendoutput" />
<plugin name="recstatus" />
</menu>
</menus>
/Script/menuorg-appswitcher
Codice: Seleziona tutto
#!/bin/bash
# switch applications from vdr menu
for ARG in $@ ; do
KEY="${ARG/=*}"
VALUE="${ARG/*=}"
case $KEY in
standalone)
STANDALONE=$VALUE
;;
window)
WINDOW=$VALUE
;;
app)
APP=$VALUE
;;
display)
XDISPLAY=$VALUE
;;
*)
echo "unknown argument: $KEY"
;;
esac
done
# finished parsing arguments
STOP="/sbin/initctl stop --no-wait"
# minimum required arguments
if [ -z $STANDALONE ] || [ -z $APP ]; then
echo "minimum required argument (standalone, app) not given, exit now ..."
exit 0
fi
if [ ! -z $XDISPLAY ]; then
OPTIONS="DISPLAY=:$XDISPLAY"
export DISPLAY=:$XDISPLAY
else
OPTIONS="DISPLAY=:1"
export DISPLAY=:1
fi
if [ "x$STANDALONE" = "xyes" ]; then
$STOP vdr-frontend &> /dev/null
/sbin/initctl start --no-wait toggle JOBNAME=$APP OPTIONS=$OPTIONS STANDALONE=yes &> /dev/null
else
/sbin/initctl start --no-wait toggle JOBNAME=$APP OPTIONS=$OPTIONS &> /dev/null
fi
/etc/init/vdr.conf
Codice: Seleziona tutto
# Starts the vdr, with config and installed plugins
description "VDR upstart script"
author " "
start on ( (local-filesystems and started udev-finish and stopped networking) or \
stopped vdr-exit-other or \
resume )
stop on runlevel [!2345]
post-start script
LANG=C /sbin/status openbox | grep -q process && /sbin/initctl emit vdr-frontend-restart || /bin/true
end script
kill timeout 15
normal exit 0
nice -10
script
# load default values and overrides from /etc/default/vdr
. /etc/vdr/vdr.conf
# set language
LANG=it_IT.UTF-8
LC_ALL=it_IT.UTF-8
export LANG LC_ALL
eval $DAEMON -c $CFG_DIR -L $LIB_PLUGINS $PLUGINS -v $VIDEO_DIR $LIRC -E $EPG_FILE -s $VDRSHUTDOWN $OPTIONS 2>&1 >/tmp/vdr.log
end script
Codice: Seleziona tutto
# vdr-frontend - Starts xine or vdr-sxfe
#
description "vdr-frontend"
author " "
start on vdr or vdr-frontend-restart or resume
stop on stopping vdr or suspend or stopping openbox
nice -10
respawn
pre-start script
if [ -e /tmp/.standalone ]; then
vdr-dbus-send /Remote remote.Disable ||:
exit 1
fi
end script
env HOME=/root
#env XINE_BUFFER_LOG=1
env USE_AUTOCROP=0
export USE_AUTOCROP
script
export DISPLAY=:1
#ASPECT_RATIO="anamorphic"
GEOMETRY=`xrandr | grep "\*" | cut -d" " -f4`
test -f /etc/default/xine && . /etc/default/xine
XINEOPTS="-G $GEOMETRY -A alsa -V xv -f --post vdr --post vdr_video --post tvtime --post vdr_audio --no-gui --no-logo --no-splash -pq"
if [ -n "$ASPECT_RATIO" ]; then
XINEOPTS="$XINEOPTS --aspect-ratio=$ASPECT_RATIO"
fi
if [ "$USE_AUTOCROP" = "1" ]; then
XINEOPTS="$XINEOPTS --post autocrop:enable_autodetect=1,enable_subs_detect=1,soft_start=1,stabilize=1"
fi
while [ ! -e /tmp/vdr-xine/stream ] ; do sleep 0.1 ; done
while ! grep -q "^ 0" /proc/asound/cards ; do sleep 1 ; done
exec start-stop-daemon --start --exec /usr/bin/xine --user root -c root -- $XINEOPTS "vdr:/tmp/vdr-xine/stream#demux:mpeg_pes" 2>&1 > /tmp/vdr-frontend.log
end script
/etc/init/xbmc.conf
Codice: Seleziona tutto
description "XBMC Daemon"
author " "
env DISPLAY=:1
export DISPLAY
pre-start script
vdr-dbus-send /Remote remote.Disable ||:
if [ ! -z $STANDALONE ] ; then
touch /tmp/.standalone
fi
end script
post-stop script
/bin/rm -f /tmp/.standalone
vdr-dbus-send /Remote remote.Enable ||:
/sbin/initctl emit --no-wait vdr-frontend-restart
end script
script
eval ulimit -c unlimited
su -c "python /usr/share/xbmc/FEH.py --standalone --lircdev /var/run/lirc/lircd" root
RET=$?
if [ $RET -ne 0 ]; then
exit $RET
fi
exec start-stop-daemon --start --exec /usr/lib/xbmc/xbmc.bin --user root --chuid root \
-- --standalone --lircdev /var/run/lirc/lircd
end script
Codice: Seleziona tutto
start on stopped xbmc
task
script
logger -t "XBMC" "XBMC exit with exit status $EXIT_STATUS, $EXIT_SIGNAL, ENV: $(env) ."
case $EXIT_STATUS in
64|66)
vdr-dbus-send /Remote remote.HitKey string:'Power' || /bin/true
;;
*)
# signal-event reset-display-rate
initctl emit vdr-frontend-restart
;;
esac
end script
Codice: Seleziona tutto
description "toggle job $JOBNAME"
author "Holger Reichelt <holgerr@yavdr.de>"
script
stop $JOBNAME || start $JOBNAME $OPTIONS STANDALONE=$STANDALONE
end script
Codice: Seleziona tutto
start on (local-filesystems )
stop on runlevel [!2345]
respawn
env DISPLAY=:1
env XORGCONFIG=/etc/X11/xorg.conf
env xorg_driver
script
# D-bus
if which dbus-launch >/dev/null && test -z "$DBUS_SESSION_BUS_ADDRESS"; then
eval `dbus-launch --sh-syntax --exit-with-session`
fi
if [ -e /etc/default/locale ]; then
. /etc/default/locale
fi
exec xinit /usr/bin/openbox --config-file /etc/X11/openbox/rc.xml --startup "/sbin/initctl emit --no-wait openbox-started" -- :1 vt7
end script
Codice: Seleziona tutto
start on openbox-started
task
env DISPLAY=:1
export DISPLAY
script
LANG=C /sbin/status vdr | grep -q process && /sbin/initctl emit vdr-frontend-restart || /bin/true
xset -dpms s off -display :1
if [ -e /etc/default/locale ] ; then
. /etc/default/locale
fi
if [ ! "$LANG" = "" ]; then
setxkbmap ${LANG/_*} ||:
else
setxkbmap ||:
fi
end script
Comunque per avviare il tutto io lancio da rc.local in sequenza start openbox, start vdr e tutto parte.
Per avviare subito xbmc devo ancora dargli un'occhiata, solo che ora è tardi e domani sarò cotto.
Spero che possa esserti utile.
Ciao
Re: [RISOLTO] Fare partire prima XBMC e poi VDR
C'è un sacco di roba da studiare!
Re: [RISOLTO] Fare partire prima XBMC e poi VDR
Maggiolino ha scritto:Allora, premetto che uso Debian wheezy che non implementa upstart nativamente, quindi i mie script vengono avviati la prima volta da rc.local.
Se usi ubuntu invece non dovresti avere problemi nel farli partire in automatico al boot.
Sono partito anch'io da una distro minimale ( con deboostrap) per poi aggiungere quello che serviva.
Per vdr non ho usato la versione fornita con debian ma ho compilato il tutto da zero (1.7.28) e lasciandolo nella directory /VDR.
Per Xine e xbmc invece ho usato le versioni fornite da Debian, installando i pacchetti con apt-get per evitare l'installazione di ciò che non mi interessava.
..
.
.
.
.
.
Ciao
.azzo ti se fatto un mazzo quanto una casa!!!!
bravo e grazie per il lavoro che hai fatto!!!!
- Maggiolino
- Messaggi: 83
- Iscritto il: 17 gen 2008, 03:35
Re: [RISOLTO] Fare partire prima XBMC e poi VDR
Il fatto è che dovevo fare un mediacenter per un mio amico che non è pratico di computer e volevo che funzionasse senza troppi problemi.
Yavdr era un ottimo punto di partenza, ma dopo averla provata per qualche mese l'ho abbandonata perchè troppo customizzata e non mi permetteva di
aggiornarla con facilità, senza contare i litigi avuti con il telecomando e xbmc ( meteo che non andava, alcuni filmati in HD completamente fuori sincronia) così visto che la mia debian era più stabile ho preso quello che reputavo valido per adattarlo alle mie esigenze.
Ad esempio un problema che non riuscivo a risolvere agevolmente in automatico era rilanciare xine quando usciva perchè lo stream era corrotto ( sui canali terrestri a volte capita). In questo modo funziona egregiamente.
Comunque per le situazioni di emergenza (blocco di xbmc e altro) ho anche aggiunto alcuni comandi tramite irexec, così posso far ripartire i task o riavviare il pc senza far alzare il mio amico dal divano.
Aggiungo gli script:
/etc/lirc/lircrc
Codice: Seleziona tutto
begin
prog = irexec
button = KEY_MACRO
button = KEY_MACRO
button = KEY_MACRO
button = KEY_ENTER
config = /Script/restart.sh
end
begin
prog = irexec
button = KEY_MACRO
button = KEY_MACRO
button = KEY_MACRO
button = KEY_BACK
config = reboot
end
Codice: Seleziona tutto
#!/bin/bash
if $(status xbmc |grep -q process ) ; then
stop xbmc
exit
fi
if $(status vdr-frontend |grep -q process) ; then
vdr-dbus-send.sh /Remote remote.HitKey string:'1' &> /dev/null
stop vdr-frontend &> /dev/null
sleep 1
start vdr-frontend &> /dev/null
exit
fi
if ! $(status xbmc |grep -q process ) && ! $(status vdr-frontend |grep -q process) && $(status vdr |grep -q process) ; then
restart openbox &> /dev/null
exit
fi