U Classroom

Un blog collectif, orienté vers l'apprentissage et l'enseignement collaboratif et communautaire de techniques applicables aux unix libres

En ce moment sur U Classroom

Python : Retard, retard...

Message rapide aux personnes qui ont suivi les deux premiers cours python, et qui attendent le suivant : désolé du retard que ça prend mais les dernières semaines ont été plutôt chargés aux taffs (au pluriel ? oui, un plus un ça fait deux).

Ca devrait commencer à se calmer et je me bouge un peu pour préparer la suite (programmation orientée objet et pygtk).

Si la classroom vous manque et que vous vous sentez l'envie de partager vos connaissances, venez nous en parler sur #ubuntu-fr-classroom sur le réseau irc freenode, on organisera ça !

Squelette de documentation des fonctions C/C++ avec vim

Bon, j'avoue, le titre ne veut rien dire, mais faut m'excuser, il est tard, skateinmars a pas arrêté de m'embêter, etc, etc ...

Le but de ce petit topic est de vous montrer comment générer un début de docmentation des fonctions C sous vim.

D'abord, le code. Prenez une chaise, des aspirines, un grand verre, de l'eau . Vous êtes prêt :

map T :copy.<ESC>k<ESC>:.!sed -r 's@(.[^ ]*) (.[^\(]*)\((.*)\).*@/**\n* \@name \2 :\n* \@Param \3 :\n* \@Return \1 :\n*/@; s/,/ :\n* \@Param /g; s/ [ ]+/ /g;' <CR><CR>

J'avais prévenu :)

Alors ça fait quoi ça ? Ca va générer à l'aide d'une simple touche de raccourci un squelette de documentation compatible doxygen & autres. Vous mettez cette petite ligne à la fin de votre ~/.vimrc, vous enregistrez tout ça et vous ouvrez votre code source C préféré.

Placez vous sur la ligne de déclaration d'une fonction par exemple :

 int main (int argc, const char ** argv) { 

et, en mode commande, appuyez sur T (shift + t).

Et là magie, vous voyez apparaître ceci au dessus de la déclaration :

/**
* @name main :
* @Param int argc :
* @Param const char ** argv :
* @Return int :
*/

Si ça ne marche pas c'est que :

  • Vous avez mal fait
  • J'ai mal fait

Dans le premier cas, reprenez vous, que diable ! Dans le second, tant pis pour vous je vais me coucher :)

PS : un GRAND GRAND merci au petit petit gapz qui du fond de sa cave m'a grandement aidé à faire ça (pour ne pas dire qu'il a fait de loin le plus dur) :)

Création d'un Média Center avec Freevo

Introduction

Je viens de finir la réalisation d'une centrale multimédia complète à l'aide du HTPC Freevo. Voici donc un (petit) tutorial pour détailler la réalisation d'une telle centrale.

Capacités du Media Center

Une fois l'installation terminée, le Media Center sera capable de :

   * Lire la musique (mp3, ogg, etc)
   * Lire les WebRadios
   * Lire des vidéos (divx, etc ...)
   * Lire la télévision (TNT) et afficher les programmes
   * Enregistrer les émissions télé
   * Lire les flux RSS
   * Afficher des photos
   * Contrôler les périphériques X10
   * Démarrer automatiquement au lancement de l'ordinateur et arrêter l'ordinateur en quittant
   * Etre contrôlé par une télécommande

Ce tutorial est disponible au format PDF (généré à partir de source LaTeX) ici .

Prérequis

   * L'ordinateur sur lequel le Média Center a été installé est un PIII 900Mhz, et cela suffit amplement.
   * Côté logiciel, j'ai utilisé une Ubuntu minimale avec serveur X.
   * Votre télécommande doit être fonctionnelle (l'utilisation détaillée ici se sert de lirc)

Installation de Freevo

Freevo n'existe pas dans les dépots officiels d'Ubuntu, il faut donc utiliser des dépôts tierce partie. Vous êtes donc prévenu qu'il ne sont pas supportés par Canonical / Ubuntu et vous ne pourrez vous en prendre qu'à vous seul si cela pourrit votre système.

Donc, maintenant que vous êtes prévenus, il va vous falloir ajouter cette ligne à votre fichier /etc/apt/sources.list :

deb http://ubuntu.geole.info/ gutsy universe multiverse

Une fois cette ligne ajoutée à votre fichier et le fichier sauvegardé, on installe freevo :

sudo apt-get update

apt-get install geole-keyring

sudo apt-get install freevo freevo-common python-freevo freevo-lirc

L'installation du paquet va vous proposer quelques options, choisissez dans l'ordre :

   * x11
   * 768*576 (format PAL)
   * PAL
   * france
   * rien
   * rien
   * rien
   * rien
   * rien
   * rien
   * rien
   * rien

Cela va vous définir le fichier de configuration général de freevo (/etc/freevo/freevo.conf) . Tous les champs que vous n'avez pas saisi seront défini manuellement plus tard dans le fichier /etc/freevo/local_conf.py

Freevo utilise le concept de modules. Par conséquent vous pouvez charger seulement ce dont vous avez besoin.

La totalité de la configuration de Freevo se fait via le fichier /etc/freevo/local_conf.py . Il vous est possible de personnaliser ce fichier de configuration pour chaque utilisateur en le copiant dans /.freevo/ . Cependant, le but du tutorial étant de faire un media center, un seul utilisateur est utilisé. Nous travaillerons donc sur le fichier /etc/freevo/local_conf.py .

Lirc

Freevo utilise son propre mapping LIRC (ie son propre fichier lircrc). Si vous n'avez pas de fichier /etc/freevo/lircrc, vous pouvez en générer un de base avec la commande

freevo makelircrc -w

qui créera une config par défaut. Ensuite, on va rapidement tester que lirc/freevo reconnaissent bien la télécommande. Pour cela, lircd doit être lancé, et on exécute:

ircat -config=/etc/freevo/lircrc freevo

Ensuite appuyez sur les touches de votre télécommande, cela devrait afficher la correspondance freevo (le nom utilisé par freevo). Vérifiez ainsi que toutes les touches fonctionnent, si ce n'est pas le cas, 2 possibilités sont à envisager :

   * La touche est bien reconnue par lirc (elle s'affiche lors de l'utilisation de irw par exemple). Il est à ce moment là fort probable qu'elle soit manquante dans /etc/freevo/lircrc . Il suffit d'éditer ce fichier et de rajouter une section sur le format suivant :
begin
    prog = freevo
    button = nomquisaffichedansirw
    config = correspondancefreevo
end
   * La touche ne fonctionne pas avec irw. Il faut alors regarder dans le fichier de configuration de Lirc.

Bon, maintenant que la télécommande fonctionne on va pouvoir s'attaquer à la configuration en elle-même.

Configuration

Donc on ouvre le fichier /etc/freevo/local_conf.py (avec sudo).

Comme vous pouvez le voir, ce fichier est plutôt bien documenté ce qui vous aidera pour le modifier vous même.

Je vais prendre dans l'ordre les options à modifier. Presque toutes les options sont existantes dans le fichier, mais sont le plus souvent commentées (avec un # en début de ligne), donc une petite recherche sur le nom de l'option, décommentage et modification.

Audio

La première section va permettre la gestion du son, voici ce que j'ai défini, à éventuellement adapter selon vos préférences :

   * AUDIO_DEVICE = '/dev/dsp'
   * AUDIO_INPUT_DEVICE = '/dev/dsp1'
   * MAJOR_AUDIO_CTRL = 'VOL'
   * MAJOR_AUDIO_CTRL_MUTE = 'VOL'
   * CONTROL_ALL_AUDIO = 1
   * MAX_VOLUME = 95
   * DEFAULT_VOLUME = 40
   * TV_IN_VOLUME = 60
   * RADIO_IN_VOLUME = 80
   * DEV_MIXER = '/dev/mixer'

La fonction des options est détaillée dans le fichier et les noms sont suffisamment explicites. Il est possible d'avoir à modifier les 2 premières options ainsi que la dernière, suivant votre carte son.

Les autres options sont plus des préférences. Les nombres correspondent à des pourcentages.

Généralités

   * START_FULLSCREEN_X = 1
   * CONFIRM_SHUTDOWN = 1

Idem, suffisamment explicite :)

Disque ROM La configuration que je propose utilisant fstab, nous n'aurons pas besoin de ce paramètre, on peut donc le désactiver.

   * ROM_DRIVES = []
   * HIDE_UNUSABLE_DISCS = 1

La deuxième option permet de cacher des répertoires dans les menus s'ils ne sont pas accessibles par le logiciel. On l'active donc pour nous permettre de proprement utiliser des disques USB plus tard. Vous pouvez la mettre à 0 si vous n'avez pas de disques externes.

Arrêt

Freevo permet d'arrêter le système lorsqu'on le quitte, ce qui nous intéresse :) On active donc les options suivantes :

   * ENABLE_SHUTDOWN_SYS = 1
   * SHUTDOWN_SYS_CMD = "sudo shutdown -h now"

Il va de plus falloir modifier le fichier /etc/sudoers pour permettre à freevo d'éteindre sans avoir besoin de mot de passe.

Attention, cette manipulation peut poser certains problèmes de sécurité . Cependant, pour un PC destiné seulement à devenir un Media Center, cela ne pose pas vraiment de soucis.

Ouvrez donc un terminal et tapez :

sudo su

visudo

Il vous ouvre alors le fichier /etc/sudoers via l'éditeur VI. Le passage par le compte root est volontaire. En effet, une erreur dans le fichier /etc/sudoers peut vous faire perdre l'accès aux privilèges administrateur.

Déplacez vous avec les flèches sur la dernière ligne du fichier (%admin ALL= (ALL) ALL). Placez vous sur la parenthèse avant le ALL et tapez exactement cette séquence de touche :

   * Appuyez 5 fois sur 'x', cela effacera le mot (ALL)
   * Appuyez une fois sur 'i', cela vous permet d'entrer dans le mode édition de vi
   * Tapez 'NOPASSWD:' , sans oublier les ':'
   * Appuyez une fois sur 'Echap'
     A ce moment là votre ligne devrait être " %admin ALL= NOPASSWD: ALL ". Il ne vous reste plus qu'à quitter :
   * Appuyez sur ':wq', sans oublier les ':'

ATTENTION : il se peut que visudo utilise chez vous l'éditeur nano, auquel cas la séquence de touche ne suffira pas. Mais nano étant beaucoup plus intuitif, je suis sur que vous y arriverez seul :)

Une façon plus sécurisée serait d'autoriser seulement à l'utilisateur actuel le droit d'éteindre. Pour celà vous devez rajoutez dans le fichier les lignes suivantes :

   * Cmnd_Alias HALT=/sbin/shutdown
   * votreuser ALL=NOPASSWD:HALT

Si vous utilisez cette méthode, il n'ai pas nécessaire de modifier la première ligne comme indiqué,

Vous voilà de nouveau sur votre terminal. Laissez le ouvert et ouvrez en un autre pour vérifier que vous n'avez pas fait d'erreur. Tapez-y :

sudo -k

sudo ls

Là il devrait vous lister votre répertoire personnel. Si vous avez un message comme quoi il y a un problème dans le fichier /etc/sudoers, c'est que vous avez fait une mauvaise manipulation.

S'il ne vous mets pas d'erreur et vous affiche le contenu de votre répertoire, vous pouvez fermer les deux terminaux.

Maintenant, Freevo n'aura plus besoin du mot de passe pour éteindre le PC.

Bon, passons à la suite.

Ajout de fonctions pour la télécommande

Une (autre) des grandes puissances de Freevo est la flexibilité du mappage des touches de la télécommande. Freevo est divisé en 'scènes' et met à dispositions de l'utilisateur un certain nombre d'actions sur l'interface (appelées événements). Les scènes correspondent aux parties de Freevo : globale ( effectives partout), menu, music, video, tv, image, games, dvd, vcd (et peut-être d'autres encore) .

Freevo vous permet donc de mapper des touches à des événements particuliers pour chaque scène . Autrement dit, vos touches ne réagissent pas forcément pareil suivant la section dans laquelle vous vous trouvez.

Un grand nombre de paramétrages sont déjà effectuez, vous pourrez les trouver dans le fichier :

/usr/share/pycentral/python-freevo/site-packages/freevo/event.py

J'ai cependant (re)défini quelques mapping supplémentaires. J'ai en effet des touches d'accès 'TV','Vidéos','Radio', etc ... sur ma télécommande (Hauppauge). Je souhaitais donc pourvoir accéder directement aux différentes sections de Freevo quelque soit la section dans laquelle je me trouve.

Rien de plus simple, ajoutez dans votre ficher de configuration les lignes :

   * EVENTS['global']['TV'] = Event(MENU_GOTO_TVGUIDE)
   * EVENTS['global']['VIDEOS'] = Event(MENU_GOTO_VIDEOS)
   * EVENTS['global']['PICTURES'] = Event(MENU_GOTO_IMAGES)
   * EVENTS['global']['GUIDE'] = Event(MENU_GOTO_TVGUIDE)
   * EVENTS['global']['MUSIC'] = Event(MENU_GOTO_MUSIC)
   * EVENTS['global']['RADIO'] = Event(MENU_GOTO_RADIO)
   * EVENTS['global']['DISPLAY'] = Event(MENU_GOTO_MAINMENU)
   * EVENTS['global']['BACK'] = Event(MENU_BACK_ONE_MENU)

Les 2 derniers permettent de retourner directement au menu principal avec la touche DISPLAY (chez moi en haut à gauche appelée Go), et de remonter d'un niveau dans les menus avec la touche 'Back/Exit' .

Ma touche Go n'était pas configurée correctement, il m'a donc fallu éditer le fichier /etc/freevo/lircrc, puis vérifier que vous avez la section :

begin
    prog = freevo
    button = go
    config = DISPLAY
end

Sinon, changez la valeur du paramètre 'config'. Cette fonction DISPLAY est assez importante car elle sera utilisée pour la suite.

J'ai en plus de ça rajouté quelques mapping pour l'audio (le réglage du son ne fonctionnait pas par défaut) :

   * EVENTS['global']['BACKTRACK'] = Event(PLAYLIST_PREV)
   * EVENTS['global']['FFWD'] = Event(PLAYLIST_NEXT)
   * EVENTS['global']['MIXER_VOLUP'] = Event(MIXER_VOLUP, arg=5)
   * EVENTS['global']['MIXER_VOLDOWN'] = Event(MIXER_VOLDOWN, arg=5)

La valeur du paramètre 'arg' correspond au pourcentage d'augmentation / diminution du son lorsque l'on appuie sur la touche de réglage du volume.

Vous pourrez par la suite modifier vous même les actions de votre télécommande via ces paramètres, la forme générale étant :

EVENTS['SCENE']['TOUCHE'] = Event(EVENEMENT, arg=PARAMETRE)

Les touches étant celles définies pour les paramètres config dans /etc/freevo/lircrc et les événements étant décrit dans le fichier event.py.

Clavier

Le but avoué de ce montage étant de ne plus avoir à utiliser que la télécommande, et ceci étant le cas chez moi, j'ai pu désactiver le clavier :

   * USE_SDL_KEYBOARD = 0

Cependant, laissez ce paramètre commenté / à 1 si vous comptez utiliser le clavier.

Commande des événements

Notre télécommande étant gérée par LIRC, on peut désactiver le paramètre EVENT_DEVS :

   * EVENT_DEVS = []

Réseau

Freevo peut utiliser de nombreux services via Internet pour récupérer le programme télé, écouter les webradios, rechercher des données sur un morceau / un CD, etc. Il semble donc plus qu'utile d'activer le réseau :

   * USE_NETWORK = 1

Attention, ceci ne gère pas la configuration du réseau. il vous faut donc vous assurer que votre ordinateur est connecté à internet avant le lancement de Freevo.

Gestion du cache

Freevo peut garder un certain nombre de données en cache pour accélérer l'utilisation. Le paramètre MEDIAINFO_USE_MEMORY défini l'utilisation de la mémoire vive pour le cache. Ayant peu de mémoire, j'ai défini le paramètre sur 0, ce qui permet de garder uniquement le répertoire courant en mémoire. Si vous avez plus de mémoire, vous pouvez définir le paramètre sur 1 ou sur 2.

   * MEDIAINFO_USE_MEMORY = 0

On active également le cache des images :

   * CACHE_IMAGES = 1

Fils RSS

Freevo intègre un lecteur de news plutôt simplissime, il suffit de l'activer car il ne l'est pas par défaut :

   * plugin.activate('headlines', level=45)
     Ensuite, le paramètre HEADLINES_LOCATIONS contient des tuples avec le nom du fil et l'adresse du fichier xml. Par défaut j'y ajoute 2 fils de nouvelles et le fil de notre planet préféré :
   * HEADLINES_LOCATIONS = [ ('LÉXPRESS', 'http://www.feediz.com/synd/1500.xml'), ('Echos Du Net','http://www.feediz.com/synd/1870.xml'), ('PUF','http://planet.ubuntu-fr.org/feed/rss2'),]

S'ensuit de nombreuses lignes de commentaires que vous pouvez observer (notamment le passage sur le CDROM, je ne l'ai pas activé n'ayant pas de lecteur).

Vidéo

La configuration de la lecture des vidéos est une fois encore pas très compliquée. Il suffit presque de définir les répertoires dans lesquels sont stockés les vidéos (vous vous rappelez, les 'rien' du début) :

   * VIDEO_ITEMS = [ ('Vidéos', ' votreuser/Videos'), ('USB', '/media/sda3') ]
     Pour définir des répertoires, le format est le suivant : [ ('NOM','/path/du/repertoire'), ('autrenom','autrepath') ].
     Si les répertoires n'existent pas, ils ne seront pas affichés grâce à notre HIDE_UNUSABLE_DISCS du début. Par conséquent, on peut se permettre de définir ici des points de montage n'acceuillant pas forcément quelque chose (disque externe pour moi).
     Il faut par contre, si le répertoire existe et n'est pas vide, que les permissions soient bonnes.
     Le choix par défaut pour le lecteur vidéo est mplayer, ce qui convient très bien, donc :
   * VIDEO_PREFERED_PLAYER = 'mplayer'

Audio

C'est un peu le même topo que pour le paramétrage de la partie vidéo, il suffit de définir les répertoires, le player, les formats audios :

   * AUDIO_ITEMS = [ ('Musique', '/home/votreuser/Musique'), ('USB','/media/sda2'), '/usr/share/freevo/fxd/webradio.fxd' ]
   * AUDIO_SUFFIX = [ 'mp3', 'ogg', 'wav','m4a', 'wma', 'aac', 'flac', 'mka' ]
   * AUDIO_PREFERED_PLAYER = 'mplayer'

Et voilà ... Comment ça non ? Ah oui, vous ne voyez pas ce qu'est ce paramètre bizarre : '/usr/share/freevo/fxd/webradio.fxd' .

C'est en fait le moyen qu'utilise freevo pour vous permettre d'écouter des WebRadios. Il utilise un fichier basé sur du xml contenant les descriptions des flux. Une base pour ce fichier est téléchargeable à l'adresse http://membres.lycos.fr/gouchi2k1/files/webradio-freevo.tar.bz2http://membres.lycos.fr/gouchi2k1/files/webradio-freevo.tar.bz2. Il vous suffit donc de faire :

wget http://membres.lycos.fr/gouchi2k1/files/webradio-freevo.tar.bz2

tar xvjf webradio-freevo.tar.bz2

sudo cp -a Webradio/src/img/ /usr/share/freevo/fxd/

sudo cp Webradio/src/webradio.fxd /usr/share/freevo/fxd/webradio-french.fxd

Si jamais vous trouvez un fichier plus complet, n'hésitez pas à le partager !

Ce fichier sera lu par Freevo qui y reconnaîtra une liste de Webradios qu'il vous proposera classée par thèmes dans le menu Musique.

Il va également être intéressant d'activer le plugin audio.detach :

   * plugin.activate('audio.detach')

Ce plugin permet de continuer à écouter de la musique sans rester bloqué sur le player, ce qui permet par exemple de regarder des photos ou de lire les news pendant ce temps. Une fois le morceau lancé, pour quitter l'écran, il suffit d'appuyer sur la touche ... DISPLAY (je vous avais dit qu'elle serait utile). Le player se range alors dans la barre en haut de l'écran et vous pouvez naviguer comme vous voulez dans Freevo.

Les images

Comme précédemment, configuration assez rapide et explicite :

   * IMAGE_ITEMS = [ ('Photos', ' votreuser/photos') ]
   * IMAGE_SUFFIX = [ 'jpg','gif','png','jpeg','bmp','tiff','psd' ]
     Vous pouvez définir des fichiers de slideshow permettant un défilement automatique des images.
     Il vous suffit alors de préciser l'extension de ces fichiers :
   * IMAGE_SSHOW_SUFFIX = [ 'ssr' ]
     Vous pouvez laisser ce paramètre commenté si vous ne prévoyez pas de l'utiliser.
     Freevo permet également une transition un peu plus belle qu'un bête changement d'image :
   * IMAGEVIEWER_BLEND_MODE = -1

0 fait un effet de transparence, 1 déplace la photo, et -1 fait les 2 de façon aléatoire.

Jeux

N'utilisant pas les jeux sur Freevo, je n'ai simplement rien activé dans cette partie.

Skin

Un certain nombre de thèmes sont inclus dans le paquets de Freevo, vous pouvez les voir dans le répertoire /usr/share/freevo/skins/main/, qui contient pour chaque thème le fichier fxd du thème et une image du thème 'en action'. Il vous suffit, une fois votre thème choisi, de faire :

   * SKIN_XML_FILE = 'mediaportal'
     (le nom du thème sans le .fxd pour ceux qui n'auraient pas compris). Vous pouvez également changer de skin en appuyant sur la touche display alors que vous êtes sur le menu principal.

Polices de caractères

Freevo peut utilisé des polices de caractères autres que celles inclues par défaut, il faut pour cela lui préciser où :

OSD_EXTRA_FONT_PATH = [ '/usr/X11R6/lib/X11/fonts/truetype/' ]

Vous pouvez également jouer un son lors des déplacements dans le menu grâce au paramètre OSD_SOUNDS (ce que je n'ai pas fait).

Télécommande

Pour activer lirc, rien de plus simple :

LIRCRC = '/etc/freevo/lircrc'

Oui oui, c'est tout :) (sauf bien sur qu'il est nécessaire que lircd se lance au démarrage et soit fonctionnel, ce que je ne détaillerais pas ici)

Mplayer

Comme Freevo utilise par défaut le logiciel Mplayer pour la lecture des fichiers audios et vidéos, on peut le paramétrer un peu via ce fichier de configuration :

MPLAYER_AO_DEV = 'alsa' DVD_LANG_PREF = 'fr,en'

Il faut également vérifier que les options pour mplayer contiennent bien le dvb :

MPLAYER_ARGS = { 'dvb' : '-vf pp=md -cache 1024', 'dvd' : '-cache 8192', 'vcd' : '-cache 4096', 'cd' : '-cache 1024 -cdda speed=2', 'tv' : '-nocache', 'ivtv' : '-cache 8192', 'avi' : '-cache 5000 -idx', 'rm' : '-cache 5000 -forceidx', 'rmvb' : '-cache 5000 -forceidx', 'webcam' : 'tv:// -tv driver=v4l:width=352:height=288:outfmt=yuy2:device=/dev/video2', 'default': '-cache 5000' }

De nombreuses autres customisations sont possibles mais les choix par défaut sont largement assez performants pour moi :)

Il reste encore à définir les chaînes pour mplayer. Récupérez à l'adresse http://www.linuxtv.org/cgi-bin/viewcvs.cgi/dvb-apps/util/scan/dvb-t/ le fichier qui correspond au mieux à votre localisation géographique. Ensuite récupérez les chaînes par la commande :

scan fichierRecupéré > channels.conf

Le binaire scan se trouve dans le paquet dvb-utils. Une fois le fichier créé, il faut le mettre dans le répertoire de mplayer :

mv channels.conf /.mplayer/

Enregistrements

Le paramétrage de l'enregistrement se fait en précisant un répertoire de sauvegarde :

TV_RECORD_DIR = "/home/votreuser/Records"

L'enregistreur de Freevo est un service dédié séparé de freevo, et communiquant via socket réseau (cela peut par exemple permettre de l'avoir sur un autre ordinateur).

//TODO détailler la configuration de l'enregistreur que je n'ai pas encore mis en place

Paramétrage de la télé

C'est sûrement une des sections les plus complète, pour ne pas la détailler, voici ce qui peut être intéressant :

TIMESHIFT_BUFFER_SIZE = 512 TIMESHIFT_ENCODE_CMD = 'mp1e -m3 -c%s -p%s -r14,100' % (TV_SETTINGS.split()[3], AUDIO_INPUT_DEVICE) TIMESHIFT_BUFFER = '%s/timeshift.mpeg' % FREEVO_CACHEDIR

Cela correspond aux paramètres d'enregistrement pour le 'direct décalé'. La taille du buffer influence directement le temps de pause maximal.

Il est également possible de modifier l'affichage de la date, la description à ce sujet étant très détaillée dans le fichier de configuration.

TV_RECORDFILE_MASK = '%%m-%%d %%H:%%M %(progname)s - %(title)s'

Cette option vous permet de définir le format du nom de fichier des enregistrements.

TNT

La configuration de la TNT se détaille en 2 parties, la première au sein de ce fichier de configuration :

VIDEO_GROUPS[0].group_type = 'dvb'

TV_CHANNELS = [('C1.telepoche.com', 'TF1', 'TF1' ), ('C2.telepoche.com', 'France 2', 'France 2' ), ('C3.telepoche.com', 'France 3', 'France 3' ), ('C4.telepoche.com', 'Canal +', 'Canal +' ), ('C7.telepoche.com', 'France 5', 'France 5' ), ('C6.telepoche.com', 'M6', 'M6' ), ('C5.telepoche.com', 'Arte', 'Arte' ), ('C167.telepoche.com', 'Direct 8', 'Direct 8' ), ('C38.telepoche.com', 'W9', 'W9' ), ('C9.telepoche.com', 'TMC', 'TMC' ), ('C168.telepoche.com', 'NT 1', 'NT 1 ' ), ('C169.telepoche.com', 'NRJ 12', 'NRJ 12' ), ('C170.telepoche.com', 'LCP', 'LCP' ), ('C28.telepoche.com', 'France 4', 'France 4' ), ('C122.telepoche.com', 'I<TV', 'I<TV' ), ('C193.telepoche.com', 'Europe 2 TV', 'Europe 2 TV' ) ]

Le premier champ de chaque entrée doit correspondre au nom donné par xmltv pour pouvoir avoir les programmes (ce qui est le cas ici)

Reste à préciser à Freevo d'utiliser _tv_grab_fr pour récupérer les programmes :

XMLTV_GRABBER = 'tv_grab_fr' XMLTV_DAYS = 1

Le deuxième paramètre correspondant au nombre de jour de programme à récupérer. Il suffira pour cela de lancer la commande 'freevo tv_grab' une fois xmltv configuré.

Si votre media center est éteint tous les jours, il peut être intéressant de mettre cette commande au démarrage (on le verra plus tard). Si il reste allumer, le meilleur moyen reste encore de le mettre dans un cron.

Les lignes de configurations suivantes permettent le fonctionnement de différents daemon de Freevo, tels qu'un serveur de news RSS, un serveur Web pour le contrôle à distance, etc ... Nous ne l'utiliseront pas ici, et je ne le détaillerait donc pas !

S'ensuivent à nouveau quelques paramètres de configurations de xmlTV :

XMLTV_FILE = '/tmp/TV.xml'

Fichier dans lequel seront stockées les chaînes

TV_LOGOS = OS_CACHEDIR + '/xmltv/logos'

Cela permettra de récupérer les logos des chaînes et de les stocker dans ce répertoire (devant exister). Il faudra pour cela faire une fois la commande :

freevo makelogos

Et enfin, définition de la locale :

LOCALE='utf-8'

Bar d'état

La barre d'état, ou 'Idle bar' se situe en haut de Freevo, et peut contenir un certain nombre d'items, tels que l'état de la TV, du disque, l'heure. Un exemple de paramétrage est :

plugin.activate('idlebar')

plugin.activate('idlebar.tv', level = 20)

plugin.activate('idlebar.diskfree', level = 30)

plugin.activate('idlebar.clock', level = 50)

plugin.activate('idlebar.system.procstats',level=20)

CLOCK_FORMAT = '%a %d %H:%M'

DISKFREE_VERY_LOW = 20

DISKFREE_LOW = 50

Les DISKFREE* correspondent aux changements de couleurs de la bar de place restante (en GigaOctets).

Amazon

Le site Amazon.com peut vous permettre de télécharger les pochettes de CD. Il faut pour cela créer un compte à l'adresse http://www.amazon.com/webservices, puis récupérer sa clé de "développeur".

Il vous reste ensuite à ajouter ces lignes :

AMAZON_LOCALE = 'us' AMAZON_QUERY_ENCODING = 'utf-8' plugin.activate('audio.coversearch', args=('1234567890AZERTYUIO'))

Malheureusement, 'fr' ne fait pas parti des locales supportées.

Domotique

Si vous utilisez du X10, pour, par exemple, contrôler vos prises, un petit plugin vous permettra de le faire à partir de Freevo.

Si vous n'en avez pas, passez cette partie :)

Il fait tout simplement appel à un programme externe. J'utilise heyu car il est simple d'utilisation et fonctionne pas trop mal. il n'est pas dans les dépôts, mais est téléchargeable http://heyu.tanj.com/heyu/http://heyu.tanj.com/heyu/ et se compile tout seul.

Une fois ce logiciel installé, il vous suffit d'ajouter ceci à la fin de votre fichier de configuration :

plugin.activate('home_automation') AUTOMATION_ITEMS = [('Chambre', , ('Lampe',('Allumer','heyu on A2','Éteindre','heyu off A2')), ('Parfum',('Allumer','heyu on A3','Éteindre','heyu off A3')) )]

La syntaxe de la variable AUTOMATION_ITEMS est : [ ('LIEU',,('MODULE2',( ...))) ] .

Ici par exemple, j'ai une seule pièce, la chambre, ayant une guirlande, une lampe et un diffuseur de parfum, que je peux allumer ou éteindre, ce qui appellera la commande ' heyu (on|off) Ai' .

Cela sera représenté sur Freevo par un nouveau menu avec les éléments par pièce.

Vous pouvez maintenant contrôler vos lumières (et bien plus) via votre télécommande !

Paramétrages externes

Voilà, votre Freevo commence à être un tantinet fonctionnel, reste maintenant à l'installer bien comme il faut sur votre système

Nettoyage

Bon, vous n'avez besoin que d'un serveur X, à la poubelle les diverses Windows Manager, Freevo se gère lui même comme tel. Vous pouvez donc juste garder les xserver-xorg-* et épargner les quelques Mo occupés par vos WM. Il vous faut également les logiciels utilisés par Freevo, à savoir :

MPlayer

xmlTV

Heyu (si vous faites du X10)

Éventuellement autre chose si vous avez activé d'autres options comme l'encodage de CD audios.

Pour heyu, récupérez l'archive sur le site (cf url plus haut), décompressez là, puis ./Configure (attention au 'C'), make && sudo make install . Il faut que votre adaptateur soit branché pour le make.

XmlTV

Reste à configurer xmlTV, pour cela ouvrez un terminal, et dans le homedir de l'utilisateur, effectuez :

tv_grab_fr -configure

Qui vous demandera les chaînes à récupérer.

Freevo peut utiliser lui même xmltv avec les configurations qu'on lui a fourni. Mon MediaCenter étant arrêté tous les jours, j'ai pris le parti de mettre l'update dans le .xinitrc.

Si vous le laissez allumé plus souvent, il serait plus judicieux de le rajouter dans le crontab.

Donc éditez le votreuser/.xinitrc, puis ajoutez y:

/usr/bin/freevo tv_grab &

/usr/bin/freevo

N'oubliez pas l'esperluette sur la première ligne, car l'opération prend du temps et vous risquez donc d'attendre au démarrage si vous la mettez pas.

Serveur SSH

Il pourra être (très) intéressant de pouvoir accéder à notre media center à distance, pour cela :

sudo apt-get install openssh-server

Montage USB

N'ayant pu de daemon Gnome / KDE / smthgelse pour gérer les mounts USB, on va installer et configurer ivman :

apt-get install ivman

Puis éditez (en sudo), le fichier /etc/ivman/IvmConfigBase.xml, qui contient les paramètres principaux d'IvMan.

Nous allons modifier l'utilisateur sous lequel les partitions seront montées :

<ivm:Option name="user" value="VOTREUSER" />

Il peut également s'avérer utile de définir directement les mounts directement dans /etc/fstab, rien de bien compliqué, le format de la ligne étant :

/dev/sdaX /media/mountpoint ext3 user 0 0

Cependant, l'inconvénient des disques USB est qu'ils ne sont pas forcément toujours reconnus de la même façon, c'est à dire qu'il pourra lors d'un démarrage se trouver en /dev/sdaX, puis lors d'un autre sur /dev/sdbX .

Pour contourner ce problème, une des méthodes simple est d'utiliser les labels. Sur des disques en ext2/3, le plus simple étant d'utiliser e2label.

Branchez votre disque dur externe, regardez si il est en /deb/sda, /dev/sdb, ou autre (vous verrez des chiffres correspondant au numéro des partitions.

Une fois vos partitions identifiées, il vous suffit de faire :

sudo e2label /dev/sdaX MonLabel

Et votre partition portera désormais le nom "MonLabel".

Il suffit ensuite de modifier la première partie de la ligne du /etc/fstab :

LABEL=MonLabel /media/mountpoint ext3 user 0 0

Et voilà votre partition qui se montera quelque soit sa correspondance système.

Getty

On à presque fini tout notre petit montage (on se réveille au fond de la classe). Reste un petit détail : Activer l'auto-connexion au compte de l'utilisateur lors du démarrage.

Pour cela, éditez le fichier /etc/event.d/tty6 .

Ces fichiers servent à définir le comportement des tty (les textes bizarre sur écran noir :))

Remplacez la dernière ligne qui doit être :

exec /sbin/getty 38400 tty6

Par :

exec /sbin/mingetty -noclear -autologin tele tty6

Enregistrez et fermez le fichier, puis un petit :

sudo apt-get install mingetty

PS: On pourrait encore optimiser un peu le système en désactivant certains tty au démarrage et en en gardant pas exemple que 2 tty.

Si vous désirez le faire, éditez les fichiers /etc/event.d/tty[2345], puis enlevez les lignes commençant par 'start' .

Pour finir

Bon, bah il me semble que nous avons fait le tour de la configuration.

Un dernier petit détail pourrait être d'alléger les services au démarrage. Pour cela je conseille l'utilisation de sysv-rc-conf :

sudo apt-get install sysv-rc-conf && sudo sysv-rc-conf

Il ne vous reste plus qu'à décocher les programmes ne devant pas être lancés au démarrage.

Attention ... Reboot final, vérifiez que vous avez bien tout enregistré, puis redémarrez.

Python Classroom - 2ème épisode

Les 2 heures sont vites passées lors de la dernière session sur Python... et beaucoup de questions sont restées en suspens.

La prochaine session classroom sur Python sera en partie consacrée à répondre aux interrogations levées lors de la précédente session, en entrant un peu plus dans le détail sur les sujets déjà abordés. On verra aussi quelques nouveautés bien sûr !

Ca se passera sur le canal irc #ubuntu-fr-classroom du réseau freenode, mardi 23 octobre à 20H heure française (métroplitaine, 18H00 UTC).

Le résumé de la première session est en ligne. N'hésitez pas à embarquer vos questions avec vous mardi, ou à passer sur le chan d'ici là !

Sessions Python

Une nouvelle session de la classroom est prévue ce mardi 16 octobre 2007 à 20h (heure parisienne).

On y abordera le langage python (les débutants en programmation sont les bienvenus), et d'autres sessions viendront compléter ce premier cours par la suite.

A mardi !

Edit : ça se passe sur le canal #ubuntu-fr-classroom sur le réseau irc freenode (merci à KiKouN pour le rappel ;) )

Session Apache/HTTP

Certains se croient encore en vacances et remettent sans cesse leurs projets au lendemain, mais il faut bien se mettre au travail à un moment donné.

Voila donc pour vous une session HTTP/Apache. Bien que l'on parlera du célèbre serveur web, son installation et sa configuration basique l'accent sera mis sur le principe des serveurs webs en général, d'ou une partie importante sur HTTP.

Rendez-vous le mardi 2 octobre à 20h30 heure de Paris (UTC+0200), comme toujours sur le channel irc #ubuntu-fr-classroom (serveur irc.freenode.net).


Prérequis pour ce cours qui s'annonce passionnant (sisi) :
  • Un système ubuntu (ou debian)
  • Avoir déjà utilisé la ligne de commande (se déplacer dans un répertoire, obtenir les droits root)
L'installation sera vue durant le cours mais les utilisateurs en 56k peuvent dès à présent télécharger les paquets suivants : apache2 apache2-mpm-prefork libapache2-mod-php5.

A bientôt !

Non, ce n'est pas la rentrée !

Bonjour à toutes et à tous,
comme vous l'aurez sûrement remarqué cela fait un petit peu de temps que la classroom est au repos (ceci n'ayant bien sûr aucun rapport avec les vacances).

Malgré tout, dans un élan de motivation collectif, quelques uns (FiFouille et moi même, pour ne citer qu'eux) on décidé de vous proposer une présentation de la cryptographie et de l'outil GnuPG. Seulement voila, il faut trouver le temps de faire ça entre les moments de travail (glande ?) et du fait de notre organisation pointue, cette session aura lieu dans le courant de la semaine 38. Nous vous tiendrons au courant de la date précise.

Je n'allais bien sûr pas faire un billet pour vous expliquer qu'une session allait avoir lieu dans deux semaines bien sûr, mais pour vous annoncer que mardi 11 septembre, à partir de 20 heures (heure de Paris) allait avoir lieu une petite session sur l'introduction au fonctionnement des réseaux locaux.
Pourquoi une petite session allez vous me demander ? En fait, petite n'est pas le mot approprié, mais le concept de cette session ne va pas être de faire une présentation théorique et complète sur les LANs (Local Area Network). Mais plutôt de vous présenter quelques concepts simples, démystifier un peu le fonctionnement, et vous amener ainsi à vous poser des questions et à suivre un raisonnement logique.
Cette session se déroulera en deux parties: la première permettra de vous présenter quelques concepts, et la deuxième donc, de répondre à vos innombrables questions.

A mardi !

Le point sur les PPAs

Depuis peu, on a vu apparaître une nouvelle fonctionnalité sur Launchpad : les Personal Package Archives, ou PPAs.
Cet outil permet aux packageurs de tous horizons et tous niveaux de construire et héberger leurs propres paquets en profitant de la structure déjà mise en place par Canonical pour les dépôts officiels.

L'annonce de la mise à disposition des PPAs par l'équipe de développement de Launchpad a été accueillie de façon très enthousiaste par bon nombre de packageurs.
Les PPAs ont en effet un avantage indéniable pour le développement et l'assurance qualité des paquets, en permettant par exemple de tester ces derniers avant leur envoi dans les dépôts officiels Ubuntu.
Les équipes ont également la possibilité de créer leur propre PPA, facilitant le travail collaboratif, puisque les membres d'une même équipe (telle que Medibuntu ou MOTUMedia) ont la possibilité d'utiliser un PPA commun pour travailler sur leurs paquets.

Mais au-delà de tous ces intéressants aspects (pour le développeur), réside une source de problèmes pour l'utilisateur.
Une dérive possible de l'utilisation des PPAs est le phénomène Pidgin.
En effet, lors du renommage de Gaim vers Pidgin, on a vu fleurir de nombreux paquets non-officiels... chacun se mettant à recréer depuis zéro son petit paquet personnel de plus ou moins bonne qualité (plutôt moins que plus d'ailleurs).
Il est aisé de prédire que ceci va s'étendre aux PPAs. D'ici quelques semaines, on disposera probablement d'une bonne demi-douzaine de PPAs proposant le même programme pour une même version d'Ubuntu (par exemple, pidgin pour Ubuntu 6.06). Comment s'assurer de la qualité des paquets, comment gérer les conflits qui naîtront entre les différents PPAs ? Le problème, qui a déjà été évoqué a plusieurs reprises concernant les dépôts tiers, pourrait donc prendre une dimension bien plus importante cette fois.

Il faut savoir que les PPAs sont également utilisés par les développeurs Ubuntu, et donc que la construction de 12 paquets Pidgin engendre une attente non négligeable pour ces packageurs.

L'argument récurrent concernant la légitimité de dépôts tiers est la mise à disposition de versions plus récentes de logiciels. C'est un argument fallacieux. Les versions stables d'Ubuntu le sont en grande partie grâce au gel des versions des logiciels. Importer une nouvelle version c'est ajouter un gros risque de bugs, de régressions ou de problèmes de dépendances, en particulier lors de mises à jours de bibliothèques ou de logiciels système (une mise à jour de dbus peut apporter beaucoup plus de soucis que de nouveautés). C'est d'ailleurs pour cette raison que les mises à jour pour les versions stables d'Ubuntu sont aussi limitées que possible (et n'apportent *jamais* de nouvelles versions de logiciels).

Un autre argument très souvent avancé est la mise à disposition de paquets n'existant pas dans Ubuntu (ou dans Debian). Il existe déjà des structures telles que http://mentors.debian.net/ ou encore http://revu.tauware.de/ qui permettent de proposer des paquets à l'inclusion dans les dépôts officiels Debian et Ubuntu.
De plus, si vous avez besoin d'aide, <pub>le chan #ubuntu-fr-classroom@irc.freenode.net est toujours peuplé de MOTU/core-dev/aspirants Développeurs Debian prêts à vous accueillir avec le sourire, dans la joie et la bonne humeur</pub>.

Conclusion: utilisez les PPA avec précaution (néanmoins si vous désirez réellement casser votre système, vous pouvez également utiliser Automatix2, efficacité garantie)

(Ce billet est fièrement propulsé par Gobby !)

LANG=C

Si un jour vous avez à écrire un script qui parse la sortie std{in,err} d'un programme, pensez à le lancer dans une langue donnée en mettant à jour la variable d'environnement LANG.

Ca peut vous éviter une prise de tête pas possible pour comprendre pourquoi le script a décidé de ne plus fonctionner du jour au lendemain (oui oui, c'est du vécu).

Exemple :

gauvain@joe:~# parted --script /dev/sda print | grep "^Disk" | awk '{print $3}' | sed 's/GB//'
160
gauvain@joe:~# LANG=fr_FR.UTF8 parted --script /dev/sda print | grep "^Disk" | awk '{print $3}' | sed 's/GB//'
gauvain@joe:~# 

Prochaine session classroom: Initiation au packaging Debian/Ubuntu

Une de vos application préférée pas encore packagée ? Vous souhaiteriez vous en charger vous-même, ou tout simplement apprendre à packager des softs pour Debian/Ubuntu ? Dans ce cas ce cours est fait pour vous, rendez-vous le vendredi 13 Juillet à 18H UTC (20H à Paris) sur le canal #ubuntu-fr-classroom du réseau freenode (irc.freenode.net).

Nous verrons dans un premier temps de quoi est constitué un package Debian, puis comment en créer un manière (pas puis plus) propre, et enfin comment faire pour que son paquet soit inclus dans les Dépôts officiels de notre distribution préférée :-)

Prérequis pour le cours:

  • Avoir installé pastbinit (sudo aptitude install pastebinit)
  • Avoir installé debhelper cdbs linda build-essential fakeroot devscripts pbuilder dh-make debootstrap (sudo aptitde install...)
  • Avoir installée la version suivante de lintian: http://people.dunnewind.net/arthur/... (wget puis dpkg -i, ou gdebi...)
  • Si possible avoir déjà Compilé un programme et éventuellement savoir ce qu'est un Makefile
  • Avoir déjà utilisé la ligne de commande

Rassurez vous si ces deux dernières notions ne vous sont pas encore familières, elle seront brièvement expliquées pendant le cours ;-)

Note: ce cours est aussi valable pour Debian que Ubuntu, donc utilisateurs Debian, venez nombreux !

A vendredi !

- page 2 de 3 -

-->