Unificando Hardware - Final Stage!
Retomamos un poco el hilo del XBMC Servidor, uno de los inconvenientes que he tenido al querer usar la misma máquina tanto de servidor como de reproductor ha sido que XBMC aunque no lo uses está ahí y gastando un 12% de CPU (tengo un skin muy bonito XD). Por tanto, nos consume luz y proceso que podríamos aprovechar o ahorrar.
Mi idea es apagar XBMC automaticamente sino se usa, pero poder iniciarlo de nuevo pulsando el mando a distancia.
¡Vamos al tajo!
Lo primero que pensé fué aprovechar lirc y que mejor que montarlo rápidamente con un pequeño demonio hecho en python (thx pyLirc). Dicho y hecho aqui os dejo el demonio:
#!/usr/bin/python
# pyServiceHandleXBMC - Almost taken from pyLirc Doc
# and modded by D_Skywalk
# version 110210 (1.a)
import pylirc, time, os
blocking = 0;
#
if(pylirc.init("pylirc", "/usr/local/etc/lircrc.ServiceHandleXBMC", blocking)):
print "pyService XBMC using Lirc is Waiting..."
code = {"config" : ""}
while(code["config"] != "quit"):
if(not blocking):
time.sleep(1)
# Read next code
s = pylirc.nextcode(1)
while(s):
# Print all the configs...
for (code) in s:
print "Command: %s, Repeat: %d" % (code["config"], code["repeat"])
if(code["config"] == "run"):
# Read last code
s = pylirc.nextcode(1)
pylirc.exit()
os.execl("/usr/local/bin/runXBMCservice", "")
# Read next code?
if(not blocking):
s = pylirc.nextcode(1)
else:
s = []
# Clean up lirc
pylirc.exit()
El código es básicamente el ejemplo del uso de lirc con python, añadiendo la llamada al pequeño script en bash que lo único que hace es ejecutar “service xbmc-live start”
¿por que no lo hice directamente de ahí? por que python me protestaba… mejor no preguntar XD
Para usarlo vais a necesitar un fichero lircrc, algo asi (adaptarlo a vuestro mando si no es el de XBOX)
begin
prog = pylirc
button = 5
config = quit
end
begin
prog = pylirc
button = DISPLAY
config = run
end
Podéis usar o añadir los botones que teneis en /etc/lirc/… tengo puesto que con 5 cierra el demonio para depurar y tal me venia bien, sino lo necesitais con borrar ese boton lo tenéis
Para arrancar el demonio al cerrar XBMC añadid la llamada a /usr/bin/runXBMC en:
...
if [ -e /tmp/noRestartXBMC ] ; then
screen -A -m -d -S xbmcREMOTE /usr/local/bin/pyServiceLircHandleXBMC #linea a añadir
rm /tmp/noRestartXBMC
...
Uso screen para mandarlo a segundo plano y tener mejor control del proceso, pero sino queréis usarlo supongo que podreis usar también nohup y demás…
Finalmente y sin cerrar este fichero debéis quitar el argumento –standalone de la llamada a xbmc, para que os permita cerrar XBMC sin apagar todo el sistema.
Bien, no se si entre el público habrá algún día otro pijo-linuxero con el mismo problema, pero quizás lo más importante de este envio es la facilidad de crear un programa a tu medida con python en un par de ratos y sin dolores de cabeza, que lujo de lenguaje a ver si me lo empollo un poquito más
Un Saludo!
comments powered by Disqus