Mettre en place son propre serveur Minitel

Je vous ai déjà expliqué comment relier son Minitel comme terminal Linux, ou alors comment le relier à un Raspberry Pi. Mais s'arrêter là, ce serait oublier que le Minitel est initialement conçu pour consulter des pages Vidéotex avec son modem 1200/75 bauds intégré.

À une époque où le terme « Minitel 2.0 » est utilisé de manière péjorative et où la plupart des terminaux Minitel que l'on trouve sont sur eBay, LeBonCoin, à la déchetterie ou oubliés dans un grenier, quelle idée plus saugrenue que de mettre en place, justement, son propre serveur Minitel ? Après tout, les plus jeunes d'entre nous n'ont pas connu le Minitel. En ayant tenu un stand lors de l'événement « 3615 au revoir », j'ai pu me rendre compte que beaucoup de personnes, même plus âgées que moi, n'ont pas eu l'opportunité de voir fonctionner un Minitel, et de ce fait voir comment on faisait dans les années 80-90 pour réserver un billet de train. Outre le désir de préservation ou de fascination pour les technologies obsolètes, faire cela pour la pure prouesse technique me paraît de surcroît tout à fait justifié.

Schéma de principe
Schéma de principe pour un montage testable chez soi

Le schéma de principe est celui utilisé pour pouvoir tester facilement le montage chez soi sans avoir à dépenser des montants indécents en factures téléphoniques. L'avantage d'utiliser un PBX maison réside aussi dans le fait de pouvoir utiliser une ligne SIP (comme celles d'OVH ou d'Ippi, au hasard) pour que les utilisateurs puissent appeler directement le numéro. Si on ne tient pas à tester, il suffirait juste de brancher le modem 56k à la ligne téléphonique d'Orange, mais nous partirons ici du principe que nous disposions de tout l'équipement du schéma ci-dessus.

Il nous faut donc plusieurs éléments :

  • une application (ncurses ou minicurses) exécutée sur le serveur et qui s'occupe de la présentation des informations sur le Minitel de l'utilisateur ;
  • un serveur sur laquelle tourne cette application ;
  • un modem 56k (ou tout autre modem qui sache gérer le mode V.23bis) compatible avec le jeu de commandes Hayes, branché en série sur le serveur applicatif. Ce modem servira à recevoir les appels téléphoniques des utilisateurs et le serveur décrochera automatiquement pour établir la liaison de données avec le Minitel appelant ;
  • un commutateur téléphonique (aussi appelé PBX) pour le routage des appels et pour la mise en place d'un plan de numérotation interne, ce qui nous permet de tester tranquillement le montage ;
  • un téléphone analogique (oui, analogique) parce que le modem du Minitel ne sait pas numéroter par lui-même (du moins celui des Minitel 1, 1B et 2) ;
  • enfin, vous l'aurez deviné, un Minitel.

Il n'est pas obligatoire d'avoir deux machines physiquement séparées pour le PBX et le serveur applicatif. On peut utiliser la même machine pour les deux rôles. Cela me permettait juste de rendre le schéma plus intelligible.

En ce qui concerne le PBX, rien de compliqué : une machine munie d'une carte OpenVox A400p et d'Asterisk fait largement l'affaire. Prévoir dans ce cas au moins deux interfaces FXS et la possibilité de faire sonner le modem depuis le téléphone analogique (en lui attribuant son propre numéro, comme par exemple 4001 pour le téléphone et 4002 pour le modem).

Branchements matériels

Câblez le montage de la manière suivante :

  1. Branchez la prise T du téléphone en aval de la prise T du Minitel.

  2. Branchez la prise T du Minitel sur le PBX. Il y a de grandes chances que le PBX n'accepte que des prises RJ11 ; on peut alors brancher un câble RJ11 côté PBX sur un adaptateur T vers RJ11 et brancher l'ensemble dessus. C'est certes peu élégant, mais ça marche.

  3. Branchez la prise téléphonique du modem 56k sur le PBX et le câble série sur le serveur applicatif.

Branchement du Minitel vers PBX
Branchement du Minitel sur un PBX

Configuration logicielle

De la même manière que lorsqu'on utilise le Minitel comme terminal série, il vous faudra installer mgetty(8).

La configuration de mgetty(8) fait que ce sera a priori impossible d'utiliser en même temps une application depuis le modem sur un Minitel, ou comme console série comme précédemment. Il vous faudra choisir, ou alors faire ces manipulations sur une autre machine.

Dans cette section, subsituez le nom de votre port série à /dev/ttyUSB0 (j'ai fait mes tests en branchant mon modem sur un convertisseur USB-série).

Dans /etc/mgetty+sendfax/mgetty.config, ajouter une section comme celle-ci :

port ttyUSB0
  speed 1200
  direct no
  data-only yes
  toggle-dtr yes
  need-dsr yes
  port-owner root
  port-group wheel
  port-mode 0660
  login-prompt ''
  login-time 60
  term minitel1b-80
  login-env-ttyprompt-hack yes
  init-chat "" "ATM0E0B2\r" "OK"
  gettydefs 1200v23

Le init-chat est probablement à adapter selon vos besoins et selon votre modem. Renseignez-vous dans la documentation de votre modem. Mon Olitec Self Memory Pro nécessite ATB2 pour forcer la vitesse de ligne à 1200/75 baud. Ajouter également E0 pour désactiver l'écho local et M0 pour désactiver le haut-parleur et expérimenter en silence.

Dans /etc/mgetty+sendfax/login.config, remplacez la dernière ligne par :

*       toto     toto     /chemin/vers/application

où la deuxième colonne représente l'utilisateur sous lequel est exécuté l'application, et la troisième colonne représente l'entrée à ajouter dans utmp(5) (la laisser égale à la deuxième colonne marche bien aussi).

Dans /etc/gettydefs, ajouter (oui, toujours en une seule ligne) :

1200v23# B1200 CS7 PARENB -PARODD GLOBAL #B1200 ISTRIP CS7 PARENB
-PARODD GLOBAL BRKINT IGNPAR ICRNL IXON IXANY OPOST ONLCR CREAD HUPCL
ISIG ICANON ECHO ECHOE ECHOK #@S login: #1200v23

Dans /etc/inittab, ajouter :

s0:12345:respawn:/sbin/mgetty -D ttyUSB0 1200v23

Configuration du PBX

Je ne vais pas vous apprendre comment configurer un plan de numérotation sur Asterisk, mais vous aurez seulement besoin d'une configuration qui permette de faire "sonner" le modem. En d'autres termes, il faut brancher le modem sur une des interfaces FXS de votre PBX, attribuer un numéro de téléphone à ce port (par exemple 4002) et faire en sorte de pouvoir composer ce numéro depuis un autre téléphone branché sur ce même commutateur. C'est vraiment pas plus compliqué que ça !

Lorsque votre modem "sonne", il réagira sûrement en faisant clignoter une ou deux LEDs. Pour en être sûr, connectez-vous directement sur le modem via le port série et vérifiez que le modem envoie des messages RING sur le terminal lorsque vous l'appelez.

Exemple d'application

En guise d'application, n'importe quel programme qui écrit du texte sur stdout et lit des frappes de touches sur stdin fait l'affaire.

#!/bin/bash

stty 1200 istrip cs7 parenb -parodd brkint \
    ignpar icrnl ixon ixany opost onlcr cread hupcl -isig icanon \
    echo echoe echok

# vider l'écran
echo
printf "\x0c"

# mettez le chemin vers votre binaire ici, ou rédigez votre programme
# en shell ci-dessous

# écrire du lorem ipsum à l'écran
# (sans oublier qu'on n'a que 40 caractères par ligne)
echo "Lorem ipsum dolor sit amet, consec-
tetur adipiscing elit. Donec a diam
lectus. Sed sit amet ipsum mauris. 
Maecenas congue ligula ac quam 
viverra nec consectetur ante 
hendrerit. Donec et mollis dolor. 
Praesent et diam eget libero egestas
mattis sit amet vitae augue. Nam
tincidunt congue enim, ut
porta lorem lacinia consectetur."

sleep 10

Libre à vous d'utiliser autre chose qu'un script shell, bien entendu. Il faut juste penser à faire le stty(1) correspondant afin de forcer l'observation du bit de parité paire (dans le cas contraire, la moitié des caractères seront remplacés par des carrés blancs).

L'instant de vérité

Après avoir ajouté la configuration qui va bien dans /etc/inittab, n'oubliez pas un petit init q pour qu'init tienne compte de votre configuration.

Allumez votre Minitel. Composez le numéro correspondant au modem. Si tout se passe bien, vous entendrez peut-être quelques bruits (bips), puis, le plus important, une tonalité aiguë continue (2 100 Hz, plus exactement) que vous reconnaîtrez sûrement si vous avez déjà utilisé un Minitel avant.

Au moment où vous entendez le 2 100 Hz, appuyez sur la touche Connexion/Fin de votre terminal. Le F en haut à droite est alors remplacé par un C clignotant, qui devient fixe au bout de quelques secondes. Enfin, si tout est bien configuré, votre Minitel affiche votre Lorem Ipsum (ou toute autre application que vous y aurez mise à la place). Et c'est exactement comme ça que cela se passait en 1982.

Conclusion

Étant donné que le service Minitel n'existe désormais plus, c'est une partie du patrimoine français qui est en voie de disparition si nous ne trouvons pas le moyen d'archiver, voire reproduire, ce que l'on pouvait faire sur Minitel entre 1982 et 2012.

Mettre en place un serveur Minitel reste donc bien entendu une idée saugrenue, mais le challenge technique derrière reste particulièrement intéressant. Je salue particulièrement ceux qui, dans les années 80 et 90, ont mis en place leur propre serveur privé, sachant qu'ils disposaient à l'époque de machines beaucoup moins puissantes.

Commentaires

Poster un commentaire

#1 — Chiwawa

As-tu envisagé de bypasser le besoin d'un modem physique, en utilisant un modem logiciel capable d'émuler le v.23b ?

Niveau soft, as-tu trouvé une implémentation de serveur vidéotext ?

#2 — fuf

Ah ! Enfin quelqu'un qui a une idée qu'elle est bonne ...

Je ne me souviens plus si je suis déjà passé par ici ou non - peu importe, je n'étais pas à "3615 au revoir" mais au colloque organisé par V.Schaffer en juin 2012... Fin de la parenthèse et retour aux commentaires.

1) Je disais donc, très bonne idée; à aujourd'hui, il n'existe aucune solution (hormis 3618 qui fonctionne encore (pour combien de temps ? Il restait à 06/2012 en tout et pour tout 2 PAVI en état de fonctionnement)) pour faire fonctionner nativement un Minitel. Triste constat pour la conservation du patrimoine !

2) Je n'ai pas lu 100% du post initial, mais j'ai quelques commentaires à faire; la problématique étant de disposer d'un "serveur minitel" accessible à distance ET AVEC UN MINITEL.

2-a) Un accès SIP est indispensable (si ADSL, dégroupé ou non) et IPPI est certainement le meilleur candidat; il offre gratuitement un numéro "universel" et un numéro "localisé". Je ne sais pourquoi mais je n'ai pu conserver celui que j'avais initialement ... Le numéro "universel" est un peu long mais il existe des passerelles partout au monde pour emettre des appels téléphoniques en SIP¨à partir d'un numéro "local" (plus d'infos au besoin si on me demande ou sir le site de IPPI)

2-b) Un vrai PABX n'est absolument pas nécessaire; pour 20€ chez €bay ou n'importe quel "China.com", il est possible de trouver un clone de LinkSys PAP2-TP qui supporte parfaitement 2 lignes en VOIP.

2-c) Il n'est absolument pas nécessaire de disposer d'un minitel pour faire fonctionner aujourd'hui un "serveur minitel". Un terminal (Minitel ou Modem + Emulation) est utilisé pour la consultation ==> C'est un autre débat.

2-d) Un modem ANALOGIQUE COMPATIBLE V23 est INDISPENSABLE. Il doit être capable 1) de répondre en V23 2) de détecter la sonnerie. Je conseille l'USR COURRIER, Rolls des modems.

2-e) En alternative, il reste la possibilité d'utiliser une vieille ligne analogique FranceTélécom (quelques riches dinosaures en possèdent encore pour les FAX) qui nécessite quand même l'utilisation d'un medem analogique (cf 2-d). Une dernière solution est Numéris (si quelqu'un a encore une telle ligne et veut jouer, j'offre un modem USR CourrierI neuf !)

Bon, j'arrête là pour le moment, si quelqu'un est intéressé (réponses à ce post ou mail) je montrerai en détail comment faire un "serveur minitel" de démo... J'ai quelques idées en tête mais je manque de temps.

Hervé

#3 — Mushussu

Bonjour,

A la lecture de ce billet, j'ai fortement envie de faire oeuvre patrimoniale en créant un serveur Minitel. Je bricole un peu dans l'informatique créative. Je suis prêt à mettre les mains dans les bits. @fuf : Si tu as des idée, je suis preneur. Je vais partir à la quête de modem USR Courrier dans un premier temps. Ne peut-on utiliser un Minitel avec un retournement de modem pour le serveur ?

#4 — JLR

Je suis sur un projet similaire en ce moment. Je suis entrain de bricoler quelque chose avec un Raspberry Pi, un peu d'électronique et un boitier VoIP afin d'arriver à créer un vrai service Minitel qui sera disponible publiquement sur un vrai numéro téléphonique (à 10 chiffres). Pour l'instant j'arrive à afficher ce que je veux sur le Minitel via une ligne téléphonique "simulée". Je ne me suis pas encore occupé de la partie "gestion des données arrivant depuis le Minitel" mais ça ne saurait tarder ! https://www.youtube.com/watch?v=cflQ27BBSPk

#5 — Hakim

C'est superbe Quand vous aurez crée vos serveur je m'y connecterai avc mon minitel

#6 — Monokeros

C'est une idée. On devrait partager nos serveurs Minitels sur des communautés, genre, pour faire des messageries instantanées xD

N'empêche un commutateur téléphonique... Ca coûte cher! :-(

#7 — Dandu

Bonjour,

J'ai un souci : j'ai tenté de faire le montage avec un Raspberry Pi, un modem et un simulateur de ligne, mais ça fonctionne mal.

En fait, j'ai bien une connexion (donc je suppose que le modem est configuré proprement, si j'ai du texte) mais j'ai des carrés blancs dans le texte et la commande STTY ne semble pas changer les choses.

Existe-t-il un moyen de vérifier que le modem est dans le bon mode ? Et comment vérifier que la commande STTY fonctionne ?

Merci d'avance

Pierre

#8 — Dandu

Au passage, j'ai aussi testé avec un modem série 56K antique, et quand j'essaye d'appeler, c'est occupé automatiquement, vous connaissez la raison ?

#9 — Alexandre MONTARON

@Dandu: Si tu as des carrés blancs ... soit 1/ y'a de la friture sur la ligne ! soit 2/ tu n'es pas en parité paire (even) !

@Dandu: Tu as essayés avec un téléphone (sans le modem donc) ?

Alex. - http://x0r.fr/blog/49 ( http://canal.chez.com/java/C_cat.htm )

#10 — David

merci x0r pour cet article, j'ai essayé de mettre en place un serveur minitel mais je galère avec le mgetty.

Je suis sous ubuntu 14.04, coté PBX (sur la même machine avec une A400p asterisk) aucun soucis de ce coté.

Mon modem est une carte interne 3com qui fonctionne sous Linux (full hardware)

mon soucis c'est la chaine d'initialisation V23, j'en suis pas sur, mais voila ce que j'obtiens dans le log mgetty lorsque je tente de connecter le minitel:

09/12 01:30:13 yS4 mgetty: interim release 1.1.36-Jun15 09/12 01:30:13 yS4 check for lockfiles 09/12 01:30:13 yS4 locking the line 09/12 01:30:13 yS4 lowering DTR to reset Modem 09/12 01:30:14 yS4 send: AT&FS34=8S28=0S29=0[0d] 09/12 01:30:14 yS4 waiting for ``OK'' ** found ** 09/12 01:30:14 yS4 waiting... 09/12 01:32:28 yS4 wfr: waiting for ``RING'' 09/12 01:32:28 yS4 send: ATA[0d] 09/12 01:32:28 yS4 waiting for ``CONNECT'' ** found ** 09/12 01:32:51 yS4 send: 09/12 01:32:51 yS4 waiting for ``_'' ** found ** 09/12 01:32:52 ##### data dev=ttyS4, pid=2395, caller='none', conn='', name='', cmd='/home/test/test.sh', user=''

Est-ce que quelqu'un peut m'aider a voir ce qu'il ne va pas ?

Merci.

#11 — x0r

Les logs ne décèlent pour moi aucune anomalie : mgetty répond bien à l'appel téléphonique entrant (échange « RING » puis « ATA ») et le handshake semble se faire correctement (message « CONNECT »), puis mgetty passe la main à ton script.

Quels sont les symptômes exacts ? Est-ce que le Minitel affiche bien un « C » fixe en haut à droite de l'écran ? Qu'est-ce qui s'affiche ensuite ? Et quel est le contenu de ton script ?

#12 — David

Le souci c'est que le minitel affiche un "C" clignotant puis raccroche l'appel au bout de quelques secondes, rien ne s'affiche sur le minitel, le script test.sh est juste le script en exemple dans ton article.

J'ai vérifier les droits sur le script sh, j'ai essayer différentes chaîne d'initialisation du modem car j'ai déduit ces paramètres avec la commande AT$. A priori j'ai bien la bonne.

J'ai trouvé ce site qui est pas mal d'ailleur pour le mode V23 des modems: http://support.cimel.fr/meteo/faq/v23_config/index.html

Je vais continuer de tout vérifier mais j'aurai aimer savoir si il y'a moyen d'augmenter le niveau de log de mgetty ?

Merci de ton aide.

#13 — m4rk

Salut,

J'ai vu dans les commentaires (@fuf) qu'il était possible de sauter la case PBX avec l'aide d'un PAP2-TP. Étant donné la différence de prix entre l'A400P et le PAP, j'aimerais utiliser ce dernier :)

N'ayant quasiment aucune connaissance en manipulations réseau (encore moins téléphonique...), comment s'y prendre pour utiliser un PAP à la place d'un "vrai" PBX?

Merci pour vos conseils.

#14 — mp368hz

Salut, Le gros soucis : c'est que le téléphone RTC va être hors service d'ici quelques mois, et ce de manière définitive (abandon de la norme et du réseau). Quelle alternative ?

#15 — SLR

Bonjour à tous, et bravo,super projet. Excusez-moi, j'ai une question question bête, mais je n'y connaît pas grand chose et je suis curieux d'en savoir un peut plus... Est ce que ça fonctionnerait si faisait passer le signal minitel directement au travers d'une ligne VOIP entre deux box une fois la communication établie ? Après tout, c'est des fréquences vocales non ? Il suffirait biensur d'établir la communication auparavant avec deux téléphones pour numéroter d'un coté et décrocher la ligne de l'autre coté, évidement ce serait moins pratique. Cordialement

#16 — x0r

Oui, les signaux émis sur la ligne téléphonique par un modem sont des fréquences vocales, donc en théorie ça fonctionne même si à un moment on passe par une ligne VoIP.

La seule chose à laquelle il faut faire attention est le codec utilisé sur la ligne VoIP : en effet, certains (comme G.729) interfèrent avec le bon fonctionnement de modems et de fax. Il faut veiller à utiliser un codec comme G.711μ (ou « μ-law »), qui fonctionne bien — je n’ai pas testé avec d’autres codecs.

Il faudra quand même un téléphone analogique en tandem avec le Minitel (un téléphone SIP n’est pas adapté pour ce genre d’usage) du côté « client », et un modem analogique du côté du serveur.

Poster un commentaire