sec_error_untrusted_issuer dans Firefox/Iceweasel ou Thunderbird/Icedove

Avec la récente faille dans OpenSSL, bon nombre de certificats ont dû être révoqués et remplacés par de nouveaux. Ce changement a pu déclencher dans Firefox (ou Iceweasel) une alerte pour certaines pages ressemblant à ceci :

\"Alerte

Cette alerte peut sembler familière puisqu\’elle ressemble à la demande d\’ajout d\’exception pour les certificats qui ne sont pas délivrés par les \ »autorités de confiance\ ». Or ici, il s\’agit au contraire d\’une erreur de type \ »sec_error_untrusted_issuer\ » dont la seule issue proposée est de quitter la page… Sur Thunderbird (ou Icedove) la comportement est un peu différent. Des pop-ups s\’affichent régulièrement vous demandant si vous souhaitez accepter le certificat attestant de l\’identité du serveur que vous tentez de joindre. J\’ai eu beau valider une bonne dizaine de fois, la question revient en boucle. Bref, en bricolant un peu, j\’ai trouvé une solution qui remet tout ça en ordre. L\’idée est d\’aller supprimer les références à l\’ancien certificat dans une des bases de données attachées à Firefox et Thunderbird (chacun ayant la sienne). Et c\’est dans permissions.sqlite qu\’il nous faudra intervenir. La seule chose dont vous aurez besoin est du paquet sqlite3 (apt-get install sqlite3 sous Debian et dérivés). On commencera par quitter les applications concernées. Allons-y :

cd ~/.mozilla/firefox/

Pour Icedove, il faudra effectuer la même opération mais dans le dossier ~/.icedove (et probablement ~/.thunderbird dans les autres cas).
Nous allons maintenant ouvrir la base de données permissions

sqlite3 permissions.sqlite

Pour plus de lisibilité avec les requêtes SQL que nous allons effectuer, il est recommandé d\’entrer les deux commandes suivantes permettant d\’une part d\’afficher le nom des champs et d\’autre part de fournir un affichage propre sous forme de tableau.

sqlite> .headers on
sqlite> .mode column

La requête suivante va lister toutes les exceptions ajoutées dans l\’application concernant les certificats qui ne sont pas délivrés par les \ »autorités de confiance\ ».

sqlite> SELECT * FROM moz_hosts;

On va ensuite chercher les enregistrements qui concernent le nom de domaine ayant provoqué l\’erreur dans le navigateur ou les pop-ups dans le client mail.

sqlite> SELECT * FROM moz_hosts WHERE host LIKE \'%aquilenet%\';

De mon côté, cette requête a donné ceci :

id          host                type        permission  expireType  expireTime     appId       isInBrowserElement
----------  ------------------  ----------  ----------  ----------  -------------  ----------  ------------------
133         cloud.aquilenet.fr  sts/use     1           2           1430744362518  0           0                 
134         cloud.aquilenet.fr  sts/subd    2           0           0              0           0

Il suffit donc de supprimer ces deux enregistrements de cette façon et de quitter la session sqlite.

sqlite> DELETE FROM moz_hosts WHERE id=133 or id=134;
.quit

Et voilà ! Il ne reste plus qu\’à relancer le navigateur ou le client mail et le tour est joué !

Installer driver graphique fglrx 12.6 sous Debian Wheezy

Depuis quelques temps le pilote graphique propriétaire (fglrx) pour les cartes AMD/ATI n\’est plus disponible pour la distribution Debian Testing (Wheezy). Suite à une mise à jour du serveur X, le paquet fglrx-driver version 12.4 devint obsolète [1]. AMD a travaillé sur le problème et a proposé une version 12.6 du pilote mais celui-ci n\’est pas encore disponible dans les dépôts. Le pilote est encore jugé non stable et non sécurisé, il reste donc uniquement disponible pour la version sid ou experimental de Debian [2].
Une première solution évidente consiste à utiliser le driver libre (xserver-xorg-video-ati). Malheureusement celui-ci n\’est pas exempt de bugs et peut engendrer des comportements incommodants. Dans mon cas si l\’écran s\’éteint pour une mise en veille ou pour une économie d\’énergie il sera impossible de le rallumer…La machine sort bien de sa veille mais l\’écran reste noir. Ce comportement n\’était pas présent avec la vielle version du pilote propriétaire, j\’ai donc décidé de forcer le retour de ce driver sur ma distribution. L\’idée est d\’utiliser les paquets de la branche instable [3].

Pré-requis

Il faut vous assurer que les \ »headers\ » du noyau sont installés. Ils permettront la compilation du driver. (Le nom du paquet a installé va différer si vous utilisez une version 32bit.)

sudo apt-get install linux-headers-amd64

Installation du driver

Pour ce faire on va utiliser temporairement les dépôts de la branche instable (sid). Cela passe par une modification du fichier sources.list.

sudo gedit /etc/apt/sources.list

Maintenant rajoutons les lignes suivantes à la fin du fichier

deb http://ftp2.fr.debian.org/debian/ sid main contrib non-free
deb-src http://ftp2.fr.debian.org/debian/ sid main contrib non-free

Dans un terminal, on rafraichit la liste des paquets et on installe le driver

sudo apt-get update
sudo apt-get install fglrx-atieventsd fglrx-driver fglrx-modules-dkms fglrx-control

Ensuite on réouvre le fichier /etc/apt/sources.list et on enlève les lignes que l\’on a rajouté (celle avec \ »sid\ »). Il ne faut pas sauter cette étape pour éviter des mises à jour indésirables par la suite.

Mise en route

Il reste quelques manips à faire pour être sûr que le prochain redémarrage n\’aboutira pas sur un écran noir. La première chose à faire est de lancer l\’utilitaire ati pour créer un fichier xorg.conf.

sudo aticonfig --initial

Ensuite, si le driver libre (radeon) était utilisé, on va s\’assurer qu\’il ne sera pas chargé au redémarrage. Il suffit d\’ouvrir le fichier suivant (ou de le créer)

sudo gedit /etc/modprobe.d/radeon-kms.conf

et d\’ajouter ou d\’éditer la ligne

options radeon modeset=0

Pour faire simple on redémarre et tout devrait fonctionner!

Conclusion

Normalement vous devriez avoir le pilote propriétaire fonctionnel sur votre machine. Cela permet de gagner en confort en attendant qu\’il soit officiellement dans les dépôts.
Cette manipulation peut s\’appliquer à d\’autres paquets. Le principe consiste à aller chercher une version plus récente dans les dépôts instable. Par contre le risque consiste à introduire des paquets jugés non fiable dans sa distribution. Il faut donc bien lire les rapports de bugs avant de les installer.

Références

[1] Debian Wheezy status of fglrx-driver
[2] fglrx-driver source package
[3] forum : install fglrx driver 12.6 legacy dans wheezy

Ajouter une barre des tâches dans GNOME Shell (tint2)

On va aborder ici un point sensible de GNOME Shell : la suppression pure et simple de la barre des tâches. Certains sont plutôt d\’accord avec cette décision et s\’en sortent très bien avec la fenêtre des activités et les nombreux raccourcis clavier. D\’autre au contraire sont vraiment gênés par ça et cherchent désespérément leurs fenêtres partout. Je pense être en ce moment un peu entre les deux… Et bien que je sois partisan du \ »tout clavier\ » ou presque, je pense que ce que je vais vous proposer va intéresser du monde.

En me baladant un peu sur le net, je suis tombé sur un projet intéressant appelé tint2. Il se présente comme une barre des tâches non intrusive et légère. Ce projet est visiblement toujours maintenu puisque des commits ont eu lieu en mars dernier. Enfin, et c\’est là où c\’est intéressant : tint2 s\’intègre très bien dans GNOME Shell!

Installation sous ArchLinux

L\’installation sous ArchLinux est simple :

$ sudo yaourt -S tint2

Et pour voir à quoi ça ressemble :

$ tint2
\"tint2\"

Cette barre des tâche est entièrement configurable mais nous y reviendront un peu plus loin. Quoi qu\’il en soit, si vous êtes conquis par cet outils, vous pouvez ordonner son lancement au démarrage en lançant dans un terminal :

$ gnome-session-properties

Puis ajoutez une entrée dont la commande sera tint2. Enregistrez, fermez et le tour est joué!

À vous d\’adapter ensuite l\’installation en fonction de votre distribution. Dans le cas où cette application ne serait pas dans les dépôts, le dossier des sources contient un fichier INSTALL expliquant comment procéder manuellement.

Configuration

Comme je l\’ai évoqué précédemment, cette barre est entièrement paramétrable. Pour accéder à l\’interface de configuration, il suffit de lancer depuis un terminal :

$ tint2conf

Cliquez ensuite sur le premier bouton \ »Show properties\ ».

\"tint2conf\"

Je ne vais pas détailler entièrement cette éditeur de configuration vu que tout est très bien expliqué ici. En revanche, voici les quelques modifications que j\’ai apporté sur ma version :

  • Dans l\’onglet \ »Clock\ », j\’ai décoché \ »Show\ » de façon à supprimer l\’affichage de l\’horloge dans la barre des tâches. L\’affichage intégré dans GNOME Shell me convient parfaitement et je ne vois pas l\’intérêt d\’un doublon.
  • Dans l\’onglet \ »Mouse\ », j\’ai changé le clic droit (\ »Right Mouse Click Action\ ») de \ »close\ » à \ »none\ ». En effet, le clic droit qui ferme la fenêtre ne me plaisait pas du tout. Du coup je n\’ai donné aucun comportement au clic droit. Il est possible de lui donner le même comportement que le clic gauche mais après avoir essayé, j\’ai trouvé ça trop confus.
  • Enfin, j\’ai un peu adapté l\’opacité dans le premier onglet (\ »Background 1 > Background color\ ») pour que la barre soit un peu moins transparente.

Toute cette configuration est écrite dans le fichier texte $HOME/.config/tint2/tint2rc. Les commentaires sur cette page regorgent d\’exemples de configuration qu\’il peut être intéressant de regarder.

 

Pour conclure, je ne sais pas encore si je vais conserver cette barre de tâches. Je vais l\’essayer quelques jours et voir ce que ça donne. Ce que j\’aurais à lui reprocher dans un premier temps c\’est l\’absence de menu au clic droit et le systray fixe (ne réagit pas à la réception d\’un mail ou d\’un message sur empathy par exemple). Enfin, et c\’est le plus important, cette barre ne court-circuite-t-elle pas tout le principe de l\’interface GNOME Shell? Et vous, l\’avez vous essayé? Qu\’en avez-vous pensé?

Astuces en vrac pour GNOME Shell

\"KeyboardJe dois avouer, et ça en ravira sûrement certains, que j\’ai perdu un peu de mon enthousiasme des premiers jours concernant GNOME Shell. Je reste convaincu qu\’il y a de bonnes idées et je l\’utilise toujours quotidiennement, mais il est vrai que pour une utilisation \ »intensive\ », on perd peut-être en efficacité. Deux raisons à cela selon moi. La première concerne GNOME Shell lui-même, la seconde concerne l\’utilisateur. Gnome Shell, parce qu\’il est vrai que certains choix sont contestables. Il faut noter aussi que le projet est encore jeune et qu\’il sera forcément amélioré au fil du temps. L\’utilisateur ensuite, parce qu\’il faut réapprendre beaucoup de choses et ça demande du temps. Je vais donc vous donner aujourd\’hui quelques astuces souvent méconnues tirées de la documentation de GNOME Shell et qui me paraissent indispensables pour une utilisation optimale de l\’interface. Elles ne résolvent pas tous les problème mais débloquent bon nombres de situations et accélèrent considérablement certaines tâches.

Alt + ² (au dessus de la touche Tabulation)

Cette combinaison de touche est certainement celle qui m\’a le plus aidé à manipuler GNOME Shell correctement. Son principe est simple : elle se comporte comme Alt + Tab mais uniquement au niveau des fenêtres d\’une même application. Un exemple concret : vous avez 4 terminaux d\’ouverts et d\’autres fenêtre quelconques (firefox, thunderbird, etc…). Dès lors que vous avez le focus sur un terminal, la combinaison Alt + ² vous permettra de switcher entre les différents terminaux ouverts et non entre toutes les applications, comme le Alt + Tab.

\"Alt+²\"

Clic molette

Dans la fenêtre des activités comme dans le dock (si vous avez installé l\’extension), un clic molette sur une icône ouvre automatique l\’application dans un nouveau bureau. C\’est finalement assez pratique quand on a l\’habitude d\’en utiliser plusieurs. GNOME Shell nous pousse d\’ailleurs dans ce sens. À noter que le focus est alors donné au nouveau bureau contenant l\’application ouverte.

Ctrl + clic

Cette combinaison appliquée à une icône de la fenêtre d\’activités ou du dock permet d\’ouvrir une nouvelle instance de l\’application. C\’est un raccourci au clic droit > Nouvelle fenêtre. Peut-être qu\’une inversion de cette combinaison avec la précédente serait plus judicieuse. À voir à l\’utilisation.

\ »Drag and drop\ » d\’une icône sur un bureau

On s\’attaque là encore aux icônes. Dans la fenêtre d\’activités, en prenant une icône avec la souris et en la déplaçant sur un bureau (vide ou non), l\’application en question s\’ouvrira dedans le tout sans quitter la fenêtre d\’activité. On peut ainsi rapidement organiser ses espaces de travail au début d\’une session par exemple.

Zoom molette sur une application dans le fenêtre d\’activités

Ce n\’est pas l\’astuce la plus indispensable mais elle peut avoir son utilité. Dans la fenêtre d\’activités et sur l\’onglet \ »Fenêtres\ », toutes les fenêtre d\’applications ouvertes sont affichées en miniatures. Un roulement de molette sur l\’une d\’elles permet de zoomer/dézommer de façon à voir plus en détail son contenu.

\"Zoom

Ces quelques astuces demandent un petit temps d\’adaptation. C\’est un peu difficile au départ de se forcer à les utiliser mais à terme, on y gagne réellement. Si vous connaissez d\’autres combinaisons peu connues et qui peuvent avoir leur utilité, n\’hésitez pas à les poster en commentaire!

Désactiver une extension dans GNOME Shell

GNOME Shell, la surcouche à GNOME 3, a été pensé de façon à faciliter la création d\’extensions visant à modifier et adapter (améliorer?) son comportement. Je prendrai pour exemple un pack d\’extensions que m\’a proposé antistress il y a peu et qui permet entre autres d\’ajouter l\’item \ »Éteindre…\ » dans le menu utilisateur, d\’ajouter un dock ou encore de modifier le comportement du Alt+Tab. C\’est ce dernier point qui ne m\’a pas convaincu et que j\’ai décidé de désactiver. Je ne sais pas s\’il existe une méthode plus simple pour désactiver une extension mais cette solution a le mérite de faire découvrir quelques outils de GNOME Shell. Voici comment j\’ai procédé :

Il convient d\’abord de connaître le nom exact de l\’extension. Pour cela, il faut se rendre dans le dossier contenant le code Javascript de celle-ci. Le plus simple étant de faire un Alt+F2, de taper lg puis d\’exécuter. Ceci lancera Looking Glass, une interface de débuggage des extensions de GNOME Shell.

\"Lacement

Sur cette interface, cliquez sur l\’onglet \ »Extensions\ ». Vous obtiendrez ainsi la liste des extensions installées sur votre gestionnaire de fenêtre.

\"Looking

Pour connaître le nom nécessaire à la désactivation d\’une extension, cliquez sur \ »Afficher la source\ ». Ceci ouvrira le dossier contenant le code source de l\’extension (code Javascript, JSON et CSS en général). Ce qu\’il vous faut, c\’est le nom de ce dossier. Dans le cas de l\’extension AlternateTab il s\’agit de alternate-tab@gnome-shell-extensions.gnome.org.

Nous allons maintenant ouvrir l\’outil dconf-editor. Là encore, soit depuis un terminal, soit depuis Alt-F2. Et nous allons afficher l\’entrée org->gnome->shell.

\"dconf-editor\"

C\’est la clé disabled-extensions qui nous intéresse. Pour désactiver l\’extension AlternateTab, il suffit de rajouter son nom dans la liste de valeurs correspondante. Il convient de mettre ce nom entre simples quotes. Dans le cas où vous souhaitez désactiver plusieurs extensions, il faut séparer ces entrées par des virgules. Il ne reste plus qu\’à quitter dconf-editor et à rebooter (ou faire un restart de gdm).

 

Gnome 3 sous ArchLinux : installation, astuces et premières impressions

Aujourd\’hui, je me suis lancé dans l\’installation sous ma distribution ArchLinux de Gnome 3 sorti il y a quelques jours. À l\’heure où j\’écris ces lignes (c\’est-à-dire avant le passage dans extra), l\’installation se fait de la façon suivante :

Il faut dans un premier temps activer les dépôts testing d\’ArchLinux. Pour ce faire, il suffit de dé-commenter les lignes correspondantes dans /etc/pacman.conf :

[testing]
Include = /etc/pacman.d/mirrorlist

Ensuite, une simple mise à jour et l\’installation de gnome-shell et gnome-tweak-tool fera le reste :

$ sudo pacman -Suy
...
$ sudo pacman -S gnome-shell gnome-tweak-tool

Un reboot plus tard et le tour est joué!

\"Activités\"

 

Le paquet gnome-tweak-tool n\’est pas indispensable. Cependant, il permet de faire quelques réglages sur l\’interface et c\’est assez appréciable pour certaines choses. Mais j\’y reviendrai!

\"Tweak

 

Je vais donc vous livrer mes premières impressions un peu en vrac et tâchant ici et là de vous donner quelques astuces qui vous éviteront de perdre du temps…
Tout d\’abord, je dois le reconnaître, je trouve l\’interface vraiment belle. Un gros travail de design graphique a été fait et c\’est très agréable. Je regrette cependant la qualité des icônes utilisés. Mais un coup de Faenza plus tard et on a quelque chose de bien (une fois Faenza installé, gnome-tweak-tool permet de sélectionner ce set d\’icônes). Enfin, je trouve le choix de la police et sa taille pas fantastiques mais là encore ce sont des appréciations personnelles et ça se règle assez facilement, toujours avec gnome-tweak-tool. Les premières minutes d\’utilisation sont très déroutantes et pourront en décourager certains. Cependant, je suis de ceux qui n\’ont pas peur du changement et je dois dire qu\’au bout de quelques heures cette nouvelle interface s\’avère très efficace.

Parmi les petits changements qui sont assez troublants, j\’ai noté :

  • la disparition des boutons \ »réduire\ » et \ »maximiser\ » sur les fenêtres. Là encore, gnome-tweak-tool permet de les restaurer. En réalité c\’est surtout le bouton \ »réduire\ » qui m\’a manqué. La maximisation des fenêtres se fait très simplement en déplaçant celle-ci vers le haut de l\’écran. À noter que de la même manière, on peut déplacer une fenêtre vers un côté de l\’écran de façon à ce qu\’elle prenne en largeur exactement la moitié du bureau. Ceci est très utile pour positionner rapidement deux fenêtres côte à côte.
  • La suppression, en tous cas sur un ordinateur portable, des boutons \ »Éteindre\ » et \ »Redémarrer\ » du menu utilisateur. Seul \ »Mettre en veille\ » est disponible. Je dois dire que je ne comprend pas ce choix… Quoi qu\’il en soit lorsque vous affichez le menu utilisateur, le bouton \ »Mettre en veille\ » peut se transformer en \ »Éteindre…\ » si vous maintenez la touche Alt enfoncée. Il y a très certainement un moyen de fixer ce bouton sur le menu mais je ne l\’ai pas encore trouvé…

    \"Menu

  • gnome-do m\’a posé des problèmes. J\’avais pour habitude de l\’utiliser mais j\’ai dû le désinstaller. Ceci est principalement dû, je pense, au fait que la touche Windows est maintenant une des touches centrales de Gnome 3 puisqu\’elle permet d\’accéder à la fenêtre des activités. Or, cette touche est aussi la touche qu\’il faut combiner à la barre d\’espace pour utiliser gnome-do. Quoi qu\’il en soit, bien qu\’il soit possible de changer cette combinaison, gnome-do n\’est plus vraiment utile puisque justement, la fenêtre d\’activités réagit plus ou moins comme lui. Dès lors que vous commencez à taper du texte, les icônes des applications sont filtrées de façon à faire apparaître celle que vous voulez lancer. À noter cependant qu\’il semblerait que les icônes ne se trient pas par fréquence d\’utilisation comme avec gnome-do ce qui est un peu dommage…
  • Parfois, lors du lancement d\’une application, celle-ci se lance en \ »background\ » et une notification apparaît une fois le programme prêt. Là encore, je ne comprend pas vraiment la logique puisqu\’il faut alors cliquer sur la notification pour afficher la fenêtre du programme. Une étape supplémentaire pour afficher une fenêtre d\’application c\’est un peu dommage!
  • Le clic droit sur le bureau n\’a plus aucun effet. Il faudra apprendre à vivre sans…
  • La refonte de l\’application de paramétrage (fond d\’écran, police d\’écriture, effets, …) n\’est pas vraiment une réussite. Sans gnome-tweak-tool, difficile de faire grand chose finalement. Ou alors c\’est bien caché!
  • J\’ai enfin noté quelques lenteurs à deux niveaux. Premièrement, au chargement de Gnome 3 lors du démarrage de l\’OS. Deuxièmement, à l\’affichage de l\’onglet \ »Applications\ » qui liste les icônes de toutes les applications installées. C\’est parfois instantané, parfois non.

Voilà, ce sont en vrac les quelques points \ »négatifs\ » que j\’ai relevé après un petit temps d\’utilisation. Ce n\’est rien de dramatique et ce sont des détails qui se règlent assez facilement. Les points positifs maintenant :

  • Le graphisme est bien travaillé! Ça ne sera peut-être pas au goût de tout le monde mais voilà une interface qui ne nécessite pas l\’installation d\’un thème pour être jolie et agréable (hormis les icônes comme évoqué précédemment).
  • le système de notification a également été grandement amélioré et vraiment intégré dans l\’interface. Pour le coup, ce système est très bien imaginé et je pense notamment aux notifications des messageries instantanées. Ces boites de notifications permettent par exemple de répondre directement à son contact sans ouvrir de fenêtre.

    \"\"

  • Le système proche de gnome-do intégré de base dans Gnome 3. Comme dit précédemment, je nuance ce point avec le tri qui ne se fait pas en fonction de la fréquence d\’utilisation.
  • Une gestion dynamique des espaces de travail a été ajoutée. Le principe est simple, il y a toujours un et un seul espace de travail libre disponible. Dès que vous ouvrez une fenêtre dedans, un nouvel espace se crée et inversement.
  • La fenêtre des activités est vraiment un plus selon moi. Je sais que je ne vais pas faire l\’unanimité en disant ça mais c\’est vraiment un point qui m\’a convaincu. Cette fenêtre permet de regrouper toutes les actions de l\’utilisateur qui sont hors des applications elles-mêmes. Ainsi, c\’est depuis cette fenêtre qu\’on ouvre (voire qu\’on ferme) une application, qu\’on parcourt les programmes disponible, qu\’on gère ses applications favorites, etc… le tout accessible rapidement. Le bureau ne sert donc plus a autre chose qu\’à gérer les applications ouvertes. La suppression de la barre des tâches offre, qui plus est, un gain de place intéressant. Alors certes, on est habitué depuis 20 ans au bureau avec ses icônes, son menu, sa barre des tâches, etc… mais un peu de changement ne fait pas de mal. C\’est un choix un peu risqué de la part de l\’équipe de développement de Gnome mais je trouve que ça en vaut la peine.
  • Le calendrier/agenda intégré! Un screenshot sera plus parlant :

    \"Calendrier\"

  • Deux boutons \ »Wikipedia\ » et \ »Google\ » ont été ajouté dans la fenêtre d\’activités. Ces boutons apparaissent lors d\’une recherche à la gnome-do et ouvrent une page dans le navigateur par défaut à la page correspondante à la recherche. Cette idée me plaît bien. Reste à voir à la longue si ces boutons seront utilisés ou pas…
  • Enfin dernier point et pas des moindres : lors de l\’ouverture d\’une application, si celle-ci est déjà en cours d\’utilisation, c\’est cette dernière instance qui sera renvoyée à l\’utilisateur. Il faudra spécifier explicitement par un clic droit sur l\’icône que l\’on souhaite ouvrir une nouvelle fenêtre.

Voilà, je pense avoir fait le tour de ces premières impressions à l\’utilisation de Gnome 3. J\’en suis satisfait et je ne compte pas abandonner la surcouche Gnome Shell. Il y a certes des comportements parfois étranges mais ce sont sans aucun doutes des défauts qui seront corrigés dans les jours a venir. J\’ai eu l\’occasion de tester également Unity, qui sera utilisé dans la prochaine release d\’Ubuntu et je lui préfère Gnome 3/Gnome Shell qui me parait plus abouti et qui prend totalement le parti de cette nouvelle interface utilisateur.

 

Zenity, pour rendre ses scripts plus interactifs

Le contexte est le suivant : Ma belle-mère, que j\’ai converti à Ubuntu il y a maintenant un peu plus d\’un an, s\’est offert il y a quelques jours un lecteur multimédia Archos 3cam Vision. Bien que l\’appareil ne casse pas trois pattes à un canard, il reste raisonnable vu son prix (70€). Bref, Belle-maman étant fan d\’opéras en tous genre, elle a donc extrait plusieurs CD en MP3 (merci Sound Juicer!) et les a transférés sur son Archos. Problème : Un opéra, ça s\’écoute dans l\’ordre et malgré des noms de fichiers suivant l\’ordre alphabétique, les MP3 se retrouvaient complètement mélangés quand on les parcourait depuis le lecteur.

Après quelques recherches, j\’ai appris que chez Archos, ils n\’ont rien trouvé de mieux que de classer les fichiers non pas par ordre alphabétique comme la logique le voudrait, mais par date de transfert… Je ne sais pas quelle est la raison de ce choix mais j\’imagine que Windows doit copier les fichiers d\’un emplacement à un autre par ordre alphabétique et que, comme la majorité des PC tournent sous Windows, blablabla, on connaît la chanson. Il s\’agit d\’une simple supposition mais je ne vois pas vraiment d\’autres explications rationnelles…

Quoi qu\’il en soit c\’est un problème connu et en cherchant un peu sur le Net, j\’ai trouvé une ligne de commande permettant de copier le contenu d\’un dossier vers un autre emplacement en transférant les fichiers un par un dans l\’ordre alphabétique. La ligne provient de et ressemble à ça :

find . -type f -print0 | sort -z -n  | xargs -0 cp --target-directory=\'/media/A3cam/Music/mon_album\'

Seulement voilà! Je me voyais mal expliquer à Belle-maman que pour transférer un album, il fallait qu\’elle crée préalablement dans /media/A3cam/Music un dossier de destination pour l\’album en question, qu\’elle se rende en ligne de commande dans le dossier contenant les MP3 qu\’elle souhaitait transférer et qu\’elle exécute cette ligne de commande tout en modifiant le chemin de destination en conséquence… Dieu sait si j\’aime la ligne de commande mais, même moi, ça me gênerait de devoir faire ça pour mettre correctement de la musique sur mon lecteur MP3. Bref, c\’est là qu\’intervient Zenity et j\’ai envie de dire qu\’après une intro comme ça, il était temps 😉

Zenity, qu\’est-ce que c\’est? Zenity, installé de base sur Ubuntu (et sur Arch avec Gnome?), permet de créer des boîtes de dialogue simples en GTK+ depuis le shell. Ce n\’est pas fait pour créer une interface complète mais ça permet quand même de donner une peu d\’interactivité à ses scripts. Le principe est très simple. La commande zenity suivie d\’une option (–file-selection, –info, –calendar, …) permet de générer une boîte de dialogue. Chaque boîte possède ensuite ses propres options de façon à la personnaliser. Ainsi, j\’ai pu adapter la ligne de commande précédente de la façon suivante :

#!/bin/sh

ARCHOS=\'/media/A3cam/Music\'

if [ ! -d $ARCHOS ]
        zenity --error --text=\"Le lecteur MP3 ne semble pas branché\\!\"
        exit
fi
FILE=`zenity --file-selection --filename=/home/user/Musique/ --directory --title=\"Sélectionnez un dossier à transférer\"`
case $? in

0)

FOLDER=${ARCHOS}/`basename $FILE`

mkdir $FOLDER

find $FILE -type f -print0 | sort -z -n | xargs -0 cp -v --target-directory=\"$FOLDER\"

zenity --info --text=\"Transfert effectué avec Succès\\!\";;

1|-1)

zenity --error --text=\"Impossible d\'effectuer de transfert. Le lecteur MP3 est-il bien branché et allumé? Avez-vous bien sélectionné le dossier à transférer?\";;

esac

Détaillons rapidement tout ça :

  • La première ligne spécifie le chemin vers le dossier Music de l\’Archos. La suite teste l\’existence de ce chemin et renvoie une pop-up d\’erreur le cas échéant.\"Erreur\"
  • On récupère ensuite dans la variable FILE le chemin choisi dans la fenêtre de sélection de dossier créée par Zenity. À noter le paramètre –filename qui permet de présélectionner un dossier, le paramètre –directory qui oblige à ne sélectionner que des dossiers, et le paramètre –title afin de donner un titre à la boîte de dialogue.\"Selection
  • Zenity retourne également un code de sortie qui est égal à 0 si tout s\’est bien passé, 1 ou -1 sinon (erreur, annulation). En bash, la variable $? permet de récupérer le code de sortie de la dernière commande exécutée. Un switch/case classique permet alors de trier ces codes de retour.
    • Si un dossier a bien été sélectionné, on crée un dossier de même nom sur le lecteur MP3 (on notera l\’utilisation de basename qui, entre autres, pour un chemin quelconque renvoie le nom du dossier courant). On exécute la commande qui va faire la copie élément par élément par ordre alphabétique et on génère une pop-up quand cette copie est terminée.\"Transfert
    • Dans le cas où la sélection de dossier retourne un code d\’erreur, on génère une pop-up en conséquence.\"Erreur\"

Ce script est encore perfectible mais il permet de proposer l\’exécution d\’une commande spécifique de manière un tant soit peu interactive. Zenity est au bout du compte très basique mais suffisant pour beaucoup de choses. On notera par exemple le calendrier ou la barre de progression. Enfin de la personnalisation de contenu est possible grâce à des balises type HTML. Une documentation est disponible sur le site de Gnome et sur Ubuntu-fr.

NB : Si quelqu\’un possède un Archos 3cam Vision ou équivalent, a-t-il une idée de comment sont organisés les dossiers? Les fichiers, maintenant c\’est assez clair, mais les dossiers ont l\’air de suivre encore une autre logique… Les gars de chez Archos ont-ils choisi de trier les dossier en fonction de la taille moyenne des noms de fichiers qu\’ils contiennent?!…

Mon premier paquet AUR : fortune-mod-kaamelott

Suite au billet de Devil505 expliquant qu\’il avait packagé pour Frugalware et pour l\’application fortune-mod des citations des Tontons Flingueurs, je me suis dit qu\’il était temps pour moi de proposer mon premier paquet AUR pour ArchLinux sur le même principe. En effet, il y a quelques mois, j\’avais extrait de Wikiquote.org plus de 500 citations de la série Kaamelott de façon à les utiliser avec fortune. Je faisais l\’installation à la main sous Ubuntu (si on peut vraiment parler d\’installation vu qu\’il s\’agit de copier deux fichiers…). Dorénavant, il suffira de faire sous ArchLinux :

$ yaourt -S fortune-mod fortune-mod-kaamelott

Permettant ainsi d\’avoir de superbes citations :

$ fortune kaamelott
C est pas que c est difficile de la récupérer... C est que c est sa mère
difficile de la récupérer, la race de sa grand-mère !
[Karadoc, Livre IV, Le Vice De Forme]

Bref, je vais profiter de ce billet pour expliquer brièvement comment j\’ai créé et soumis ce paquet AUR. Le principe est finalement très simple puisque que j\’ai créé d\’une part une archive des \ »sources\ » hébergée sur mon serveur contenant les citations de Kaamelott au format \ »fortune\ » et d\’autre part une archive contenant le fichier PKGBUILD qui permet de décrire le paquet (que ce soit des informations sur la version ou la licence comme la fonction permettant l\’installation). Pour écrire ce fichier, je me suis inspiré de PKGBUILD existants et notamment celui de fortume-mod-chucknorris. Voilà ce que ça donne :

# Maintainer: François Tessier

pkgname=fortune-mod-kaamelott
pkgver=1
pkgrel=1
pkgdesc=\"French Fortune cookies from Kaamelott\"
arch=(any)
license=(\'CCPL\')
depends=(fortune-mod)
makedepends=(coreutils)
source=\"http://www.francoistessier.info/blog/wp-content/uploads/2011/02/fortune-kaamelott.tar.gz\"
url=\"http://www.francoistessier.info/blog/2011/02/14/mon-premier-paquet-aur-fortune-mod-kaamelott\"
md5sums=(\'a490897ecfdf4b1944e1411bd97b6a17\')

build() {
  cd $startdir/src
  mkdir -p $startdir/pkg/usr/share/fortune
  fold -w 80 -s fortune-kaamelott/kaamelott > \\
  	$startdir/pkg/usr/share/fortune/kaamelott || exit 1
  strfile $startdir/pkg/usr/share/fortune/kaamelott || exit 2
}

Quelques précisions concernant cette archive : une fois le PKGBUILD rédigé, j\’ai dû générer le hash MD5 du fichier spécifié dans le champ \ »source\ ». Un outils permet de faire ça simplement : makepkg. Ainsi, une fois dans le dossier contenant mon PKGBUILD :

$ makepkg -g >> PKGBUILD

Cette commande va télécharger la source, en générer le hash et l\’écrire à la fin du fichier PKGBUILD. Pour plus de lisibilité, j\’ai déplacé cette ligne au-dessus de la fonction build(). Enfin, pour générer proprement l\’archive qu\’il faudra uploader sur http://aur.archlinux.org, toujours dans le même dossier :

$ makepkg --source

Un fichier fortune-mod-kaamelott-1-1.src.tar.gz a été créé. L\’upload s\’est bien passé et l\’installation via yaourt aussi! Bref, je suis vraiment très impressionné par la simplicité de la procédure permettant de soumettre un paquet AUR. Qui plus est la documentation est assez fournie. Ce système est vraiment puissant et encourage la communauté à participer ou tout du moins ne la décourage pas! Qui dit mieux?!

PS : Les citations de Wikiquote.org étant sous licence CC by-sa, j\’ai soumis mon paquet à la même licence et j\’ai cité Wikiquote.org dans mon README. Qu\’en pensez-vous? Suis-je bien en règle en procédant ainsi?

Mise à jour du firmware du Xtreamer

Un petit billet rapide pour vous annoncer la sortie de la version 2.6 du firmware du Xtreamer (Xtreamer, XtreamerPro, iXtreamer et XtreamerDVD). Les nouveautés sont très intéressantes avec entre autres :

  • Ajout d\’un accès à Grooveshark directement depuis le Xtreamer
  • Pour le XtreamerDVD, possibilité de copier un DVD sur un disque dur externe
  • Ajout d\’une aide consultable depuis le périphérique
  • Meilleur support des disques durs jusqu\’à 3To
  • Corrections de bugs divers

La mise à jour se fait soit depuis le périphérique s\’il est connecté au net, soit en téléchargent la mise à jour ici.

Réparer l\’erreur MySQL : Table \’./ma_base/ma_table\’ is marked as crashed and last (automatic?) repair failed

\"MySQLJ\’ai sur mon serveur une tâche Cron qui met à jour mes flux RSS toutes les 15 minutes dans la base de données MySQL de RssLounge. Or, après une mise à jour de certains paquets de ma Ubuntu Server 10.04 (dont MySQL), plus moyen d\’accéder à la table dans laquelle sont stockés ces flux. Que ce soit depuis l\’application RssLounge ou depuis la ligne de commande, MySQL me renvoie l\’erreur suivante :

Table \’./ma_base/ma_table\’ is marked as crashed and last (automatic?) repair failed

Ceci est tout simplement dû au fait que des opérations d\’insertion sur cette table étaient en cours d\’exécution au moment où la procédure de mise à jour a arrêté le service MySQL. Le fichier contenant les enregistrements, ma_table.MYI, est donc corrompu. Il existe cependant une procédure de réparation assez simple grâce à l\’outil myisamchk présent avec l\’installation de MySQL. Comme vous l\’aurez compris, cette procédure n\’est valable que pour les tables de type MyISAM.

Dans un premier temps, nous allons couper les services d\’Apache et MySQL de façon à ne pas créer de nouveaux conflits durant la procédure de réparation.

$ sudo /etc/init.d/apache2 stop
$ sudo /etc/init.d/mysql stop

Nous allons ensuite vérifier que le fichier que nous souhaitons réparer contient bien des erreurs (en gros, qu\’on a bien choisi le fichier corrompu) :

$ sudo myisamchk /var/lib/mysql/ma_base/ma_table.MYI
Data records:    4945   Deleted blocks:       0
myisamchk: warning: Table is marked as crashed and last repair failed
- check file-size
myisamchk: warning: Size of indexfile is: 602112        Should be: 53248
- check record delete-chain
- check key delete-chain
- check index reference
- check data record references index: 1
myisamchk: error: Found 4943 keys of 4945
- check record links
myisamchk: error: Record-count is not ok; is 4943         Should be: 4945
myisamchk: warning: Found 1870736 deleted space.   Should be 0
myisamchk: warning: Found        971 deleted blocks       Should be: 0
myisamchk: warning: Found       9665 key parts. Should be: 4943
MyISAM-table \'/var/lib/mysql/ma_base/ma_table.MYI\' is corrupted
Fix it using switch \"-r\" or \"-o\"

Maintenant que nous sommes sûr qu\’il s\’agit de ce fichier, nous allons tout simplement tenter la procédure de réparation. La première chose à essayer (qui a fonctionné pour moi) est l\’option \ »-r\ » ou \ »–recover\ ». Il s\’agit d\’une méthode de réparation efficace qui corrige à priori la majorité des problèmes de corruption dans une table. Dans le cas où cette méthode échouerai, l\’option \ »-o\ » ou \ »–safe-recover\ » peut être tentée. On a donc :

$ sudo myisamchk -r /var/lib/mysql/ma_base/ma_table.MYI
- recovering (with sort) MyISAM-table \'/var/lib/mysql/ma_base/ma_table.MYI\'
Data records: 4945
- Fixing index 1
- Fixing index 2
- Fixing index 3
- Fixing index 4
- Fixing index 5
- Fixing index 6
Data records: 4943

Et on vérifie :

sudo myisamchk /var/lib/mysql/ma_base/ma_table.MYI
Checking MyISAM file: /var/lib/mysql/ma_base/ma_table.MYI
Data records:    4943   Deleted blocks:       0
- check file-size
- check record delete-chain
- check key delete-chain
- check index reference
- check data record references index: 1
- check data record references index: 2
- check data record references index: 3
- check data record references index: 4
- check data record references index: 5
- check data record references index: 6
- check record links

Enfin, on relance Apache et MySQL :

$ sudo /etc/init.d/mysql start
$ sudo /etc/init.d/apache2 start

Et si tout va bien, tout refonctionne comme si de rien n\’était!