Posts tagged ‘Code’

MyMCTk.py : Release v0.2

J’ai enfin résolu le problème d’affichage et je peux donc enfin releaser la version 0.2 (première version avec une interface graphique) de mon MediaCenter ultra-léger et utra-simple!

Il est programmé en Python 3 avec la librairie graphique Tk et a pour but de me former à ce langage…

Screenshot :

MyMCTk

MyMCTk

Installation :

1. Télécharger l’archive sur mon dépôt : MyMCTk.tar.

2. Installez Python 3 selon les commandes habituelles de votre distribution Linux (yaourt python3 pour Archlinux) ou en le téléchargeant sur le site officiel de Python : http://python.org.

3. Installez Mplayer (lecteur multimédia en ligne de commande) de la même manière ou en le téléchargeant sur le site officiel : http://www.mplayerhq.hu.

4. Décompressez l’archive dans le répertoire de votre choix :

tar -vxf mon_fichier.tar

5. Éditez le fichier MyMCTk.py avec votre éditeur de texte préféré (VIM par exemple) :

#------------------------------------------------------#
# PARAMETRAGE                                          #
#------------------------------------------------------#
# Répertoire contenant les films :
FILMSDIR = '/home/monutilisateur/monrepertoiredesfilms/'
#
# Commande pour récupérer les films du FTP :
FTPGET= ''
#
# Commande pour lancer mplayer en plein écran :
MPLAYER  = 'mplayer -fs '
#
# Commande pour éteindre le pc :
SHUTDOWN = 'sudo poweroff'
#
# Autres constantes :
TILDE    = '\''

Vous devez indiquer le lien du répertoire qui contient les films dans FILMDIR, puis au besoin renseigner la commande FTPGET qui vous permet de récupérer les films d’un FTP (ou d’un lecteur réseau, d’un disque usb…) et de les placer dans le répertoire des films FILMDIR.

Normalement vous n’avez pas à changer les autres constantes (sauf si vous voulez remplacer mplayer par un autre player (VLC, etc.).

6. Rendez le fichier exécutable :

chmod +x MyMCTk.py

7. Exécutez le programme :

./MyMCTk.py

Et voilà normalement MyMCTk doit être fonctionnel ;)

8. [ FACULTATIF ] Si vous désirez pouvoir lancer MyMCTk depuis n’importe quel répertoire vous pouvez créer un lien symbolique dans /usr/sbin :

Vous devez être placé dans /usr/sbin/ en root :
ln -s /votre_chemin_vers_le_fichier/MyMCTk.py

Bugs :

Vous pouvez remonter les bugs rencontrés et les suggestions ici même (commentaire ou email)…

Les points sur lesquels je suis en train de travailler :

  • Prise en charge des fichiers avec des apostrophes dans le nom,
  • Ajout d’un bouton pour effacer un film,
  • Ajout d’un bouton pour renommer un film,
  • Rafraichissement de la liste…

MyMCTk.py – Tkinter issue :(

Depuis hier je me prends la tête un problème avec Tkinter :

Tk issue :(

Tk issue :(

La taille de la listbox (zone ou sont affichés les titres des films) ne s’adapte à la taille de la fenêtre qu’en largeur!

J’ai essayé de nombreuses combinaison avec les fill=”", les side= et les expand=”" sans aucun succès…

Voici les extraits du code :

#--------------
# DECLARATIONS
#--------------
# Liste contenant les différents fichiers du répertoire :
ListeRepertoire = []
#
# Fenêtre principale :
Fenetre = tkinter.Tk()
#
# Division verticale de la fenêtre :
Division = tkinter.PanedWindow(orient=tkinter.VERTICAL)
#
# Panneau Supérieur :
PanneauSup = tkinter.Label(Division)
#
# Panneau Inférieur :
PanneauInf = tkinter.PanedWindow(orient=tkinter.HORIZONTAL)
PanneauInf1 = tkinter.Label(PanneauInf)
PanneauInf2 = tkinter.Label(PanneauInf)
PanneauInf3 = tkinter.Label(PanneauInf)
PanneauInf4 = tkinter.Label(PanneauInf)
PanneauInf5 = tkinter.Label(PanneauInf)
#
# Ascenseur de la fenêtre principale :
Ascenseur = tkinter.Scrollbar(PanneauSup,orient=tkinter.VERTICAL)
#
# Liste des films de la fenêtre principale :
Liste = tkinter.Listbox(PanneauSup, yscrollcommand=Ascenseur.set)
#
# Bouton Play de la fenêtre principale :
BoutonPlay = tkinter.Button(PanneauInf1,text='Play')
#
# Bouton Mise à jour FTP de la fenêtre principale :
BoutonFtp = tkinter.Button(PanneauInf2,text='FTP')
#
# Bouton Quit de la fenêtre principale :
BoutonQuit = tkinter.Button(PanneauInf3,text='Quit')
#
# Bouton Shutdown de la fenêtre principale :
BoutonShutdown = tkinter.Button(PanneauInf4,text='Bye')
#
#------------
# PROGRAMME
#------------
Division.pack(expand="yes", fill="both")
Division.add(PanneauSup)
PanneauInf.pack(expand="false", fill="none")
PanneauInf.add(PanneauInf1)
PanneauInf.add(PanneauInf2)
PanneauInf.add(PanneauInf3)
PanneauInf.add(PanneauInf4)
PanneauInf.add(PanneauInf5)
Division.add(PanneauInf)
#
# On affiche l'ascenceur et on le place sur la gauche :
Ascenseur.pack(side=tkinter.LEFT,fill=tkinter.Y)
Ascenseur.config(command=Liste.yview)
#
# Affichage de la liste :
Liste.pack(expand="yes", fill="both")
#
# On affiche le bouton Play :
BoutonPlay.pack(fill="none")
#
# On affiche le bouton FTP :
BoutonFtp.pack(fill="none")
#
# On affiche le bouton Quit :
BoutonQuit.pack(fill="none")
#
# On affiche le bouton Shutdown :
BoutonShutdown.pack(fill="none")

Si quelqu’un a une idée ou une suggestion pour corriger ce problème je suis tout ouie ;)

MyMCTk.py – Bientôt la release :)

J’ai eu un peu de temps libre ce soir… J’ai donc pu travailler un peu sur mon media-center!

Comme promis, j’ai commencé l’interface graphique pour une utilisation simplifiée pour les non-geek ;) J’ai choisit la librairie Tkinter de Python pour la simplicité (elle est fournie avec Python). Le media-center fonctionne actuellement mais j’ai encore quelques problèmes graphiques à résoudre (voir le problème d’ajustement automatique de la taille de la liste en hauteur qui créé des blancs au dessous et au dessus des boutons).

Dès que ce problème est résolu, je fignole le code, le design et je release le media-center…

En attendant, un petit aperçu :

Aperçu de MyMCTk.py (en developpement)

Aperçu de MyMCTk.py (en developpement)

Release prévue ce weekend !! ;)

Python 3 – MyMediaPlayer Release 0.1

J’ai découvert dans le magazine GNU/Linux Magazine France HS 40 le langage Python…
En fait j’en avais déjà entendu parler mais je n’avais jamais pris le temps de m’y intéresser.
Après une lecture rapide du magazine, j’ai décidé de faire quelques petites manipulations. La simplicité du langage m’a interpelé!
Pour découvrir ce langage dans sa version 3, j’ai décidé de faire un petit programme pour mon media center…
Je récapitule, sur la TV de mon salon j’ai une eeeBOX de branchée (Archlinux + Slim + Wmii-hg + Mplayer + Firefox).
Comme ma copine n’est pas une geek ^^ j’ai décidé de lui faire un petit programme qui est lancé au démarrage et qui liste les films disponibles. Il lui suffira de taper le numéro du film pour lancer mplayer en plein écran. Pour éteindre le PC il lui suffira de taper ‘bye’!

MyMC.py en action :

MyMC en action !

Cette première version est fonctionnelle mais ça reste une maquette… Aussi, la prochaine étape est de créer une interface graphique en tk pour rendre l’utilisation plus agréable!

Si vous voulez le tester, ou simplement regarder le code source, la source python est disponible ici : MyMC.py.

wmii | statusbar – suite…

Hier je vous ai presenté un début de hack pour une barre de statut personalisée… J’ai ajouté quelques éléments incontournables pour un laptop : le reseau wifi sur lequel on est connecté et la qualité du signal.

wmii statusbar

Continuons donc sur notre lancée et détaillons le bout de code : la fonction status.

Vim - code editor

Vim - code editor

La commande “echo -n” englobe le reste des commandes qui suivent (les “\” permettent d’aller à la ligne sur l’éditeur sans sortir de la commande).

'Cpu:' `{cpufreq-info -f | sed 's/000//;'} 'MHz' '|' \

Comme nous somme dans la commande echo, pour afficher du texte ‘Cpu:‘ il suffit de le placer dans des tildes ‘. Suite à ce morceau de texte, nous trouvons une série de commandes de placées dans un conteneur`{commande1 | commande2}. Les commandes sont séparées par un |. C’est un principe de base des commandes UNIX.

La première commande “cpufreq-info -f” . cpufreq-info est un programme qu’il faut installer sur le système et qui permet d’afficher les infos sur le processeur. Ici, utilisé avec le paramètre “-f” il nous retourne la fréquence en kHz.

La seconde commande “sed ’s/000//;’” appelle sed un editeur de texte vieux comme le monde afin de supprimer une chaine de ‘000′ car la fréquence retournée est en kHz (100000kHz = 100MHz).

'Temp:' `{cat /proc/acpi/thermal_zone/THRM/temperature | grep 'temperature' | sed 's/.*://;'} '|' \

Nous passons directement aux nouveaux éléments “cat /proc/acpi/thermal_zone/THRM/temperature” suivi de “grep ‘temperature’” et enfin la commande “sed” pour mettre en forme la chaine de caractère.

La commande cat est une commande du système de base Linux et permet d’afficher un fichier de texte. Ici elle affiche le contenu du fichier système “/proc/acpi/thermal_zone/THRM/temperature”. Le noyeau Linux maintient à jour de nombreux pseudo-fichiers pour communiquer avec le reste du système (plus de détails ici par exemple).

Comme la commande cat nous sort plusieurs lignes, la commande grep permet d’afficher la première qui contient ‘temperature’. A ce stade il ne reste qu’a nettoyer la ligne restante avec l’éditeur sed.

'Bat:' `{cat /proc/acpi/battery/BAT1/state | grep remaining | sed 's/.*://;'} '/' `{cat /proc/acpi/battery/BAT1/info | grep 'design capacity:' | sed 's/.*://;'} '|' \

Cette suite de commandes reprend exactement le même principe que celle pour la température.

'Wifi:' `{iwconfig wlan0 | grep 'ESSID:' | sed 's/.*://;'} `{iwconfig wlan0 | grep Quality | sed 's/.*y=//;' | sed 's/.100.*//;'} '% |' \

A ce stade vous devez être en mesure de comprendre globalement le principe de cette suite de commandes. iwconfig permet d’afficher ou modifier les infos des cartes wireless (ici la carte wlan0). Nous récupérons la ligne contenant le ‘ESSID’ et nous la nettoyons. Même procédure pour la qualité du signal. A noter qu’ici nous appelons 2 fois la commande sed car il y a des chaines de caractères à enlever avant et après le champ désiré!

`{date}

Enfin, la commande la plus simple – on aurait du commencer par elle ;) – date qui retourne la date complète.

Alors à vos hacks !!!!