Contenu | Rechercher | Menus

Annonce

Si vous rencontrez des soucis à rester connecté sur le forum (ou si vous avez perdu votre mot de passe) déconnectez-vous et reconnectez-vous depuis cette page, en cochant la case "Me connecter automatiquement lors de mes prochaines visites". Attention, le forum rencontre actuellement quelques difficultés. En cas d'erreur 502, il ne faut pas re-valider l'envoi d'un message ou l'ouverture d'une discussion, au risque de créer un doublon.

La section divers se réorganise ! De nouvelles sous-sections à venir. (plus d'infos + donner son avis)

#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

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)

Sébastien Maccagnoni-Munch - administrateur Linux depuis le XXe siècle
Consultant informatique indépendant - http://www.smm-informatique.fr
Geek et tout plein d'autres choses - http://www.tiramiseb.fr

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 wink

Hors ligne

Haut de page ↑