Notes en cheminant dans les méandres de mon système d’exploitation.


Sur GNU Linux on dispose de terminaux TTY, classiquement accessible à l’aide des combinaisons de touches Ctrl + Alt + F1 à F6 (F7 étant dédié à la session graphique Xorg).

Depuis longtemps, je cherche à savoir quelle police de caractère est utilisée dans ces terminaux. La police en question est remarquable par ses accolades bien particulières et que je n’ai jamais vu ailleurs à ce jour.

Autre question : je me demande également s’il est possible de faire des copies d’écrans de ces consoles, qui ne disposent d’aucun outil graphique comme ceux que l’on trouve en session graphique.

Relançant la question sur Mastodon, sans grand succès, j’ai creusé encore une fois le sujet avec ma petite pelle à code, et cette fois ai trouvé les réponses !

Copie d’écran d’un TTY

Première étape, pour réussir à faire une recherche de la police de caractère, en avoir une copie d’écran peut s’averer assez pratique. fbcat est un outil en ligne de commande permettant de prendre une copie d’écran d’une console, au format *.ppm du framebuffer device comme dit la description.

  1. Installation : sudo apt install fbcat ;
  2. Utilisation : sudo fbcat > {nom}.ppm (enregistre l’image à la racine de votre /home). La commande ne semble fonctionner qu’en super-utilisateur ;
  3. Retour sur la session graphique pour admirer la belle copie d’écran ! (Notez les jolies accolades à la fin de la ligne.)

Copie d’écran du terminal TTY1

Recherche

Une fois muni de l’image, je pose la question sur Mastodon. Panais m’oriente vers Ask Ubuntu, une URL que j’avais autrefois croisé, mais sans y trouver ma réponse :

  • Ubuntu Mono ? assurément pas, je la connais ;
  • Terminus Font ? non plus ;
  • GNU Unifont ? Les copies d’écran me disent que non1.

Une piste sur laquelle je remets mes pas cependant : le répertoire /usr/share/consolefonts/ qui porte un nom plutôt explicite et de nombreux fichiers de police dans un format *.psf.gz que je n’arrive pas à éditer.

Éditer un fichier *.psf.gz

C’est clairement à ce stade que j’ai peiné.

Première étape : dupliquer le répertoire /consolefonts dans mes documents afin de pouvoir le décortiquer sans endommager l’original.

Décompresser tous les fichiers *.gz pour ne plus disposer que de fichier *.psf. Ligne de commande utilisée dans le répertoire dupliqué pour dé-gzipper les fichiers en masse : gunzip *.gz

À ce stade, toujours impossible de visualiser les polices, ni dans le gestionnaire de polices par défaut du système, ni dans Fontforge (dommage).

Panais me met indirectement sur la piste en disant que *.psf est un format très ancien. À format ancien, outil d’édition ancien probablement me dis-je.

Je cherche dans les outils Xorg, sans réel succès mais avec des découvertes sympathiques (j’y reviendrai peut-être dans un futur billet).

psftools

La recherche me mène vers psftools, qui comme son nom l’indique est un outil pour manipuler le format *.psf. En fait ce n’est pas un outil mais une collection d’outils.

Installation : télécharger les sources et suivre la procédure habituelle, expliquée dans le fichier INSTALL.

Au passage, j’ai dû faire l’installation en super-utilisateur car la dernière étape ne voulait pas passer en utilisateur normal.

psftools ne s’utilise pas directement. Son nom est celui d’une collection d’outils portant d’autres noms :

psf2bbc        psf2inc        psf2wof        psfaddtable    psfpages       psfxform       
psf2bdf        psf2pbms       psf2wyse       psfgettable    psfs2cpi       psfxtable      
psf2bsd        psf2raw        psf2xbm        psfjoin        psfs2mda       
psf2fnt        psf2txt        psf2zx         psfmerge       psfstriptable

Ces programmes permettent de convertir vers ou à partir du format *.psf.

Problème de bibliothèque

Alors que je souhaite convertir un fichier vers le format *.bdf — que je sais éditable avec Fontforge —, la commande me retourne un message bloquant :

$ psf2bdf Uni3-Fixed13.psf Uni3-Fixed13.bdf
psf2bdf: error while loading shared libraries: libpsf.so.0: cannot open shared object file: No such file or directory

Je fini par trouver que la commande ldconfig, utilisée en super-utilisateur, permet de créer les liens manquants vers les bibliothèques nécessaires (bien présentes après l’installation de psftools). J’ai passé la commande avec le paramètre verbeux, permettant de voir ce qu’il se passe :

sudo ldconfig -v

Le nombre de liens créés était supérieur à ceux nécessaires pour psftools et j’ignore si cela a un incidence indésirable quelconque sur d’autres logiciels.

Uni2-Fixed16

Après avoir transformé certaines polices *.psf au format *.bdf, puis ouvert ce format avec Fontforge, il s’avère donc que la police que je recherche est Uni2-Fixed16 !

En testant la transformation vers différents formats, je découvre que le format *.xbm est très pratique : c’est une image générée de tous les caractères de la police choisie.

Police Uni2-Fixed16 au format xbm

Cette pièce de puzzle en main, j’ai alors pu trouver d’autres informations intéressantes…

showconsolefont

Dans le terminal TTY, showconsolefont permet de visualiser le tableau de glyphes de la police courante.

Copie d’écran du résultat de la commande showconsolefont

console-setup

Dans le répertoire /etc/default/, le fichier console-setup livre les informations de configuration de la console. J’y retrouve bien les propriétés typographiques que je cherchais :

CODESET="Uni2"
FONTFACE="Fixed"
FONTSIZE="16"

setfont

La commande setfont permet de changer (en temps réel) la police utilisée dans la console. À utiliser avec les formats *.psf.gz vus plus haut, en appelant directement le nom d’une des polices installées :

$ setfont Uni2-Fixed16.psf.gz

Toutefois, une de mes consoles ne pas/plus de l’Uni2-Fixed16 (accident durant mon enquête ?). Je peux la remettre avec cette commande mais au redémarrage de la machine aujourd’hui, l’ancienne police était revenue. À voir comment remettre cela de façon persistante.

Des infos supplémentaires sur Linux From Scratch à propos des polices de console.

Une liste exhaustive

Un dernier lien pour finir : la liste exhaustive des polices de console de plusieurs distributions Linux et BSD.

Où l’on notera que celle définie par défaut sur Ubuntu 18.04 est bien l’Uni2-Fixed16.psf :-)


  1. En réalité c’est bien une police Unifont mais je ne m’explique pas la différence entre les copies d’écran sur le site Unifoundry et ce que j’ai sur mon système, en particulier sur les glyphes des accolades qui me servent de point de référence.