El sitio personal de David Colmenero (D_Skywalk)

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! Smiley: Muy contento!

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 Smiley: contento!

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 Smiley: guay!

Un Saludo!

Comparte en: Twitter Facebook Google +
comments powered by Disqus