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/cached/index/Pratique-minitel.html
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

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.
ryu:/alphak/dev/util-linux-2.12/login-utils# diff -c agetty.c.old agetty.c.new
*** agetty.c.old 2006-03-18 14:55:14.000000000 +0100
--- agetty.c.new 2006-03-18 14:58:38.000000000 +0100
***************
*** 728,734 ****
--- 728,741 ----
(void) ioctl(0, TCFLSH, TCIOFLUSH);
#endif
+ /* Modif AlphaK 18/03/2006, ajout de l'option V23 pour minitel */
+ #ifdef V23
+ tp->c_cflag = CS7 | PARENB | HUPCL | CREAD | speed;
+ #else
tp->c_cflag = CS8 | HUPCL | CREAD | speed;
+ #endif
+ /* Fin Modif AlphaK V23 */
+
if (op->flags & F_LOCAL) {
tp->c_cflag |= CLOCAL;
}
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.