Miamondo

Linux

  • Personnaliser une image iso d'Archlinux avec l'outil Archiso

    Bonjour,

    Aujourd'hui, si vous le voulez bien, je vais vous parler d'Archiso. Il s'agit d'un outil très intéressant puisqu'il permet d'obtenir rapidement une image iso de la distribution Archlinux. C'est d'ailleurs avec Archiso que les images officielles de cette distribution sont créées. Il permet également de générer une image iso personnalisée.

    Tout d'abord, je mets à jour ma distribution et j'installe archiso.

     

     miamondo@mws~ $ sudo pacman -Syu

     miamondo@mws~ $ sudo pacman -S archiso

     

    Archiso propose deux configurations qui sont baseline et releng. Avec baseline, j'obtiens l'image iso la plus basique qui soit. Aucun paquet n'est préinstallé et la configuration est minimale. 

    Avec releng, c'est autre chose. Cette configuration permet de générer une image iso oficielle ou bien de personnaliser sa propre image.

    Obtenir une image iso officielle

    Tout d'abord, très important, je passe en root.

     

     miamondo@mws~ $ su

     Mot de passe:_

     

    Ensuite, c'est très simple. Il suffit de suivre les instructions de la documentation officielle, c'est-à-dire de se déplacer dans le répertoire contenant le fichier build.sh et d'exécuter ce dernier. 

     

     [root@mws miamondo]# cd /usr/share/archiso/configs/releng

     [root@mws miamondo]./build.sh

     

    Les lignes de commande commencent à défiler dans le terminal. Je n'ai rien d'autre à faire que de patienter en buvant un thé. Lorsque le fichier build.sh a terminé son travail, je constate qu'un nouveau dossier a été créé dans mon répertoire personnel. Il s'appelle ~/out et il contient l'image iso d'Archlinux à la date du jour!

          Iconarch

    J'essaie de lancer l'installation dans une machine virtuelle. Ça fonctionne!

       Vmarch2

     

    Créer une image iso personnalisée

    Voyons maintenant comment obtenir une image iso personnalisée. Je commence d'abord par créer un nouveau dossier dans mon répertoire personnel. Il accueillera les fichiers de configuration du profil releng. Je le baptise tout simplement ~/mon_iso.

     

     miamondo@mws~ $ mkdir ~/mon_iso


    Puis, je repasse en root (très important).

     

     miamondo@mws~ $ su

     Mot de passe:_

     

    À présent, je vais copier la configuration releng dans le dossier nouvellement créé.

     

     [root@mws miamondo]# cp -r /usr/share/archiso/configs/releng/ mon_iso

     

    À l'intérieur de ~/mon_iso, on trouve différents fichiers et répertoires. Deux d'entre eux m'intéressent:

    • packages.x86_64: Ce fichier liste les paquets installés dans l'image système live.
    • airootfs: Ce répertoire est une surcouche qui va me permettre de personnaliser mon image iso.

    Toute modification autre que l'installation de paquets peut être prise en compte en éditant le fichier ~/mon_iso/airootfs/root/customize_airootfs.sh. Par exemple, je vais modifier la locale en remplaçant (à la ligne 5) en_US par fr_FR. Normalement, lorsque le système sera installé, il sera déjà configuré en français. Je peux également en profiter pour paramétrer le clavier en français en rajoutant cette ligne, toujours dans le fichier customize_airootfs.sh:

     

     echo "KEYMAP=fr-latin9" > ~/mon_iso/releng/airootfs/etc/vconsole.conf

     

    À la ligne 8, je paramètre d'ores et déjà le fuseau horaire en remplaçant UTC par Europe/Berlin

    Attention! dans le script customize_airootfs.sh, le slash (/) correspond à la racine du système live.

    Si je veux faire en sorte que des paquets soient pris en compte à l'installation du système, je vais les rajouter dans le fichier packages.x86_64.

    Enfin, si je souhaite par exemple copier un fichier caché bien précis dans le répertoire personnel de l'utilisateur ou des utilisateurs, je vais créer un répertoire intitulé skel et y copier le fichier.

     

     [root@mws miamondo]# cp ~/.bashrc ~/mon_iso/releng/airootfs/etc/skel

     

    Ainsi, dès que le répertoire personnel de l'utilisateur miamondo sera créé, le fichier caché .bashrc y sera transféré.

    N'essayez pas de créer un répertoire home à la place de skel. Ça ne fonctionne pas.


    L'article de wikipédia consacré à /etc/skel donne une définition tout à fait claire du rôle de ce répertoire:

    "Sous Linux, le répertoire /etc/skel contient les fichiers qui permettent de construire automatiquement le répertoire /home de l'utilisateur au moment de sa création avec le programme useradd. Le répertoire /home contient les données personnelles de chaque utilisateur comme la configuration de l'environnement de travail et des applications courantes. Dans un système d'exploitation Linux, c'est aussi le répertoire de référence du système au moment de la connexion de l'utilisateur, ce qui est pratique parce qu'il contient de nombreux fichiers de configuration importants ainsi que les données de l'utilisateur.

    Le programme useradd est situé dans le répertoire /usr/sbin/, et n'est accessible qu'en mode root. Il faut alors posséder les droits d'administrateur ou de super-utilisateur.

    /etc/skel permet donc à l'administrateur de personnaliser un squelette pour le répertoire /home qui fixe les paramètres initiaux à chaque nouveau compte utilisateur créé."


    Après avoir apporté toutes les modifications souhaitées à la configuration, je me déplace dans le répertoire releng et j'exécute le fichier ./build.sh.

     

     [root@mws miamondo]# cd /home/miamondo/mon_iso/releng

     [root@mws releng]# ./build.sh -v

     

    Si tout se passe comme prévu, un répertoire out va être créé avec, à l'intérieur, mon image iso personnalisée d'Archlinux. Il ne me reste plus qu'à tester celle-ci dans une machine virtuelle ou bien à la graver sur une clé USB.

     

     [root@mws miamondo]# ls /home/miamondo/mon_iso/releng

     airootfs efiboot  mkinitcpio.conf packages.x86_64 syslinux

     build.sh isolinux out             pacman.conf     work 

     [root@mws releng]ls /home/miamondo/mon_iso/releng/out

     archlinux-2020.04.14-x86_64.iso

     

    Sources de l'article : https://wiki.archlinux.org/index.php/Archiso

  • i3, un gestionnaire de fenêtres alternatif.

    Bonjour, 

    Aujourd'hui, grâce au logiciel i3, j'ai découvert un aspect de l'informatique de bureau que je ne connaissais pas. i3 est un gestionnaire de fenêtres en mosaïque. Très léger, il a la particularité de se "piloter" avec le clavier, même si l'utilisation de la souris reste toujours possible pour redimensionner les fenêtres par exemple, et bien sûr pour naviguer à l'intérieur de celles-ci. Je suis un adepte de la simplicité volontaire et j'ai vite été séduit par cet outil épuré mais très efficace.

    Cela dit, je ne vous cache pas qu'au début, j'ai trouvé i3 déroutant. On est bien loin d'un environnement de bureau traditionnel tel que KDE ou GNOME. Il y a bien une barre des tâches mais celle-ci se contente de délivrer des paramètres relatifs au système et au matériel. Quant aux fenêtres, il est inutile de chercher une croix, un trait ou un petit carré, pour fermer, réduire ou redimensionner ces dernières, puisque tout se fait au clavier. La configuration se résume, tenez-vous bien, à un seul fichier: ~/.config/i3/config

    J'ai toujours aimé le minimalisme synonyme, dans mon esprit, de liberté de choix. On peut dire qu'avec ce gestionnaire de fenêtres épuré à l'extrême, je suis comblé.

    Mais ça fonctionne! Je dirais même que le pavage est tout à fait adapté pour celles et ceux qui, comme moi, possède plusieurs écrans. Les fenêtres ne se chevauchent pas. Elles viennent se placer les unes à côté des autres comme des ardoises ou des tuiles sur une charpente. Grâces à des commandes au clavier, vous pouvez déplacer les fenêtres à votre guise ou bien les redimensionner. C'est une autre approche qui n'est peut-être pas conseillée aux personnes découvrant tout juste Linux. Cela demande tout de même un certain temps d'adaptation. Pour l'installer sur une distribution Archlinux, il faut entrer la commande sudo pacman -S i3-gaps et aussi la commande sudo pacman -S i3status. Cette dernière installe la barre des tâches. Veillez également à ce que votre locale soit correctement configurée. Si ce n'est pas le cas, ça ne fonctionnera pas. Je parle en connaissance de cause! Pour les autres distributions, vous trouverez les instructions d'installation ici.

     

    Se connecter à i3

    Ensuite, dans le fichier caché ~/.xinitrc, il ne faut pas oublier de rajouter la commande suivante: exec i3. Si vous aviez openbox auparavant, veuillez supprimer ou commenter la ligne exec openbox-session. Puis, enregistrez et fermez le fichier. Pour vous connecter et découvrir votre nouveau gestionnaire de fenêtres, rien de plus simple. Si, comme moi, vous n'avez pas de gestionnaire de connexion tel que lightdm ou sddm par exemple, il vous suffit d'entrer la commande startx après avoir renseigné votre identifiant de connexion et votre mot de passe. Donc pour résumer:

     

     login: miamondo

     password: _______

     miamondo@mws~ $ startx

     

     

    Et vous allez vous retrouver devant ce paysage...

    I3

     

    Au premier abord, c'est flippant. Seule touche de lumière dans cet océan de noirceur : la barre des tâches en bas à droite. À la première connexion, i3 va vous demander quelle touche dite "mod" vous souhaitez configurer. Il va vous proposer un choix par défaut. Contentez-vous de suivre ses conseils. Normalement, la touche mod par défaut correspond à la touche "windows". Pour ouvrir votre première fenêtre, en l'occurrence un terminal uxterm, pressez les touches mod + Entrée. J'ouvre deux fenêtres qui se dimensionnent automatiquement et se partagent tout l'espace qui leur est alloué. Ouf! Un peu de lumière!

     

    I3 2

     

    Si vous voulez ouvrir un autre terminal comme par exemple tilix, en lieu et place d'une console uxterm, il vous suffit de modifier le fichier de configuration ~/.config/i3/config et de remplacer à la ligne 49, i3-sensible-xterm par tilix. L'avantage du multiterminal tilix, c'est qu'il utilise aussi le pavage. Pour modifier le fichier de configuration, vous pouvez utiliser l'éditeur en ligne de commande nano ou bien entrer dans le terminal, le nom de votre éditeur de texte préféré, gedit par exemple.

     

    I3 3

     

    Le fond d'écran

    Vous souhaitez peut-être embellir votre nouveau gestionnaire par un joli fond d'écran? Rien de plus simple! Installez feh ou nitrogen et rajoutez une de ces lignes dans le fichier config

    • pour feh :      exec feh --bg-scale '/chemin/vers/image'
    • pour nitrogen : exec nitrogen --restore

     

    I3 4

     

    Voilà qui est mieux! Il existe d'autres possibilités de configuration que je ne détaillerai pas ici. Sachez en tout cas que vous pouvez facilement embellir i3 en utilisant toujours le même fichier de configuration. Voici quelques exemples. La documentation officielle est très bien faite. Personnellement, j'ai passé l'âge de m'amuser à repeindre ma mob en lui adjoignant des plaques chromées sur le réservoir. je me suis contenté de lancer automatiquement plusieurs applications au démarrage. Dans le fichier de configuration, j'ai créé un paragraphe intitulé personal config. Voici ce qu'il contient:

     

     

     ##PERSONAL CONFIG##
     exec nitrogen --restore
     exec xrandr --output HDMI-1 --mode 1920x1080 --right-of VGA-1
     exec setxkbmap fr
     exec gedit
     exec dolphin
     exec brave http://miamondo.org 
     exec tilix

     

    Lorsque je me connecte, quatre fenêtres se répartissent l'espace sur mes deux écrans.

    • l'éditeur de texte gedit,
    • le gestionaire de fichiers dolphin,
    • le navigateur brave,
    • un terminal tilix.

     

    I3 5

     

    Les principales commandes

     mod + Entrée  ouvre une nouvelle fenêtre
     mod + F

     redimensionne la fenêtre en mode plein écran

     redimensionne la fenêtre à sa taille originelle

     Mod + Maj + R  mise à jour du gestionnaire i3, à chaud.
     Mod + Maj + E  déconnexion
     Mod + Maj + Q  fermeture de la fenêtre
     Mod + Maj + flèches  déplace la fenêtre dans le sens de la flèche

     

    Il existe d'autres commandes que je rajouterai dans ce tableau au fur et à mesure de mes découvertes.

     

    Conclusion

    Je suis heureux d'avoir découvert cet outil informatique simple et épuré. Je pense qu'il me correspond bien. Je vous invite à l'essayer, voire même à l'adopter. i3 peut s'avérer déroutant au départ, mais après un petit temps d'adaptation, on se rend très vite compte que le clavier est beaucoup plus rapide que la souris.

  • Python: La programmation parallèle avec le module threading

    Bonjour, 

    Aujourd'hui, j'ai envie de vous parler du module threading. Ce dernier gère la programmation parallèle dans le langage Python et il est fort utile. Je l'ai utilisé pour créer un bouton dont la finalité est d'afficher l'heure à la seconde près, et d'ouvrir un calendrier. Ce bouton a donc deux fonctions et pour remplir sa mission, il a besoin de deux boucles:

     

     Clockbutton2

             

    • une boucle qui surveille les événements de l'utilisateur. C'est la boucle mainloop() de l'environnement graphique tkinter. Par exemple, Si le pointeur de la souris survole le widget Button, la couleur de ce dernier change.
    • une boucle infinie de type while, qui tourne toutes les secondes et qui permet d'afficher l'heure exacte sur le bouton.

    Si nous ne lançons pas ces deux boucles en parallèle, alors soit le code affichera le défilement des secondes mais le bouton sera inactif, soit le bouton sera actif mais les secondes seront figées dans l'éternité... Enfin, jusqu'à l'arrêt forcé du programme.

    Voici un exemple de code qui ne fonctionne pas. Il y a dans ce code deux boucles : while 1 qui est une boucle infinie et mainloop() réceptionnaire d'événements du GUI tkinter. Lorsque le programme pénètre dans la boucle infinie, il n'a plus aucun moyen d'en sortir. Certes, il affichera le défilement des secondes jusqu'à la fin des temps, mais comme la boucle mainloop() se trouve en dehors, nous n'avons plus accès aux événements du bouton. Celui-ci est complètement pétrifié. Comme je l'explique plus bas dans la vidéo en lien avec ce billet, il n'est même pas possible de cliquer sur la croix pour fermer le programme.

    Si nous déplaçons la toute dernière instruction (button.mainloop) à l'intérieur de la boucle while, une seule seconde va défiler puis le programme va "sauter" dans la boucle mainloop() et quitter la boucle infinie. Nous aurons accès aux fonctionnalités du bouton mais l'heure restera figée.

    La solution

    Elle est fort simple. Voici le code qui fonctionne. Il suffit de créer deux objets de la classe threading et de les démarrer en parallèle presque simultanément grâce à la méthode start(). Celle-ci va ensuite passer le relais à la méthode self.run(). Les noms de ces deux méthodes sont génériques. Ils ne peuvent pas être remplacés par d'autres termes. Les deux processus ne démarrent pas exactement au même moment. Il y a une différence de 200 millièmes de secondes. Dans ce cas précis, cet intervalle est nécessaire si on ne veut pas que le programme se crashe lamentablement juste après le décollage.

    Une fois lancé, chaque "thread" vit sa vie. Ils ont toutefois la possibilité d'accéder à des instructions communes comme par exemple les variables de classe. C'est le cas dans mon programme. La boucle infinie a besoin de la variable qui stocke l'objet fenêtre principale. Mais pour éviter qu'ils se mélangent les pinceaux et qu'ils modifient au même moment des données vitales pour la stabilité du programme, nous importons la classe Lock() du module threading.

    Lock() signifie verrou. Je déclare donc une variable (lock = Lock()) en tout début de programme, et je verrouille le premier thread grâce à l'instruction with lock. Avec cet outil, le second thread ne ne démarrera que lorsque le premier aura terminé son travail et lui aura passé la main. En clair, le premier thread fait ce qu'il a à faire, tandis que le second qui n'est pas verrouillé, reste sur le seuil de la porte. Lorsque le premier est prêt, il ouvre la porte et laisse entrer le second thread. Si le premier doit reprendre son travail pour modifier je ne sais quel bouton, il prie le second de bien vouloir sortir de la pièce. C'est très pratique! Bien évidemment, comme le second thread est une boucle infinie, il n'est pas possible de le verrouiller. Il ne passerait jamais la main à son collègue. Voilà donc pour le module threading que je vous invite à découvrir. Si vous avez des remarques ou des interrogations, n'hésitez pas. Ma porte est ouverte.

     

  • Un environnement de bureau codé en Python

    1ère partie : la barre des tâches

     

    Taskbar3

    Bonjour,

    Il y a un peu plus d'un an, je m'étais lancé dans un projet ambitieux, en l'occurrence la programmation d'un environnement de bureau en langage Python. Le résultat n'avait pas été à la hauteur de mes espérances. Si j'ai réussi à coder le menu des applications, je n'ai jamais réussi à coder proprement la barre des tâches et le fond d'écran.

    Les boutons de la barre des tâches tremblotaient ou disparaissaient inopinément ce qui n'était pas un signe de stabilité. Mais ça, c'était avant. Aujourd'hui, je peux annoncer que j'ai réussi à coder une barre des tâches stable et fonctionnelle. Voici une petite vidéo pour illustrer mes propos:

     

     

    Vous trouverez le code sur mon dépôt git, à cette adresse.Le fichier qui lance l'application, se nomme miamondo.py. Il est mis à jour quotidiennement.

    Points à corriger ou à améliorer

    • Le placement des fenêtres. Lorsque l'une d'entre elles est maximisée et couvre les autres, je dois iconifier et désiconifier ces dernières pour les faire apparaitre au-dessus. Ce n'est pas satisfaisant.
    • Les icônes des boutons. J'ai prévu une icône par défaut, pour éviter de faire planter l'application. Mais cette icône apparait bien trop souvent à mon goût. Elle signifie que je n'ai pas réussi à automatiser mon système d'icônes de manière satisfaisante. La raison en est que je ne maîtrise pas suffisamment les expressions régulières (regex). Je dois donc travailler ce point en priorité. Les icônes sont toutes présentes dans mon système de fichiers Archlinux, soit sous /usr/share/icons ou bien sous /usr/share/pixmaps. Les applications sont toutes répertoriées sous /usr/share/applications. J'ai tout ce qu'il faut pour bien faire. Le problème vient donc de mes lacunes en regex.

    Points de satisfaction

    • Stabilité du code. Dans la barre des tâches, les boutons des applications ouvertes ne scintillent pas ou pire encore, ne disparaissent pas de manière inopinée. À l'ouverture d'une fenêtre, le bouton se matérialise immédiatement. À la fermeture de cette même fenêtre, le bouton qui lui est lié, disparait immédiatement de la barre des tâches. Cela prouve que les boucles fonctionnent. 
    • Découverte de la programmation parallèle avec le module threading.
    • Découverte et prise en compte de l'importance du module regex.
    • Le nombre de processus zombies ne dépasse pas 2, ce qui est le signe que le programme est plutôt bien codé, me semble-t-il.

    À bientôt pour la deuxième partie qui vous présentera le menu principal.

  • Se connecter au réseau en l'absence de gestionnaire de connexion

    Bonjour,

    Il y a quelque temps, je me suis retrouvé confronté à un problème inattendu. Je m’étais mis en tête de remplacer Network-Manager, mon gestionnaire de connexions réseau, par wicd, autre gestionnaire de connexions dont l’icône me plaisait beaucoup. 

    À l’époque, j’étais encore sous Debian. J’ai donc procédé de la sorte:

     

     sudo apt purge network-manager

     sudo apt-install wicd

     

     

    Et bien évidemment, j’ai obtenu une erreur. Il m’était impossible de télécharger les paquets et d’installer wicd puisque je n’avais plus de connexion au réseau. Je venais de virer network-manager!

    Faut-il être nouille tout de même! Alors comment faire pour rattraper pareille boulette? Dieu soit loué, ce n’est pas bien compliqué. Dans un terminal, il suffit d’éditer le fichier /etc/network/interfaces avec les droits de super administrateur.

     

     sudo nano /etc/network/interfaces

     

     

    Rajoutez les lignes suivantes à la fin du fichier :

     

     allow-hotplug eth0

     iface eth0 inet dhcp

     

    Ctrl + X pour sortir et Yes pour sauvegarder (ou Oui, ou Ja… Tout dépend de votre langue).

    Ensuite, entrez les commandes suivantes dans un terminal avant de rebooter:

     

     sudo ifdown eth0

     sudo ifup eth0

     sudo apt install wicd

     

    Et le tour est joué!