Born to be wired

A minitel story…

 3 août 2008  Bricolage, Projet Serveur  6 commentaires

Dans la vie, s’il y a parmi mes activités une petite lubie qui m’a toujours tenu à cœur, c’est bien celle de détourner un objet de la fonction première pour laquelle il a été conçu.

Aujourd’hui, l’exemple illustrant ce propos est le minitel.

La recette, la voici :

  • Prenez un minitel pas trop vieux, dégoté dans un grenier, sur eBay, ou dans le débarras d’une agence d’une entreprise de travail temporaire (merci Flo 🙂 )
  • Prenez quelques composants électroniques, et soudez-les sur un minuscule circuit imprimé que vous logez à l’intérieur d’une prise série 9 broches, pour des raisons esthétiques.
  • Recompilez votre version de agetty et lancez-le en service sur le port série de votre serveur favori.
  • Connectez le tout ensemble, et voila… Vous obtenez une magnifique console d’administration pour ledit serveur à partir d’un minitel. Plus besoin d’écran et de clavier volumineux…

Rendons à César ce qui appartient à Jules, tout a été possible grâce au guide de Jean-Marc Lichtlé disponible ici : http://lea-linux.org/documentations/Pratique-minitel

D’abord, le montage. On a le choix entre deux types de montages. Le premier sera très rigoureux et utilisera un MAX232 spécialisé dans la conversion des signaux RS232 en série et inversement, niveaux de tensions compris. Ce montage est un poil plus cher et demande également d’alimenter le MAX232 en 5V, tension que ne délivre pas le port série.
La seconde solution est plus cavalière, car un tantinet irrespectueuse de la norme RS232, et de ce fait en théorie incompatible avec certains chipsets, mais a le mérite d’être plus légère et ne ne pas demander de source d’alimentation extérieure. C’est celle-ci que j’ai retenue après quelques tests. Je suis donc parti du schéma que l’on trouve ici : http://yip.free.fr/bidouilles/minitel/terminal.html

Je me suis permis de modifier un poil les valeurs des résistances pour correspondre au mieux à mes niveaux de tension. Je n’ai plus les valeurs en tête, mais les photos de cet article sont assez nettes pour que les intéressés puissent lire les valeurs eux-mêmes.


Disclaimer :
Je ne suis pas électronicien, je suis juste passionné par la bidouille.
Les conseils de cet article sont donnés SANS AUCUNE GARANTIE. Toute tentative de reproduction totale ou partielle de ce montage se fait à vos risques et périls.

J’ai donc commencé par tester le montage sur banc d’essai. Ce n’est pas sorcier, on n’a que 3 résistances et 2 transistors, mais autant commencer là, cela sera plus facile à déboguer. Voila ce que ça donne :

Les composants sont montés sur le banc d’essais

Ensuite, on se monte une petite plate-forme de tests avec un vieux PC sous Windows 2000 (l’envoi et réception se font grâce à l’Hyper Terminal), le minitel, et un oscilloscope si disponible, ça peut aider. A ce propos je remercie mon frère Kiwi pour m’avoir dégoté cet oscillo aussi vieux que fonctionnel et aussi fonctionnel que gratuit 🙂

La plate-forme de tests, ready for action…

C’est parti pour le débogage : on maintient une touche du minitel enfoncée (en l’occurrence le C sur la photo), et on observe que les niveaux de tensions sont cohérents à l’oscillo, en sortie du minitel comme en entrée du port série.

Vérification des tensions à l’oscillo

On prend une table ASCII et on vérifie, en faisant gaffe aux niveaux logiques qui sont « inversés » en RS232, ou autrement dit, un niveau logique actif est représenté physiquement par une tension négative.

Le montage est concluant, rien n’a cramé, on peut donc refaire le même test sur la plate-forme qui va accueillir le montage : ma chère Debian (avec Minicom pour le test).

Le même montage sur une Debian

Le même montage sur une Debian

Test de communication bidirectionnelle

Test de communication bidirectionnelle

Comme le montre la photo (floue), les deux appareils peuvent communiquer entre eux, le texte tapé sur le clavier de l’un apparaissant sur l’écran de l’autre.

Maintenant vient l’étape complexe du montage sur veroboard, avec la contrainte de caser tous les composants dans le capot de la prise Sub-D.

Pas évident, croyez-moi.

Parfait, ça rentre dans le capot, au millimètre près.

On remonte le tout proprement, et on teste… Miracle, tout fonctionne, la preuve en images.

It works !

Un listing des fichiers php du forum affichés sur le minitel.

Pour des raisons pratiques, on peut également recompiler sa propre version de agetty, car celui-ci s’adapte au codage du minitel uniquement une fois les premiers caractères envoyés par celui-ci (c’est à dire le login de l’utilisateur). L’invite de login envoyée au minitel est donc envoyée avec le codage par défaut, que ne comprends pas le minitel. Le patch suivant permet a agetty d’initialiser le dialogue avec un codage que le minitel comprend, et donc d’avoir une invite de login lisible à l’écran. Une fois compilé, j’ai simplement renommé l’exécutable agetty-minitel et installé celui-ci dans /sbin. Le code de agetty est disponible dans le package util-linux.

diff -rupN util-linux-2.12p.old/login-utils/agetty.c util-linux-2.12p.new/login-utils/agetty.c
--- util-linux-2.12p.old/login-utils/agetty.c   2013-06-09 11:01:34.974014067 +0200
+++ util-linux-2.12p.new/login-utils/agetty.c   2007-02-18 20:43:26.000000000 +0100
@@ -728,7 +728,11 @@ termio_init(tp, speed, op)
     (void) ioctl(0, TCFLSH, TCIOFLUSH);
 #endif

+#ifdef V23
+    tp->c_cflag = CS7 | PARENB | HUPCL | CREAD | speed;
+#else
     tp->c_cflag = CS8 | HUPCL | CREAD | speed;
+#endif
     if (op->flags & F_LOCAL) {
        tp->c_cflag |= CLOCAL;
     }

La prise en compte (ou pas) de ce mode de fonctionnement est conditionnée par l’option de compilation V23. Je l’ai donc ajoutée pour prise en compte à la compilation. Pour cela,  j’ai ajouté une option -DV23 à la variable CFLAGS dans le fichier MCONFIG.

diff -rupN util-linux-2.12p.old/MCONFIG util-linux-2.12p.new/MCONFIG
--- util-linux-2.12p.old/MCONFIG        2013-06-09 11:01:52.242168606 +0200
+++ util-linux-2.12p.new/MCONFIG        2007-02-18 20:52:41.000000000 +0100
@@ -234,6 +234,7 @@ CFLAGS := $(OPT) -I$(LIB) $(WARNFLAGS) \
                -DLOGDIR=\"$(LOG_DIR)\" \
                -DVARPATH=\"$(VAR_PATH)\" \
                -DLOCALEDIR=\"$(LOCALE_DIR)\" \
+               -DV23 \
                $(CFLAGS)

La ligne ajoutée dans /etc/inittab pour démarrer le service :

T0:23:respawn:/sbin/agetty-minitel -w minitel 4800 minitel1b-80

Dernière étape : on range le clavier et l’écran au placard. Les étapes de maintenance seront effectuées via SSH, et grâce au minitel en cas de coup dur (coupure réseau, problème matériel, etc). Un gain de place non négligeable en appartement.

6 commentaires pour “A minitel story…”

  1. AlphaK

    Un montage du même genre à base de MAX232 est visible ici :
    http://pafgadget.free.fr/bidouillages/minitel.htm

  2. Canal

    Nouvelle version du terminfo minitel1b-80 ici : http://canal.chez.com/terminfo.htm
    Quelques modifications mineurs seulement mais tout de même … c’est une version de 2015 !
    En bonus: il y a aussi un terminfo pour viewdata (prestel) au cas où ….

    Alex. – http://canal.chez.com/mntl.ti

  3. AlphaK

    Intéressant, merci d’avoir partagé cette information !
    Depuis l’écriture de cet article, j’ai changé de serveur et le montage sur port série n’est pas fonctionnel sur ma nouvelle machine. Je comptais depuis longtemps refaire le circuit sur USB, cela serait une bonne occasion d’actualiser le montage en faisant d’une pierre deux coups.

  4. Canal

    Tu n’as plus de port série « natif » c ça ? Conserves ton cable et ajoutes simplement une carte PCI avec 1 ou 2 ports série supplémentaires… Chez moi c’est pas l’idéal cette carte fait rentrer Windows dans des écrans bleus (plantage) mais l’adaptateur USB-série n’est guère mieux parait-il … J’avoue un port série RS232C sur un vieux PC (ISA) c’est encore ce qu’il y a(vait) de mieux pour ça…
    Ma carte semble supporter les ports série en 5volt il serait donc possible de brancher le minitel en direct… a vérifier quand même …

    PS: Les news du terminfo c’est: SUITE/RETOUR comme page up/page down, bip silencieux avec flash de la ligne 0 (tput flash), tput reset, nouveau termcap en 40 colonnes avec bold/dim et filets (pour midnight commander par exemple même si 40 colonnes c trop petit pour lui!), nouveau termcap viewdata (prestel), correctif de -très légers- bugs (notamment avec xemacs) …etc
    $ tic mntl.ti

  5. AlphaK

    J’ai encore un port série natif, mais le montage ne fonctionne pas dessus. Je suppose qu’il est plus capricieux que l’ancien et que c’est simplement une question d’adaptation des niveaux de tension.
    J’ai déjà eu l’occasion de faire fonctionner des adaptateurs USB-série de type PL2303 sous Linux, j’espère pouvoir me baser sur ce type de composant pour moderniser mon connecteur.
    Merci pour le changelog et mode d’emploi 🙂

  6. Canal

    A l’époque j’utilisais le cable (2 transistors + 3 résistances) sur pleins de machines différentes (dont des PC) et jamais de problèmes. Vérifies la valeur de la résistance, d’après YIP la 3ème résistances est de 17Kohm, d’après x0r c’est 15Kohm et moi j’utilisais 18Kohm … les 2 autres sont bien des 10Kohm et les transistors des 2N2222. Bien relier les masses. Au pire ton cable « devrait » ne marcher que dans un sens… (ce qui serait presque logique). Sinon qqch a grillé ou est mal soudé (dans la DB9 c bien protégé)
    PS: Le tic: a faire sous root de préférence sinon c’est que pour ton user. (attention, les noms des terminfos ont changés sur ce fichier: minitel1b-80 devient m1b-x80 – le nom que j’avais mis a l’origine en fait).

Laisser un commentaire