Pages : 1
#1 Le 06/12/2012, à 22:10
- Whorus
[Python]Script pour lancer XBMC
Hello à tous,
Je me suis fait un petit PC sous Ubuntu (sur lequel je débute), et je m'en sers principalement de mediaserver (mais serveur web à venir....)
J'utilise XBMC Remote pour piloter la lecture de mes vidéos. Seul souci : je ne laisse pas tourner xbmc en permanence, donc la remote ne fonctionne pas, et ça perd son charme si je dois déjà passer par la souris pour le lancer puis après xbmc remote pour la lecture... Bref, j'ai trouvé un script Python (je ne connais rien à ce langage, je précise) sur cette page pour palier à ce souci. En gros, on récupère un paquet WOL lancé par l'appli smartphone pour lancer XBMC. Voici le script en question :
#!/usr/bin/python
import socket, subprocess
from glob import glob
PORT = 9
#[Windows]
#macs = ['mac_adress_without_colon']
#[/Windows]
# [Linux]
macs = []
paths = ['/sys/class/net/eth*/address','/sys/class/net/wlan*/address']
for mac_file in [glob(path) for path in paths]:
macs.append(open(mac_file[0]).read().strip().replace(':', ''))
# [/Linux]
def main():
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
port = PORT
try:
s.bind(('', port))
except socket.error:
port = PORT + 1000
s.bind(('', port))
print('Listening on UDP port %d for WOL packets' % port)
while 1:
# Wait for WOL packet
data, addr = s.recvfrom(1024)
for mac in macs:
if data == bytes.fromhex('ff'*6 + mac*16):
# [Windows]
#subprocess.call('C:\Program Files\XBMC\XBMC.exe')
# [/Windows]
# [Linux]
subprocess.call('xbmc')
# [/Linux]
break
if __name__ == '__main__':
main()
Premier souci : ça ne marche pas !
J'ai donc modifié le code au pif de la sorte, et ça marche :
#!/usr/bin/python
import socket, subprocess
from glob import glob
PORT = 9
# [Windows]
#macs = ['XXXXXXXXXXX']
# [/Windows]
# [Linux]
macs = ['icilavraievaleur']
# [/Linux]
def main():
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
port = PORT
try:
s.bind(('', port))
except socket.error:
port = PORT + 1000
s.bind(('', port))
print('Listening on UDP port %d for WOL packets' % port)
while 1:
# Wait for WOL packet
data, addr = s.recvfrom(1024)
for mac in macs:
#if data == bytes.fromhex('ff'*6 + mac*16):
# [Windows]
#subprocess.call('C:\Program Files (x86)\XBMC\XBMC.exe')
# [/Windows]
# [Linux]
subprocess.call('xbmc')
# [/Linux]
break
if __name__ == '__main__':
main()
C'est carrément artisanal mais ça marche. Par contre il en découle deux questions :
- Est-ce que mes modifs posent un éventuel problème de sécurité pour mon PC ?
- Comment lancer ce script au démarrage de ma bécane avec les permissions admin ?
Merci pour votre aide ! (si vous m'avez lu jusqu'à là)
Dernière modification par Whorus (Le 06/12/2012, à 22:12)
Hors ligne
#2 Le 07/12/2012, à 07:55
- tiramiseb
Re : [Python]Script pour lancer XBMC
[...] un script Python (je ne connais rien à ce langage, je précise) [...] ça marche.
Ce qui prouve que ce langage est facile d'accès
- Est-ce que mes modifs posent un éventuel problème de sécurité pour mon PC ?
A priori non...
Un pirate qui aurait réussi à s'introduire dans ton PC pourrait lancer XBMC... woohooooo !
- Comment lancer ce script au démarrage de ma bécane avec les permissions admin ?
Attention, tu as besoin des permissions admin pour écouter sur le port mais il faut lancer XBMC en tant qu'utilisateur. Pour lancer le script au démarrage du PC : http://doc.ubuntu-fr.org/tutoriel/comme … en_service
Et avant de lancer XBMC tu dois être dans un environnement graphique qu'il supporte (généralement un utilisateur connecté sur sa session). Au démarrage du PC par exemple, il faut donc attendre que l'interface graphique soit démarrée et un utilisateur automatiquement connecté.
Je pense qu'il est préférable de ne pas lancer XBMC en tant qu'admin (là tu peux en avoir des failles de sécurité, oui) et donc changer la commande d'exécution par quelque chose comme :
subprocess.call('su -c "DISPLAY=:0 xbmc" <utilisateur>', shell=True)
Sébastien Maccagnoni - https://www.maccagnoni.eu - https://www.domotego.com
Hors ligne
#3 Le 07/12/2012, à 09:36
- Whorus
Re : [Python]Script pour lancer XBMC
Merci pour ta réponse, je m'y attele
Hors ligne