Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 06/12/2012, à 23: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, à 23:12)

Hors ligne

#2 Le 07/12/2012, à 08:55

tiramiseb

Re : [Python]Script pour lancer XBMC

Whorus a écrit :

[...] 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 big_smile


Whorus a écrit :

- 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 !

Whorus a écrit :

- 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)

Hors ligne

#3 Le 07/12/2012, à 10:36

Whorus

Re : [Python]Script pour lancer XBMC

Merci pour ta réponse, je m'y attele wink

Hors ligne