Yet Another Minitel Project

Il y a 4 ans, j’ai acheté un Minitel 2 sur eBay et il est resté très longtemps dans son carton. L’idée était de le connecter à un Raspberry Pi pour en faire un petit terminal.

Le projet peut être fun, cela permet de découvrir ou de redécouvrir certains outils en ligne de commande et en même temps de faire un peu d’électronique basique.

En théorie, ce type de projet se réalise assez rapidement avec le bon matériel.

Le Minitel est mort, vive le Minitel !

Pour ceux qui ne le connaissent pas, le Minitel était un terminal utilisé en France dans les années 80 et 90 pour se connecter aux services Télétel.

Si je ne me trompe pas, les services Télétel classiques (3611, 3615, etc.) ont été stoppés en 2012. Rien n’empêche tout un chacun de maintenir un serveur Minitel sur un numéro de téléphone dédié [1]. C’est d’ailleurs le cas d’une poignée de services toujours en activité, maintenu par une bande de passionnés. On peut retrouver cette dizaine de services sur le site du musée du Minitel. Vous pouvez même y essayer ces services via un émulateur en html5. Minitel.us est une alternative au musée du Minitel présentant tout un tas de ressources sur le sujet.

 

Faire revivre un Minitel, un projet fun !

Comme pour tout projet, on peut toujours se demander quels sont les buts d’un tel projet. J’ai personnellement l’impression que c’est un classique. C’est sensé être facile à réaliser, cela ne demande pas beaucoup de compétences en électronique, pour un résultat relativement rapide. Pour ma part, cela a pris plus de temps que prévu pour plein de bonnes raisons (priorité à d’autres side projects, déménagement et autres bonnes raisons :)) mais aussi car je n’ai pas pris le temps de bien me renseigner sur la partie électronique.

La partie “électronique”

Le Minitel dispose d’une interface série TTL 5v via une prise DIN 5 broches. J’ai tout d’abord cru qu’il s’agissait d’une interface supportant la norme RS-232 (ce n’est pas le cas), puis j’ai suivi bêtement un montage proposé sur un post de blog trouvé sur le net avec un transistor et quelques résistances pour se connecter à un adaptateur USB-série TTL. Ce deuxième essai a été tout aussi infructueux que le premier. J’ai donc allumé quelques neurones et relu la doc du Minitel et de mon adaptateur USB-série (basé sur la puce PL2303). Ce dernier supportant des entrées / sorties en 5v, pas besoin d’une quelconque adaptation des niveaux, j’ai donc connecté directement l’adaptateur au cable relié à la prise DIN et ça marche (globalement l’approche détaillée dans cet article). Il y a peut-être une meilleure solution, genre utiliser l’UART du Raspberry pour éviter d’utiliser un port USB inutilement, mais celle-ci me suffit amplement pour l’instant.

Configuration du Minitel

Le Minitel n’affiche pas par défaut ce qui se passe sur sa connexion série. Il faut faire une série de combinaisons de touches pour l’activer. Je la reprécise ici pour mémoire, pour mon modèle de Minitel, le Minitel 2:

  • Sortie du répertoire: Fnct + Sommaire
  • Passage en mode périphérique: Fnct + T puis A
  • Désactivation de l’écho du terminal: Fnct + T puis E
  • Connexion 9600 bauds: Fnct + P puis 9 (on peut aussi activer des connexions plus lentes pour plus de réalisme avec Fnct + P puis 1 pour 1200 bauds ou Fnct+P puis 4 pour 4800 bauds)

Configuration côté Linux

En terme de configuration, on trouve de tout dans les nombreux articles sur le sujet. Je suis allé au plus simple car je me moque de savoir si le prompt de l’écran de login s’affiche correctement ou non, une fois loggué, cela n’a plus d’importance.

Ayant installé une Raspbian Buster, basée sur Debian 10, la configuration s’appuie sur systemd. Au démarrage du Pi, on souhaite donc configurer le port série puis lancer un getty sur le périphérique associé, pour pouvoir accéder à la console depuis le Minitel. On trouve de bonnes instructions pour réaliser cette étape dans cet article: Un minitel comme terminal linux USB. Partie 3 : Et avec systemd ?

J’ai effectué deux modifications mineures à ce fichier:

  • le Minitel 2 supporte une communication à 9600 bauds au lieu de 4800
  • j’ai sélectionné le fichier terminfo correspondant à ma variante de Minitel, à savoir minitel-2 et non minitel1b-80

Tout terminal a besoin d’un fichier terminfo pour pouvoir fonctionner correctement. Ces fichiers de config sont présents pour plusieurs variantes courantes de Minitel dans la base terminfo des distributions linux récentes. Il n’y a donc pas besoin de télécharger des fichiers terminfo sur le net comme vous pourriez le lire dans certains articles.

Pour trouver le fichier terminfo correspondant à votre minitel, vous pouvez exécuter cette commande:

find /usr/share/terminfo -name *minitel*

Une fois le service configuré, vous pouvez redémarrer le Pi et tenter de vous logguer sur le Minitel, après l’exécution des 4 combinaisons de touches magiques.

J’ai trouvé dans l’article “Utiliser un Minitel avec un Raspberry” deux idées sympa: 

  • le Minitel supporte les caractères ASCII 7bit plus quelques caractères accentués via des séquences d’échappement. On définit la variable LC_ALL à C dans son .bashrc pour éviter certains problèmes liés à l’encodage des caractères, par exemple pour ceux parmi vous qui aiment avoir leurs messages d’erreurs en français… Chez moi, ça se résume à: if [ "$TERM" = "minitel-2" ]; then export LC_ALL=C; fi
  • Les touches de fonction du Minitel telles que Sommaire, Guide, Annulation, … ne sont pas actives par défaut. Il est possible de les mapper à des fonctions du terminal via un fichier .inputrc à placer dans son home directory. Un exemple est donné dans l’article précité.

Linux: quelques exemples d’utilisation

Toute cette partie n’est pas spécifique au Minitel. Vous pouvez vous amuser dans un terminal sur votre ordinateur, ça fonctionne aussi. Je vous ai listé ici quelques outils qui vont fonctionner avec les limitations du Minitel 2 ou de ma config:

  • faible taux de rafraichissement
  • Monochrome
  • pas de caractères accentués (faudrait sûrement que je creuse pour celle-là)

Afficher du texte en ASCII-Art

L’outil classique pour cela est figlet. Si votre Minitel supporte l’affichage en couleurs, vous pouvez utiliser l’outil “toilet” à la place.

figlet "ca marche!"

utilisation de figlet sur minitel pour afficher le texte "ça marche!", mai 2020

Afficher une image en ASCII-Art

Avec l’outil fim, il est possible d’afficher une image en ASCII-Art. Pour cela, on peut utiliser la commande suivante:

fim --output-device=aa trollface.jpg

Affichage d'une image via fim sur Minitel, mai 2020

 

Starwars Ep. 4  en ASCII-Art

Je ne suis pas un grand fan des guerres de l’étoile, mais je suis impressionné par le boulot qu’a dû être la création de cette longue animation en ASCII-Art:

telnet towel.blinkenlights.nl 

Un petit extrait de cette animation dans ce twitt: “biou sur Twitter: 20th Century Text”

 

Visualiser une vidéo youtube en ASCII-Art

Il faut tout d’abord télécharger la vidéo Youtube de votre choix avec youtube-dl. Cette vidéo sera ensuite lue avec mplayer. J’ai fait quelques essais et eu le meilleur rendu avec ces options:

mplayer --reallt-quiet -vo aa -monitoraspect 0.5 -nosub -noautosub -framedrop -contrast 25 rick.mkv

 

Si votre Minitel est couleur, vous pouvez aussi obtenir un rendu en couleurs en remplaçant l’option -vo aa par -vo caca (ça utilise la libcaca).

La sortie son du Raspberry Pi peut être utilisée pour avoir du son. Mon Raspberry Pi 1 n’était malheureusement pas assez puissant pour décoder la vidéo sans que le son ne coupe.

Les démomakers ne sont pas en reste

J’ai trouvé la démo BB assez sympa. Ça fonctionnait à peu prês sur le minitel, bien qu’un peu lent. Elle est dispo dans les packages Debian.

 

Les classiques

On peut toujours gérer ses fichiers via une interface semi-graphique via Midnight Commander, se connecter à IRC via irssi, naviguer sur le Web via lynx, …

IRSSI sur Minitel, mai 2020
IRSSI sur Minitel

Coder une petite application dans le style Minitel

Ok, tout cela est bien beau, mais cet affichage 80 colonnes ne ressemble pas trop à ce que l’on avait l’habitude de voir sur Minitel dans les années 80 et 90s. Par défaut le Minitel est capable d’afficher des informations respectant le standard Videotex. Pour réaliser une petite démo, je me suis appuyé sur la librairie PyMinitel de Frédéric Bisson. (Ce monsieur a d’ailleurs fait une très chouette présentation sur le sujet au FOSDEM2020: “Reviving Minitel: How web technologies make it easy to emulate Minitel”)  Il s’agit d’un client xml-rpc pour Dotclear, qui permet de se logguer et d’y créer un billet.

Et la démo est là:

Le code source est disponible dans ce repository github: dcMinitel.


  1. ce qu’on appelait à l’époque les serveurs RTC il me semble

Page top