• At chevron_right

      Quand Debian me gonfle : Stretch et OpenVPN

      raspbeguy · pubsub.gugod.fr / atomtest · Saturday, 1 July, 2017 - 22:00 · 5 minutes

    Comme vous le savez sûrement, la nouvelle version stable de Debian, nom de code Stretch, est sortie. Je vous conseille à tous de faire la mise à jour les yeux fermés, ça va bien se passer, aucun accrochage à déplorer, un simple apt dist-upgrade et c'est une affaire qui roule. ... Nan j'déconne. Enfi...

    Comme vous le savez sûrement, la nouvelle version stable de Debian, nom de code Stretch, est sortie. Je vous conseille à tous de faire la mise à jour les yeux fermés, ça va bien se passer, aucun accrochage à déplorer, un simple apt dist-upgrade et c'est une affaire qui roule.

    ...

    Nan j'déconne.

    Enfin je vous conseille quand même de faire la mise à jour bien entendu, pour des raisons évidentes de sécurité, prévoyez de le faire au moins à long terme. Parce que bon, la oldstable est toujours supportée à travers des mises à jour de sécurité, mais après y a plus rien, et votre serveur est livré à lui même et aux attaquants qui sauront profiter de failles non corrigées.

    Ce que je veux dire, c'est qu'en mettant à jour votre distribution, attendez-vous à des trucs qui vont péter sévère. Faites-ça quand vous n'avez rien d'autre à faire et quand un minimum de choses vitales sont attendues de votre serveur par vos utilisateurs. Va y avoir du vilain.

    Et hop c'est cassé

    Donc oui j'aime Debian, mais Debian me gonfle parfois. Notamment ce comportement très fâcheux que je viens de découvrir aujourd'hui même concernant OpenVPN.

    OpenVPN, j'en ai déjà parlé et je ne m'étendrai pas plus là dessus, est un outil permettant de construire des réseaux virtuels privés (VPN), utiles pour abstraire des réseaux entre des machines géographiquement distantes et/ou pour déporter son point de sortie pour "sembler" se connecter d'ailleurs. Il y a donc une machine qui crée le VPN, dite serveur ou tête de pont, et des machines qui s'y connectent à distance, dites clients.

    J'ai donc une tête de pont que j'ai récemment mis à jour sur Stretch. Tout se passa bien entendu parfaitement en apparence, et tout le monde il était beau. Je me retrouvai avec une jolie Debian Stretch toute mignonne dont le cœur et l'âme n'aurait en aucun cas pu être mis en doute par quiconque. Sauf que sous ses jupons, elle avait dissimulé des trucs moins fun. Et en conséquence, quelques jours après, je me rendis compte que mes clients OpenVPN ne se voyaient plus. Je ne mis pas longtemps à soupçonner la belle Stretch d'avoir des aveux à me faire.

    L'élément fautif : le service Systemd a changé bien en profondeur.  Sous Jessie, les fichiers nécessaires pour l'établissement du VPN (configurations, certificats, clefs...) se trouvaient alors modestement dans /etc/openvpn, et ne faisait pas la distinction entre configurations clients et configurations serveurs. Le service utilisé pour démarrer OpenVPN était nommé tout simplement openvpn.service, et son boulot était uniquement de lancer une instance d'OpenVPN par fichier de configuration (dont le nom se terminait par .conf) dans ce dossier. Pour lancer openvpn, il suffisait donc de la commande simple suivante :

    systemctl start openvpn

    Sous Stretch, tout a été changé. Premièrement, le service a changé de nom très salement. Par salement, je veux dire que l'ancien nom existe toujours, mais a été remplacé par un service qui ne fait absolument rien (il lance le programme /bin/true, programme dont l'utilité crève les yeux), ce qui fait que ce changement de service implique non seulement une rupture de ce service si aucune action n'est prise par la suite, mais également que c'est très difficile de s'en rendre compte, le service ancien openvpn.service étant diagnostiqué par le système comme actif et bien portant. Donc, la nouvelle forme de ce service est en fait un couple de service, openvpn-client@.service et openvpn-server@.service, le premier se chargeant de lancer OpenVPN en temps que client, et le second en temps que serveur. Mais ce n'était pas fini : les configurations VPN devaient être déplacées aux nouveaux endroits adéquats, et la ségrégation entre clients et serveurs a été instaurée : désormais, les configurations clients doivent aller dans /etc/openvpn/client et les configurations serveurs dans /etc/openvpn/server. Mais ce n'est encore pas tout : ces nouveaux services ne s'invoquent plus de la même manière. On doit maintenant spécifier le nom de la configuration dans la commande qui démarre le service. Par exemple, pour une configuration serveur qui s'appelle hashtagueule.conf (dûment placée dans /etc/openvpn/server), la commande pour démarrer le service associé est donc :

    systemctl start openvpn-server@hashtagueule

    Pour couronner le tout, un bug de configuration, oui un bug, et non une modification de comportement, s'est glissée dans le fichier de service openvpn-serveur@.service. Ce fichier comporte la ligne suivante :

    LimitNPROC=10

    Cette directive est utile pour contrôler le nombre maximum de processus exécutés par un service, pour éviter dans certain cas l'explosion du load du serveur. Sauf qu'ici, cette valeur est beaucoup trop petite. On se retrouve alors avec l'erreur suivante consignée dans les logs :

    openvpn_execve: unable to fork: Resource temporarily unavailable

    Ce qui veut dire que le système refuse la création d'un nouveau processus pour ce service. Je me résolus donc à réparer salement et de manière non safisfaisante en changeant la valeur 10 par 100 (aucune idée si c'est carrément trop), et enfin, le service a accepté de fonctionner.

    Quelle leçon tirer de cette aventure ? Premièrement, les mises à jour sont rarement simple, surtout dans le cas de Debian. Deuxièmement, même si le nouveau fonctionnement d'OpenVPN est désormais plus propre et correspond à l'usage conventionné sur les systèmes les plus récents, on peut déplorer la manière dont elle a été mise en place. Le bon usage aurait été d'instaurer une période de transition pendant laquelle les deux workflows auraient coexisté, plutôt que de casser brutalement une configuration existante et fonctionnelle. Et je ne parle même pas de la mauvaise limite du nombre de processus...

    En espérant que cette histoire aura été utile à des gens, je vous souhaite une bonne mise à jour.

    • At chevron_right

      Édito #9 : Les infos à 2 balles

      raspbeguy · pubsub.gugod.fr / atomtest · Saturday, 10 June, 2017 - 22:00 · 4 minutes

    Soufflons un peu la poussière et passons un coup de balayette. C'est bientôt l'été, j'imagine que ça ne vous a pas échappé.  Bientôt les vacances estivales pour certains, pour nous ça ne change pas grand chose, à part en terme de litre de sueur sécrétés et de kilos de glace consommés. Des choses se ...

    Soufflons un peu la poussière et passons un coup de balayette.

    C'est bientôt l'été, j'imagine que ça ne vous a pas échappé.  Bientôt les vacances estivales pour certains, pour nous ça ne change pas grand chose, à part en terme de litre de sueur sécrétés et de kilos de glace consommés.

    Des choses se passent sur le blog, certaines dont vous n'avez probablement rien à faire, mais on va les dire quand même parce que c'est quand même important pour comprendre les choses. Un peu comme quand les pubs à la télé pour yaourts nature font des jolis animations de flèches descendantes sur des corps de femmes pas tellement vêtues, ça porte à peu près aucune info exploitable pour le consommateur mais c'est joli, ça rassure et ça aide à vendre.

    Nous sommes en pleine migration des services sur un nouvel hôte (encore). Je vous entends rager, railler et demander avec inquiétude : Mais pourquoi ? Pourquoi encore changer d'hôte après même pas un an ? Eh bien on s'est rendu compte (il était temps) que gérer des services isolés et virtualisés c'était bien plus chouette que de gérer des services emmêlés façon sac de nœuds. On a par le passé déjà eu le cas de comportements mystérieux de services dus à une intervention sur un service qui n'avait rien à voir. Nous avons donc opté pour un hôte un peu plus costaud, et pas mal plus cher aussi. Heureusement que j'ai un salaire à présent, et désormais Motius aide financièrement, on fait de la collocation de serveur. Du coup on a franchit le pas de la virtualisation (enfin, surtout de la conteneurisation en l’occurrence), et au moment ou je vous parle, le blog a déjà été migré (et mis à jour par la même occasion). On s'était décidé à effectuer cette migration à l'occasion de la livraison de Debian Stretch en version stable. Bon, on a pris un peu d'avance, Stretch ne sortant que la semaine prochaine le 17 juin, mais bon, pour 2 semaines pendant lesquelles le blog aura tourné en version testing, on va pas en faire tout un plat.

    En ce qui me concerne, quelques évènements auxquels j'ai participé ces derniers mois :

    • Du 1er au 2 avril, j'étais présent aux JDLL à Lyon, pour défendre les couleurs d'un hackerspace local que je fréquente, mais également pour découvrir des associations et rencontrer des gens très sympatiques.

    Membres présents de l'association LILA lors des JDLL

    • Le 21 mai, je me suis rendu à Toulouse pour rencontrer David Revoy, le créateur du webcomic Pepper & Carrot dont on vous a déjà parlé, lors d'une séance de dédicace dans une petite librairie.

    Je ne pourrai malheureusement pas me rendre aux prochaines RMLL à Saint-Étienne En fait si, je me suis juste emmêlé les pinceaux au moment de regarder dans mon calendrier, j'y serai donc les 1er et 2 juillet prochains. D'autre part, je vais tout faire pour me rendre aux prochain Capitole du Libre à Toulouse les 18 et 19 novembre prochains (ça semble encore loin certes).

    D'autre part, je suis en train de monter avec des amis une émission de radio locale orientée autour de l'actualité numérique et du logiciel libre. Nous avons déjà enregistré le pilote, je vous en parlerais plus en détail si la programmation de l'émission est validée par l'administration de la radio. Mais il va sans dire qu'il s'agit d'un projet très excitant.

    C'est la fin de cette série d'infos inutiles. Avant de vous quitter, je tiens à vous faire connaître Erma, un webcomic que j'ai découvert récemment, et qui est mon coup de cœur artistique du moment. Vous connaissez peut-être le film d'horreur The Ring sorti en 2002, dans lequel figure Samara, un spectre féminin aux longs cheveux noirs masquant le visage, qui a notamment le pouvoir de sortir de l'écran du téléviseur (sans pour autant vous parler de yaourts vous, remarquez) à des moments contrariants et de marcher à quatre pattes au plafond. Dans ce webcomic, Samara s'est calmée, a arrêté de faire peur aux gens, s'est intégrée paisiblement parmi les humains et a même un mari, dont l'union a donné Erma, une petite fille qui tient beaucoup de sa mère, tant sur l'apparence que sur les pouvoirs surnaturels. Le décalage entre horreur et slice of life est assez comique mais mène souvent à des situations attendrissantes. Ce webcomic est tout bonnement adorable.

    Erma © Copyright 2016 Brandon Santiago

    Voilà, bon vote si ce n'est déjà fait, hydratez-vous bien, et soyez gentils.

    • At chevron_right

      Lettre ouverte au Président élu de la République française

      raspbeguy · pubsub.gugod.fr / atomtest · Sunday, 7 May, 2017 - 22:00 · 11 minutes

    Bonjour M. le Président. Au nom de l'équipe d'Hashtagueule, je tiens tout d'abord à vous adresser nos sincères félicitations (des félicitations républicaines, le terme étant très à la mode dans les médias aujourd'hui) pour votre victoire à l'élection du chef de l'État français. Nous sommes soulagés ...

    Bonjour M. le Président.

    Au nom de l'équipe d'Hashtagueule, je tiens tout d'abord à vous adresser nos sincères félicitations (des félicitations républicaines, le terme étant très à la mode dans les médias aujourd'hui) pour votre victoire à l'élection du chef de l'État français. Nous sommes soulagés en premier lieu que la France n'ait pas cédé au désespoir qui semble s'emparer du monde entier, en donnant le pouvoir à un parti extrémiste dangereux, prompt à briser les alliances amicales entre les nations européennes et mondiales, alliances qui ont demandé tant d'efforts, de réflexions et de remises en questions, et qui sont, à mon sens, l'évolution naturelle dans le cadre de l'épopée de l'humanité vers le Bien. À titre personnel, je suis même plutôt satisfait du résultat de cette élection, qui a au moins le mérite d'ouvrir des possibilités que les précédents titulaires de la Présidence ne laissaient pas apercevoir. Sur un point de vue bassement terre-à-terre, l'élection d'un Président ayant moins de 15 ans de plus de moi me remplit d'espoir quant au minimum d'ouverture d'esprit de la société. Bon, je sais très bien qu'on ne peut pas juger quelqu'un sur son âge, pas de panique, bien que je sois une personne très faible en politique et diplomatie, je garde quand même un brin de lucidité.

    J'admire également la manière dont vous ne cédez pas (au moins en apparence) au triomphalisme de bas étage et le sang-froid que vous témoignez. J'espère très sincèrement que cela va durer.

    Le but de cette lettre ouverte n'est bien sûr pas uniquement de vous féliciter, sans quoi ce blog aurait plutôt un nom du style notice-me-president.fr et on aurait d'ailleurs bien du mal à éviter de rester politiquement neutre. Le but n'est pas non plus de vous ennuyer, c'est pourquoi je renonce à la langue formelle et imbitable afin de vous délivrer l'essentiel. Vous me paraissez être une personne capable de se remettre en question et d'écouter les arguments sensés. À ce titre nous aimerions que vous preniez conscience de nos espoirs et de nos craintes concernant notre domaine de prédilection qui est l'informatique.

    Vous avez évoqué dans votre programme l'importance de la mise des administrations au numérique. En voilà une bonne nouvelle. Un bon moyen d'apporter de la sécurité au sein des institutions (pour peu que l'outil informatique soit correctement utilisé) et de l'emploi moderne. Et puis il y a un aspect écologique à ne pas négliger, même s'il n'est pas forcément aussi trivial qu'il n'y paraît. Mais attention, ce chemin, très bénéfique pour peu que l'on suive un minimum de précautions, peut très rapidement finir en eau de boudin dans le cas contraire.

    Le bon chemin, à notre sens, est de favoriser et même d'imposer aux administrations publiques l'usage de logiciels libres. Afin que vous gardiez toute votre attention et votre ouverture d'esprit pour les raisons qui font que c'est une drôlement bonne idée, examinons de plus près les arguments avancés par les lobbyistes contre le logiciel libre.

    Les mauvaises langues diront qu'on ne change pas une équipe qui gagne, et que l'administration a toujours tourné sur du logiciel privateur comme Microsoft Office, Windows, Oracle SQL, services Google, j'en passe et pas des moindres, et que ça a toujours très bien marché. Vous êtes désormais Président, vous devez donc être incollable dans le domaine de l'industrie, et vous n'ignorez donc pas le nombre de sociétés à croissance forte qui se spécialisent dans le logiciel libre. Il s'agit d'ailleurs d'un domaine dans lequel la France excelle, soit dit en passant. Ces sociétés qui ont le vent en poupe sont appelées des SS2L, sociétés de services en logiciel libre. Et croyez moi M. le Président, ça dépote grave. Vous avez donc des entreprises à la pelle, des entreprises européennes et françaises prêtes à fournir leur savoir-faire pour concevoir, déployer et maintenir des architectures libres, ainsi qu'à former le personnel pour qu'il soit autonome.

    Les mauvaises langues répliqueront : oh là là, le coût de mise en place va être exorbitant. À ces personnes visiblement expertes en mauvaise foi, je ferai remarquer que les licences d'utilisation des logiciels privateurs ont elles-même un prix à tomber par terre, tout simplement parce que les sociétés qui les proposent ont le monopole sur le produit qu'elles vendent et qu'elles sont les seules aptes et autorisées à vendre du support. Le fonctionnement du logiciel libre est simple : vous avez liberté d'utiliser le logiciel gratuitement, vous avez le droit de l'entretenir et de le faire évoluer à votre convenance, et vous avez la liberté de distribuer votre version et tout le savoir-faire que vous y avez placé. Si vous avez recours à une SS2L afin de vous aider à utiliser vos logiciels libres, vous être libre à tout moment de prendre en charge la maintenance et l'infogérance du logiciel en interne ou encore de changer de SS2L. Ce mode de fonctionnement est beaucoup plus sain au niveau industriel, favorise la concurrence nécessaire à l'économie et est un gage de qualité.

    Mais alors, rétorqueront les mauvaises langues, je préfère encore payer pour une société qui développe mes logiciels plutôt que de confier mon infrastructure à du travail "gratuit", car c'est bien connu, plus on y met d'argent, plus c'est efficace. Alors déjà, travailler dans le domaine du libre n'est pas du tout incompatible avec gagner de l'argent. Sinon les fameuses SS2L dont je vous parle tant n'existeraient pas. Comme je l'ai dit, ces entreprises vendent le savoir faire et non le logiciel en question. Les ingénieurs n'y inventent pas des technologies à partir de rien : ils font un énorme travail de "veille technologique" constant et rigoureux afin d'adapter leurs offres et d'en proposer de nouvelles. Et éventuellement, si la société en vient à modifier le code des logiciels libre qu'elle utilise, elle reverse les modifications à la communauté, elle y est tenu par la licence du logiciel libre. Le meilleur exemple de ce fonctionnement est la société américaine Red Hat qui vend la compilation de son propre système d'exploitation et qui reverse les modifications à la communauté, ce qui permet à n'importe qui ayant les compétences d'obtenir gratuitement le logiciel en question, pour peu qu'il puisse le maintenir lui-même. La mise à disposition des sources permet également à n'importe qui de vérifier le fonctionnement d'un logiciel et c'est grâce aux vérifications menées par la communauté qu'on peut s'assurer que le logiciel est de confiance. En comparaison, du côté des logiciels privateurs, absolument rien ne vous assure que le logiciel fait exactement ce qu'on lui demande et qu'on y a pas glissé une faille de sécurité, par incompétence ou par malice, vu qu'il n'y a qu'une seule société qui accède à la recette du logiciel.

    Pour être sûr que vous me compreniez, M. le Président, je vais utiliser une analogie classique, et je vais vous demander de comparer un logiciel à un gâteau au chocolat. Cette analogie est parlante car elle tend à unifier le peuple Français, non, l'humanité entière, autour du fait que les gâteaux au chocolat c'est bougrement bon. Donc, imaginez qu'un pâtissier vende des gâteaux au chocolat. S'il ne donne pas la recette de son gâteau, il encourt plusieurs risques. D'une part, en théorie, il peut remplacer le chocolat par une matière marron beaucoup moins ragoutante et le vendre tel quel, le client n'y verra que du feu jusqu'à ce qu'il le mange, et ce sera trop tard. D'autre part, si le pâtissier fait faillite, plus personne ne sera en mesure de le remplacer, condamnant ainsi l'humanité à se passer de gâteau au chocolat, ce qui, vous en conviendrez, M. le Président, serait bien triste. Cependant, s'il partage la recette du gâteau au chocolat, certes il va devoir faire preuve d'esprit pratique pour gagner autant d'argent, car n'importe qui sera en mesure de devenir pâtissier et de se lancer dans le gâteau au chocolat. Cependant, à partir de ce moment là, le pâtissier vendra son talent et non pas un produit alimentaire, car aussi claire une recette de cuisine peut être, un gâteau au chocolat demande du talent et de l'amour : on a gagné ainsi un gage de qualité. S'il est inventif, il pourra également se distinguer sur des plus-values, par exemple proposer une jolie salle de restauration où les clients peuvent savourer leurs gâteaux au chocolat dans un décor détendu, avec des jolies plantes, et du smooth-jazz en musique de fond. Et en plus, désormais, n'importe quel pâtissier peut déployer son talent en proposant des versions altérées de la recette, disons en ajoutant de la crème de marron, ce qui est succulent à mon sens, mais peut déplaire à d'autres personnes, et on a donc une recette qu'il est très aisé d'adapter en fonction du client.

    Passons désormais au reste des arguments. Adopter le libre, c'est refuser de s'enfermer dans un cercle vicieux mené par les sociétés privatrices. Par exemple, en utilisant Microsoft Office, on condamne non seulement l'utilisateur, mais également tous ses collaborateurs à utiliser Microsoft Office. En effet, le meilleur compère du logiciel privateur est le format fermé : le format des documents générés par un logiciel privateur a toutes les chances d'avoir des spécifications tenues secrètes, ce qui oblige chaque personne disposant d'un document privateur d'utiliser le logiciel privateur correspondant : c'est de l'esclavagisme numérique. À l'opposé, un format ouvert est un format dont les spécifications sont publiques : n'importe quel logiciel (en particulier un logiciel libre) sera en mesure d'implémenter la prise en charge de ce format. Les formats fermés sont donc un frein à la collaboration. Prenons un cas concret : supposons que pendant votre campagne, vous ayez mis en consultation votre programme en format Microsoft Word sur votre site internet. Surtout que votre programme, ce n'est pas la chose la plus légère informatiquement : il y a énormément d'images, de styles de texte différents, et globalement la mise en page a demandé beaucoup de travail et a utilisé beaucoup de spécificités. Il n'y a aucune chance que ce document ait pu être ouvert par autre chose que Microsoft Word. Du coup, les seules personnes à même de pouvoir lire votre programme auraient été les possesseurs de licences Microsoft, dont je ne fais pas partie. Vous conviendrez, M. le Président, que c'est un peu gênant pour se faire élire. Mais en réalité, votre programme a été exporté au format PDF, qui est un format ouvert : tout le monde disposant d'un ordinateur était en mesure de lire votre programme sans débourser un sou de plus. Vous voyez à quel point c'est important ?

    Enfin, nous pensons que le logiciel libre devrait être surtout favorisé dans les systèmes éducatifs. À l'heure de la transition vers les métiers du futur, il est nécessaire de former nos enfants et étudiants à des technologies neutres et libres plutôt que de déjà les enfermer dans des technologies orientées par des entreprises qui ne sont motivées que par l'appât du gain plutôt que par le rayonnement de la connaissance et du savoir faire. Grâce au logiciel libre, les enfants peuvent être menés à s'interroger sur le fonctionnement des choses, et peuvent reprendre des mécanismes pour créer quelque chose d'encore plus grand, de totalement nouveau, et que peut-être personne n'aurait vu venir. Le logiciel libre est une source d'inspiration et d'innovation.

    Ma longue tirade approche de sa fin, si vous m'avez lu jusque là, rassurez-vous, vous allez pouvoir retourner à vos occupations plus "présidentielles". Je veux simplement attirer votre attention sur la surveillance de masse qui sévit actuellement en France, dans le cadre de ce que certains ont appelés "l'état d'urgence". Nous avons bien connaissance des raisons qui motivent de tels dispositifs, et sans pour autant adhérer aux mesures effectives, nous les comprenons. Nous tenions juste à vous inciter à faire preuve d'une immense sagesse et de vous rappeler que la sécurité ne justifie pas la privation de liberté, sous peine de mettre la démocratie en danger, et nous ne vous cachons pas que nous avons conscience que la démocratie est depuis un certain temps en réel danger et nous nous faisons beaucoup de souci. Je suis sûr qu'en tant que Président du pays des libertés, vous saisissez complètement nos inquiétudes. Je ne vais pas m'étendre sur le sujet tout de suite, un seul sujet à la fois.

    Sur ces paroles, nous nous permettons encore une fois de vous féliciter, et nous vous rappelons que, sur les points évoqués ici, vous avez le pouvoir de faire changer les choses et que nous comptons sur vous.

    Amicalement,

    Raspbeguy, pour l'équipe d'Hashtagueule.

    • At chevron_right

      Un jukebox à partir d'un Raspberry Pi

      raspbeguy · pubsub.gugod.fr / atomtest · Wednesday, 15 March, 2017 - 23:00 · 7 minutes

    Ça y est ! Enfin un tutoriel Raspberry Pi. Depuis le temps qu'on m'en demande, vous êtes servi. Le Raspberry Pi (et les autres ordinateurs monocartes de la même farine) est remarquable du fait de la multitude d'usages qu'on peut lui attribuer. On le vois dans tous les domaines, Domotique, informatiq...

    Ça y est ! Enfin un tutoriel Raspberry Pi. Depuis le temps qu'on m'en demande, vous êtes servi.

    Le Raspberry Pi (et les autres ordinateurs monocartes de la même farine) est remarquable du fait de la multitude d'usages qu'on peut lui attribuer. On le vois dans tous les domaines, Domotique, informatique embarquée, serveur écologique, ordinateur de bureau low-cost, Internet des objets, montage électronique, cluster de calcul réparti, pour ne citer que ces exemples. Cet article va se concentrer sur l'aspect média-center du Raspberry Pi et plus précisément la lecture de bibliothèque musicale.

    Dans un premier temps, je vais vous expliquer comment vous monter un serveur MPD de base, chose que vous pourrez en grande partie trouver en quelques clics sur n'importe quel moteur de recherche. La deuxième partie présentera une manière très amusante de contrôler votre serveur de musique via un écran LCD, un projet en python qui a occupé mes soirées depuis ce dimanche (panne d'internet, vous comprenez) et dont je suis par conséquent assez fier, parce qu'il marche d'une part, et qu'en plus vous pouvez épater la galerie lorsque vous invitez des amis à l'heure de l'apéro et que vous voulez mettre un fond sonore.

    Le serveur MPD

    Si vous fréquentez des milieux barbus parlant entre autres d'usage de Linux au quotidien, de lecteurs multimédia, qui lancent des guerres sanglantes ayant pour motif par exemple le meilleur environnement graphique, qu'un environnement graphique en fait c'est pourri, que Arch Linux c'est bien mieux que Gentoo, bref, de tout ce qui relève de l'UNIX porn, vous avez très certainement déjà entendu parler de MPD (Music Player Daemon). Il s'agit d'une référence dans le domaine des lecteurs de bibliothèques musicales du type client-serveur (vous avez une machine qui lis la musique, et vous pouvez vous connecter dessus avec un client pour la contrôler).

    Ce qui fait la force de MPD, c'est sa légèreté (un Raspberry Pi peut l'exécuter sans trembler des genoux) ainsi que la flexibilité de sa configuration vis-à-vis des sorties audio, mais également et surtout la grande diversité des programmes clients, reflétant une communauté considérable, ce qui en fait en quelques sortes un standard de la lecture musicale sur UNIX.

    Nous partirons du principe que vous disposez d'un Raspberry Pi (même la première génération convient), et que vous avez installé une distribution dessus (par exemple Raspbian). Il est également conseillé de disposer d'un DAC (Digital to Analog Converter) externe, la carte son intégrée su RPi étant médiocre pour rester poli. Le DAC, pour faire court, est l'élément qui convertit le flux numérique audio en signal électrique analogique que vous pouvez brancher sur un ampli. Par exemple, la carte son de n'importe quel PC est un DAC. Je vous conseille également d'utiliser un DAC USB et non un DAC branché sur GPIO, sachant qu'ils est appréciable de pouvoir utiliser le GPIO pour autre chose (par exemple la deuxième partie du tutoriel...). Si vous cherchez une bonne affaire mais que vous pouvez quand même y mettre un certain prix, je vous conseille le Cambridge DacMagic 100, qui est d'excellente qualité, qui fonctionne sur le RPi avec une configuration de base et que j'utilise moi-même en étant satisfait.

    Niveau installation, il vous suffit d'installer MPD, présent sur la très grande majorité des distributions. Chose à noter, si vous avez des morceaux au format ALAC dans votre bibliothèque, vous devres en plus installer les plugins gstreamer adaptés. Sur Raspbian, il s'agit du paquet gstreamer1.0-plugins-bad. Puis vous êtes bon pour le décollage.

    Il est important d'ajouter le support de votre bibliothèque musicale dans le fichier /etc/fstab du RPi, cela permettra bien entendu de monter votre disque dur USB ou votre volume NFS dès le démarrage de l'appareil. Dans le cas d'un partage NFS, vous pouvez par exemple écrire :

    192.168.0.5:/chemin/vers/dossier/musique    /data   nfs    rsize=8192,wsize=8192,timeo=14,intr

    En remplaçant bien sûr l'IP de votre serveur NFS et le chemin du dossier musique sur ce serveur.

    Ensuite vous aurez besoin de configurer MPD. Direction le fichier /etc/mpd.conf pour dans un premier temps dire au lecteur où se trouve votre musique.

    music_directory "/mnt"

    Le fichier de configuration de MPD est assez bien documenté via le texte commenté. Ainsi vous pourrez personnaliser l'emplacement de vos futures playlists et de la base de donnée par exemple si ça vous chante.

    Partie également importante de ce fichier, la configuration des sorties audio. Si vous n'utilisez pas de DAC externe, vous pouvez laisser sans toucher. Si vous avec un DAC externe supportant de bonnes fréquences d'échantillonnage et que vous avez de la musique haute qualité, il sera intéressant d'y faire figurer :

    audio_output {
        type                "alsa"
        name                "My ALSA Device"
        device              "hw:CARD=C1,DEV=0"
        mixer_type          "none"
        auto_channels       "no"
        auto_format         "no"
        auto_resample       "no"
    }

    Le nom de la carte correspond pour le Cambridge DacMagic 100. Pour trouver le nom de votre DAC, vous pouvez par exemple faire usage de la commande aplay -L, qui vous listera l'ensemble des périphériques audio et leurs caractéristiques.

    Cette configuration impose à MPD de laisser le flux intouché (pas de traitement a posteriori) et de laisser le DAC révéler son potentiel en traitant du son à des fréquences échantillonnages élevées.

    Normalement c'est tout bon, vous pouvez démarrer ou redémarre MPD et initialiser la base de donnée. Pour ça,  vous allez avoir besoin d'un client, à installer sur les machines qui contrôleront le serveur. Par exemple sonata si vous voulez une interface graphique, ou l'excellent ncmpcpp si vous voulez du joli ncurses dans votre console. Astuce : il est pratique d'utiliser directement sur le RPi un client en ligle de commande minimaliste mpc, qui vous permettra rapidement de faires certaines actions, par exemple mettre la musique en pause parce que le voisin vous attend à votre porte avec une batte de baseball (mpc pause) ou bien mettre à jour la base de donnée (mpc update). Attention, la création de la base de donnée peut être très longue en fonction de la taille de votre bibliothèque. Pendant cette période, le CPU du RPi sera très solicité. Du coup vous saurez vite quand il aura fini...

    L'utilisation de MPD se base sur une liste de lecture centrale, dans laquelle vous ajoutez les morceaux dans l'ordre souhaité de lecture. Pour alimenter cette liste, vous aurez besoin de piocher dans la banque de musique qui a été créée par MPD. Je reste volontairement vague à ce sujet car la présentation de ces concepts varie en fonction du client utilisé.

    Il est également très amusant de contrôler son serveur via une interface web. Si vous désirez le faire, je vous conseille vivement de jeter un œil à ympd, une interface web propre et très légère, et dont il existe une version pour RPi justement.

    Bon, vous l'aurez compris, toute cette première partie n'était qu'un prétexte pour vous présenter le fruit de mon temps libre, mon projet du mois.

    Utiliser un écran LCD

    Il y a quelques années, je cherchais un écran LCD à contrôler par le RPi. J'ai craqué pour le Display-O-Tron 3000, qui dispose d'un rétroéclairage sous stéroïdes et multicolore, d'une série de diodes lumineuses supplémentaires à contrôler et d'un joystick de contrôle. Tout est contrôlable et personnalisable, et le fabriquant a développé une bibliothèque très facile d'usage, utilisable en Python, en C/C++ et en NodeJS. J'avais eu l'idée d'en faire un panneau de contrôle MPD mais je n'avais jamais pris le temps de le coder. C'est maintenant chose faite.

    Ce programme en python donc permet d'afficher les informations de la musique en cours sur MPD, avec les fonctionnalités suivantes :

    • Affichage du titre, de l'artiste et de l'album
    • Défilement du texte quand celui ci est trop long pour tenir sur une ligne
    • Changemment de la couleur du rétroéclairage en fonction de l'état du lecteur
    • Contrôle du lecteur grâce au joystick
    • Killer feature : affichage en temps réel de la puissance sonore via les diodes supplémentaires.

    Mieux que des paroles, voici une vidéo de démonstration

    Je vous invite à allez voir mon code commenté en détail (en anglais).

    Pour le mettre en application, il vous suffira d'installer la bibliothèque Python (voir le lien vers la page Github du fabricant) ainsi que la bibliothèque python-mpd2 utilisée pour contrôler MPD.

    Si vous trouvez des fonctionnalités à ajouter ou des améliorations possibles, n'hésitez pas à me le faire savoir, je serais heureux de prendre toutes les remarques en considération.

    • At chevron_right

      Protégez vos flux : stunnel

      raspbeguy · pubsub.gugod.fr / atomtest · Monday, 13 March, 2017 - 23:00 · 3 minutes

    On ne vous le répétera jamais assez, mais il est indispensable de prendre conscience des enjeux des communications électroniques en clair. En effet, vous n'avez sûrement pas envie qu'un malandrin s'approprie vos messages et actions privées, comme votre correspondance avec votre médecin et vos opérat...

    On ne vous le répétera jamais assez, mais il est indispensable de prendre conscience des enjeux des communications électroniques en clair. En effet, vous n'avez sûrement pas envie qu'un malandrin s'approprie vos messages et actions privées, comme votre correspondance avec votre médecin et vos opérations bancaires, données qu'ils pourrait retourner contre vous pour vous faire chanter, vous voler, ou tout bonnement vous faire du mal d'une manière quelconque. Il faut à tout prix préférer les communications chiffrées, et ce pour n'importe quel protocole.

    Fort heureusement, aujourd'hui le chiffrement des flux est devenu en quelques sortes un standard grâce à l'essor des implémentation du protocole TLS et de ses variantes. Les protocoles anciens se sont pour la plupart dotés d'une surcouche sécurisée (HTTP, IMAP, SMTP, IRC) et les protocoles naissants sont aujourd'hui regardés de travers s'ils omettent la sécurité dans leurs cahiers des charges.

    Malheureusement il existe encore des protocoles/programmes irréductibles qui continuent sans répit à laisser se balader à poil des paquets sur la toile. Ne leur jetons pas tout de suite la pierre, ou du moins pas trop fort, ce choix n'est pas toujours dénué de sens comme nous le verrons par la suite.

    Ici comme dans pas mal d'articles sur Hashtagueule, il y a un déclencheur personnel du besoin qui fait l'objet du tutoriel en question. On est pas des hommes politiques, nous on vous parle de choses qu'on connaît. On a l'idée de parler de certaines choses en se frottant à des problèmes et en y trouvent des solutions. Je vais donc vous parler de l'outil Bitlbee, qui agit comme une passerelle entre divers messageries comme Jabber, Twitter, MSN et Yahoo d'un côté, et IRC de l'autre côté, ce qui permet de centraliser toutes ses messageries sur un simple client IRC. Pour ce faire, il simule un serveur IRC sur lequel se connectent les client qui veulent accéder aux services agrégé. Seulement, alors que la plupart des serveurs IRC proposent une connexion sécurisée, Bitlbee n'implante pas cette couche TLS. En partie parce que le serveur est destiné à être exécuté en local (donc pas grand risque d'intercepter les communications). Mais n'empêche que ça semble bizarre et qu'à priori ça bride pas mal les utilisations.

    En réalisant ça, j'étais d'abord outré, et ça a même remis en question mon utilisation du programme. Cependant, j'ai trouvé une solution, qui est par ailleurs proposée par les développeurs. J'ai découvert un outil magique qui s'appelle stunnel, qui permet de transformer n'importe quel flux en clair par un flux chiffré à travers un certificat TLS. Pour ceux qui s'y connaissent un peu en serveur web, il s'agit du même principe qu'un reverse proxy comme le ferait un nginx ou un HAproxy, mais pour n'importe quel flux TCP (même si HAproxy est capable de gérer les flux TCP mais c'est moins marrant).

    Du coup, il suffit de posséder un certificat adapté au nom de domaine qui pointe vers votre serveur (chose très facile en utilisant Let's Encrypt, pour peu que vous ayez un serveur web qui sert ce nom de domaine) et il vous est possible d'envelopper ce flux dans un tunnel TLS. Voici ce que j'ai ajouté dans ma configuration stunnel :

    [bitlbee]
    accept = 6697
    connect = 6667
    cert = /etc/letsencrypt/live/mon.domaine.tld/fullchain.pem
    key = /etc/letsencrypt/live/mon.domaine.tld/privkey.pem

    Le port 6667 est le port non sécurisé, et le port 6697 est le port sécurisé. Elle est pas belle la vie ?

    De plus stunnel peut fonctionner dans l'autre sens, c'est à dire servir du contenu en clair à partir d'un canal sécurisé, ce qui est pratique quand derrière on a pas de client compatible avec TLS.

    Bon, revenons sur les raisons qui poussent un programme à ne pas adopter la sécurisation des flux. Dans le cas de bitlbee, comme je l'ai dit plus tôt, c'est un serveur destiné à être atteint en local. De plus, certains projets choisissent de ne pas implémenter le chiffrement et de recommander explicitement des solutions comme stunnel pour ne pas être responsables d'une éventuelle faille dans leur implémentation. Et aussi parce que c'est gonflant de faire de la sécu quand le projet à l'origine n'a absolument pas de rapport, il faut le reconnaître.

    • At chevron_right

      Battle for Wesnoth

      motius · pubsub.gugod.fr / atomtest · Monday, 27 February, 2017 - 23:00 · 6 minutes

    Bonjour à tous ! Aujourd'hui je vais vous présenter (pour ceux qui ne le connaissent pas déjà) le jeu Battle For Wesnoth. C'est un très beau jeu mono- et multijoueur en tour par tour, stratégique, et qui fait aussi appel à la chance, le tout dans un univers de type médiéval fantastique. Battle for W...

    Bonjour à tous !

    Aujourd'hui je vais vous présenter (pour ceux qui ne le connaissent pas déjà) le jeu Battle For Wesnoth. C'est un très beau jeu mono- et multijoueur en tour par tour, stratégique, et qui fait aussi appel à la chance, le tout dans un univers de type médiéval fantastique.

    Battle for Wesnoth est un logiciel libre écrit en C++ et disponible  sous licence GPLv2. Il s'installe très facilement sous Windows (binaires disponibles) GNU/Linux, et sous Mac aussi, quoique je n'ai pas testé. Sur ma debian (idem sur Ubuntu) je l'ai installé ainsi :

    apt-get install wesnoth

    Vous avez la possibilité de jouer une campagne pour vous familiariser avec le jeu, après avoir fait le tutoriel. Comme vous le voyez ci-dessous, le jeu est facile à prendre en main, puisqu'on vous indique ce qu'il faut faire.

    Dans le jeu, on se déplace sur des cases hexagonales, vous pouvez voir un hexagone jaune autour de la pièce que mon roi a recruté.

    Les bases de la stratégie

    Le héros/roi

    Vous avez un roi qu'il ne faut pas perdre sans quoi vous perdez le jeu, et qui est le seul qui permette de recruter de nouvelles unités, seulement quand il est à certains endroits stratégiques de la carte : ici à une place particulière du château, celle entourée par des tours pointues.

    L'or

    Vous avez une certaine quantité d'or qu'il faut bien gérer, il s'agit de l'unique ressource du jeu. L'or diminue quand vous recrutez des combattants, et à chaque tour, proportionellement au nombre de combattants. Vous gagnez d'autant plus d'or que vous avez de villages (ceux avec un drapeau rouge au dessus).

    Se déplacer

    La distance de déplacement dépend du terrain pour les unités qui ne volent pas. Certaines unités vont plus vite sur l'eau, d'autres sur terre. Ici, on voit que mon roi se défend mieux dans la forêt (50%) que sur un chemin (40%).

    On se déplace mal dans les cases adjacentes à des ennemis, une partie de la stratégie repose donc parfois sur la création d'un "mur" de personnages pour empêcher la prise de villages. Pour un mur, il suffit d'espacer les unités de 0 ou 1 ou 2 cases pour que l'adversaire ne puisse pas passer.

    Combattre

    Il y a deux types d'attaques : corps-à-corps et à distance. Ici je suis dans le tutoriel, donc je n'ai qu'une attaque : "6-3" signifie que j'attaque 3 fois en faisant 6 points de dommage. Le hasard fait que j'ai touché deux fois sur trois, et que mon adversaire a riposté trois fois sur cinq. Il a "3-5", qui signifie qu'il attaque cinq fois, en faisant trois points de dommages

    Il y a des armes qui sont plus efficaces que d'autres sur un adversaire, il faut donc choisir qui attaque qui sera la plus efficace. Par défaut le jeu propose souvent l'attaque la plus utile.

    Vous pouvez voir le détail des attaques avec des statistiques avancées.

    Par exemple si un adversaire n'a pas d'attaque à distance, il peut être utile de l'attaquer à distance pour ne pas subir de dommages. Lorsque lui nous attaquera, on pourra riposter avec notre attaque corps-à-corps. Les attaques à distance se font aussi quand on est sur une case adjacente à notre adversaire, ce qui fait qu'il pourra aussi attaquer à son tour.

    La stratégie minimale

    Il y a beaucoup de modificateurs de chance qu'il faut bien utiliser (c'est une grande partie de la stratégie). Premièrement le terrain, on attaque mieux à certains endroits que d'autres. Deuxièmement le jour est divisé en deux tours ou il fait "jour", deux ou il fait "nuit", et deux périodes liminaires. Certains combattants sont avantagés le jour, d'autre la nuit, certains lors des périodes limites, enfin d'autres ne sont pas affectés.

    Il faut aussi choisir ses combattants en fonction de l'adversaire si possible. Je vous l'ai déjà dit, certaines armes sont plus efficaces que d'autres.

    Pour la suite, je vous conseille le tutoriel, il est très facile. Le jeu vient en anglais par défaut mais est complètement traduit en français.

    Vous pourrez vous diriger vers cette page du wiki pour en apprendre plus sur la stratégie, et défaire plus facilement l'IA, qui est assez fûtée.

    Une partie à plusieurs

    Sur la machine d'un joueur

    Retrouvons les passionnés du code et de l'adminsys en installant un serveur Wesnoth.

    Sous Windows, on peut lancer le serveur Wesnoth à partir du jeu. Sous debian, wesnoth est un service.

    Tout d'abord, installer le serveur wesnoth à l'aide de la commande :

    apt-get install wesnoth-1.10-server

    ou

    apt-get install wesnoth-1.12-server

    La version du serveur importe moins que celle du client, et c'est un problème que l'on verra plus tard.

    Puis démarrez le service. Il tourne sur le port 15000.

    service wesnoth-1.10-server status 
    service wesnoth-1.10-server start # si status == stop.

    Sur un serveur dédié

    Pour pouvoir jouer avec des personnées n'étant pas sur votre sous-réseau local, il faut installer le service sur un ordinateur exposé à internet. Personnellement, j'ai installé un serveur Wesnoth sur une machine virtuelle Qemu-KVM de mon serveur. Pour la simple raison que mon serveur est sous debian 8 stable codename Jessie, et que la version de Wesnoth par défaut est la 1.10, qui est l'ancienne version stable. Sous debian testing codename Stretch, on a la version 1.12 de Wesnoth.

    Je n'ai pas eu de problèmes de compatibilité client-serveur, mais j'en ai eu client-client, donc pour une partie à plusieurs, choisissez la même version (1.10 ou 1.12 au moment de publication de l'article).

    Voici la configuration que j'ai utilisée (il faut rediriger le trafic IP du port 15000 depuis le serveur vers la machine virtuelle). Cette machine virtuelle a pour adresse 192.168.122.145, il faudra que vous adaptiez en fonction de votre propre configuration :

    #!/bin/bash
    
    IP_FWD_ON=`/sbin/sysctl net.ipv4.ip_forward | cut -d '=' -f2 | tr -d '[:space:]'`
    if [ "${IP_FWD_ON}" = "1" ] ; 
    then
        /sbin/iptables -t nat -I PREROUTING -p tcp -d 192.168.1.16 --dport 15000 -j DNAT --to-destination 192.168.122.145:15000
        /sbin/iptables -t nat -I PREROUTING -p tcp -d 192.168.1.16 --dport 15000 -j DNAT --to-destination 192.168.122.145:15000
        /sbin/iptables -I FORWARD -m state -d 192.168.122.0/24 --state NEW,RELATED,ESTABLISHED -j ACCEPT
    else
        echo "Err: Routage NAT désactivé."
    fi

    Ce script (à utiliser en tant que root sur la machine hôte) vérifie que l'IP forwarding est activé, et si oui route le trafic du port 15000 vers l'IP 192.168.122.145.

    Le jeu est assez complet et mériterait une description plus avancée, notamment des races (Loyalistes, Rebelles, Nordiques, Morts-Vivants, Aliance knalgane, Dracans) des types d'attaques (perforantes, tranchantes, froid, chaud) , mais ça ferait un article long comme le bras, et c'est déjà assez bien documenté dans le jeu et dans le wiki, donc je vous laisse là avec largement de quoi jouer, et même de quoi mettre en place un serveur, éventuellement public. Vous pouvez aussi rejoindre des serveurs officiels.

    Bonne partie !

    Motius

    • At chevron_right

      Git recall

      raspbeguy · pubsub.gugod.fr / atomtest · Tuesday, 7 February, 2017 - 23:00 · 1 minute

    Si vous développez, contribuez, travaillez en groupe ou tout simplement suivez l'évolution du développement d'un programme, vous devez sûrement connaître l'outil de versionnage Git. Cet outil développé par Linus Torvalds lui-même est une référence pour la gestion de projet technique, ce que soit pou...

    Si vous développez, contribuez, travaillez en groupe ou tout simplement suivez l'évolution du développement d'un programme, vous devez sûrement connaître l'outil de versionnage Git. Cet outil développé par Linus Torvalds lui-même est une référence pour la gestion de projet technique, ce que soit pour un projet personnel ou en équipe. Git permet de tracer l'évolution de son code, structurer les fronts de développement et de pouvoir revenir à n'importe quelle version passée.

    Bon, si vous ne connaissez pas Git, cette news vous est inutile, à part pour vous présenter cette outil qui a de grande chances de vous être très utile. Si vous utilisez Git, vous connaissez donc ce besoin de vérifier rapidement les dernières évolution du code, par vous-même ou par vos collaborateurs. Ils vous est possible d'en avoir une vue via la commande git log, un peu fastidieuse à utiliser si vous voulez filtrer ce que vous voulez voir.

    Vous avez également une autre possibilité de le faire, de manière interactive et avec des option faciles et minimalistes pour vous aider à faire le tri. Il s'agit de la commande git recall qui s'installe sous la forme d'un simple script à installer. Vous pouvez alors préciser le nombre de jours dans lesquels vous souhaitez faire votre recherche, préciser l'auteur des commits qui vous intéressent, puis naviguer interactivement dans la liste des commits afin d'afficher des différentiels.

    J'espère que cela vous sera utile.

    • At chevron_right

      [Express] Internet en France

      raspbeguy · pubsub.gugod.fr / atomtest · Friday, 20 January, 2017 - 23:00

    Hier, François a vaillamment avoué qu'il avait été à l'origine le l'arrivée d'Internet en France. On l'applaudit bien fort. Franchement, il nous a bien été utile, non ? Sans lui, y aurait pas Hashtagueule par exemple. On s'ennuierait beaucoup plus, c'est moi qui vous le dit. Alors la moindre des cho...

    Hier, François a vaillamment avoué qu'il avait été à l'origine le l'arrivée d'Internet en France. On l'applaudit bien fort. Franchement, il nous a bien été utile, non ? Sans lui, y aurait pas Hashtagueule par exemple. On s'ennuierait beaucoup plus, c'est moi qui vous le dit.

    Alors la moindre des choses, c'est de le remercier. Je vous invite tous à le faire en lui envoyant un gentil courriel (parce que oui, du coup c'est grâce à lui les courriels) contenant vos éloges, vos plus beaux poèmes en son honneur ainsi qu'une rédaction portant sur votre journée parfaite en compagnie de François Fillon, minimum 500 mots.

    P.S. : à quand des candidats politiques compétents ?

    • At chevron_right

      Less is more, partie 1.5 : Encore une chose

      raspbeguy · pubsub.gugod.fr / atomtest · Wednesday, 21 December, 2016 - 23:00 · 7 minutes

    Quand vous vous préparez probablement à passer un joyer réveillon de Noël, je suis là à écrire pour votre bon plaisir. Appréciez svp. Pour la suite de cette série d'articles sur l'épuration de votre bureau, j'avais prévu de passer à la présentation d'outils courants pour les tâches quotidiennes, mai...

    Quand vous vous préparez probablement à passer un joyer réveillon de Noël, je suis là à écrire pour votre bon plaisir. Appréciez svp.

    Pour la suite de cette série d'articles sur l'épuration de votre bureau, j'avais prévu de passer à la présentation d'outils courants pour les tâches quotidiennes, mais en continuant ma propre configuration de bureau, je me suis rendu compte qu'il y avais pas mal de choses à ajouter par rapport au dernier article. En tout cas, trop de choses pour essayer de les bourrer dans un coin de marge.

    J'aimerais vous parler plus en détail de py3status qui, si vous vous en rappelez, sert à améliorer la barre d'information d'i3. Ainsi, alors que cette barre par défaut propose assez peu de modules et une personnalisation minimale, la barre améliorée avec py3status propose des fonctionnalités bien plus intéressantes. Outre la plus grande flexibilité des réglages, avec cet utilitaire il est très simple d'écrire ses propres modules, et on peu prendre en compte les clics pour le comportement des modules.

    Parmi tous les modules proposés, il y en a tant d'utiles que je n'avais pas la place au début dans ma barre. Heureusement que j'ai ensuite découvert qu'on avait droit à plusieurs barres dans la configuration i3. De plus, j'ai noté qu'il existe un pull request sur le dépôt de py3status qui permettrait de multiplier les configurations pour une seule barre, donc la possibilité de changer de modules à chaud.

    Ma configuration i3 actuelle

    Une petite description des modules affichés, de gauche à droite :

    En haut :

    • Informations sur le morceau en cours dans un lecteur compatible MPRIS.
    • Mises à jour en attentes (la première valeurs représente le nombre de mises à jours des paquets binaires et la deuxième concerne les paquets AUR).
    • Statut de mon mobile connecté via KDE Connect (peut s'utiliser sans autre composant KDE, grâce au ciel. Et oui, j'ai appelé mon mobile Philippe).
    • Niveau du volume sonore, contrôlable au clic et à la molette. Grâce à ce module, je peux me passer de l'utilitaire pa-systray.
    • Niveau de luminosité, contrôlable à la molette.
    • État de l'extinction d'écran DKMS, contrôlable au clic.
    • Sélectionneur de configuration pour écran externe, contrôlable au clic.
    • Compteur d'articles non lus sur mon instance Tiny Tiny RSS.
    • Compteur de mails non lus (le texte avant le nombre correspond au compte concerné).
    • Date et heure.
    • Icônes de notifications des programmes classiques (ici, NextCloud et nm-applet).

    En bas :

    • Bouton de capture d'écran avec envoi automatique sur un serveur choisi, contrôlable au clic.
    • Vitesse du réseau.
    • Indicateur de VPN.
    • Indicateur de connexion à internet (affiche l'IP publique par défaut, masquée ici pour des raisons évidentes).
    • Indicateur d'IPv6.
    • Indicateur de connexion WiFi (encore ce Philippe...).
    • Indicateur de connexion cablée.
    • Espace libre sur le disque.
    • Utilisation CPU.
    • Mémoire utilisée.
    • Température CPU.
    • Charge CPU.
    • État de la batterie.

    L'écriture d'un module est vraiment simple, pour peu qu'on ait des bases de Python. Si vous le faites, je vous invite à en parler en commentaire ainsi qu'à contribuer au projet en proposant un pull request. Les mainteneurs sont sympas, et pour ceux qui débutent dans la contribution dans des projets open-source, il est très gratifiant de voir son travail en temps qu'amateur se faire valider par un projet qu'on utilise tous les jours.


    Je souhaite également parler des symboles que vous pouvez voir dans mes barres d'information. Ceux qui font du frontend web reconnaîtront les glyphes du projet Font Awesome (pour le coup, rien à voir avec le gestionnaire de fenêtres Awesome). Il s'agit d'une police de caractère qui utilise une plage spéciale de la table unicode afin de mettre à disposition des symboles qu'il est pratique d'utiliser principalement pour des pages web, mais également, comme vous pouvez le voir, sur des interfaces un peu plus personnelles. Lorsque i3 tombe sur un caractère unicode que la police qu'il utilise ne peut pas afficher, il va alors utiliser la police Font Awesome en tant que police de substitution. Afin mettre ce procédé en œuvre, il est nécessaire d'installer la fonte (le paquet AUR otf-font-awesome sous Arch Linux) et de vérifier que le fichier de configuration d'i3 contienne la ligne suivante :

    font pango:monospace 8

    Vous pouvez remplacer monospace par la fonte que vous préférez. Vous serez ensuite libres de choisir une icône Awesome en le précisant dans la configuration des modules py3status (le plus souvent, il faut se tourner vers la variable format).


    J'avais oublié d'expliquer dans mon précédent article, lorsque j'ai parlé de touches de volume et de luminosité sur le clavier, comment utiliser les touches de contrôle des lecteurs de musique. C'était pourtant sur ma liste des choses importantes à dire, j'en suis confus. Laissez moi réparer ça.

    Pour utiliser ces touches, comme pour les touches volume et luminosité, il vous faudra spécifier dans votre configuration i3 que vous souhaitez mapper ces touches médias à un appel de commande. Simplement, le problème est que par défaut, il n'existe pas de commande simple pour contrôler un lecteur MPRIS. Nous avons donc besoin d'installer playerctl, un petit programme en ligne de commande qui va se charger de fournir des commandes lisibles et succinctes. Ensuite, il nous faudra ajouter dans le fichier de configuration i3 les lignes suivantes :

    bindsym XF86AudioPlay exec playerctl play-pause
    bindsym XF86AudioPrev exec playerctl previous
    bindsym XF86AudioNext exec playerctl next

    Notez que si le lecteur que vous utilisez n'est pas compatible MPRIS, il vous faudra trouver une autre astuce. Notamment si vous utilisez cmus en version release et non en version git, vous aurez besoin de faire appel à la commande cmus-remote.


    Enfin, pour terminer cet addendum, je vous parlerai du choix de la console. Entre la publication du dernier article et la rédaction de l'article que vous êtes en train de lire, j'ai fait le test d'une autre console qui s'appelle Termite. C'est une bonne console qui donne la même sensation qu'Urxvt, mais infiniment plus simple à configurer. Ça s'explique par le format du fichier de configuration : Termite se configure avec une syntaxe INI tandis qu'Urxvt se configure via un fichier Xresourses, qui suit une syntaxe vieillotte, pour ne pas dire franchement obsolète. De plus, Termite n'as pas besoin de patchs ésotériques quand on a besoin de fonctionnalités un peu spéciales, comme la prise en compte de la molette dans certains programmes pseudo-graphiques. Au fond, Urxvt n'est déjà rien d'autre qu'un patch du Rxvt original pour gérer les caractères unicodes...

    Cependant, il paraît que Urxvt possède plus de fonctionnalités que Termite. Une vieille légende prétends même que Urxvt supporterait plusieurs polices de caractères à la fois, bien que jamais je n'aie réussi à faire fonctionner ce mécanisme que, j'imagine, seuls les âmes les plus téméraires et les plus courageuses peuvent activer.

    De plus, et c'est ce qui m'a définitivement décidé à rester sur Urxvt, Termite nécessite un compositeur graphique (par exemple xcompmgr) pour gérer la transparence. Rien de très gênant là-dedans, les compositeurs graphiques minimalistes sont très légers, et il m'en coûte très peu d'ajouter une ligne pour en lancer un dans ma configuration i3. Mais malheureusement, i3 a un petit bug lorsqu'on utilise un compositeur graphique avec certaines positions de fenêtre : quelquefois, le fond d'un terminal sera non pas le fond d'écran comme on pourrait s'y attendre, mais le contenu du terminal qu'y s'y trouvait précédemment, ce qui n'empêche pas de travailler mais qui est assez gênant.

    Urxvt, quant à lui, n'a pas besoin de compositeur graphique pour la transparence, car il utilise une "fausse transparence" : pour faire simple, au lieu de demander au serveur X ce qui se trouve derrière lui, il va directement remonter au niveau de l'image de fond et mettre en transparence la portion du fond d'écran qu'il cache. Bon, pour le coup il est impossible, si on a une console Urxvt flottante, de voir une autre fenêtre par transparence, mais personnellement je m'en rappe les marrons, sachant que j'utilise extrêmement rarement les fenêtres flottantes, et absolument jamais pour des consoles. Sinon, à quoi bon utiliser i3 ?


    En espérant que ces commentaires vous seront utiles, je vous souhaite un joyeux Noël, et peut être une bonne année. Tchin tchin.