Le Minitel est un terminal exploité commercialement jusqu'en 2012 pour accéder à des services via le réseau téléphonique de France Télécom. Le réseau supportant les services commerciaux du Minitel ayant été définitivement stoppé, ceux-ci ne sont plus disponibles. Cependant, il reste possible d'utiliser ces terminaux, en se connectant sur un service compatible.

Dans cet article, j'explique la manière dont j'ai installé et configuré mon serveur Minitel. Outre le défi technique, j'avais aussi comme objectif de préserver le fonctionnement d'origine du service. Cela induit donc quelques contraintes :

  • N'effectuer aucune modification matérielle du Minitel.
  • Utiliser la prise en T pour le connecter à un PBX.
  • Le service doit accepter la connexion de plusieurs Minitels en parallèle sur un même numéro.

D'autres ont déjà atteint ces objectifs, comme Jelora, Christian Quest ou encore x0r. De mon coté, afin de simplifier la mise en place du système et pour permettre d'installer le tout sur une machine comme un Raspberry Pi, j'ai décidé que la partie serveur de mon installation serait entièrement logicielle :

  • Un serveur Asterisk, pour recevoir l'appel du Minitel
  • Un modem logiciel sous forme de module Asterisk
  • Une application serveur que je développe

Note : Pour donner un aspect concret à ce projet, le service mis en place est prévu pour être utilisé lors des événements publics de l'association de retrogaming Retrotaku, dont je suis membre. La mise à disposition du service sur une ligne téléphonique accessible publiquement ne fait pas partie de mes projets.

Mise à jour 08/07/2018 : Ajout du lien vers les sources de l'application Python.

Installation et configuration d'Asterisk

L'installation et la configuration de base du serveur Asterisk sont décrites dans l'article Installation d'un serveur téléphonique local avec Asterisk. Cet article couvre également la configuration d'une carte analogique et d'un boitier ATA, nécessaires pour connecter un Minitel sur Asterisk.

En plus des configurations basiques expliquées dans le précédent article, il est préférable de définir ces paramètres :

  • Utiliser le codec G711u (ulaw), qui effectue une compression sans perte.
  • Désactiver l'annulation de l'echo, pour éviter de perturber la communication entre le Minitel et le serveur.

Modem

Comme déjà précisé, afin de simplifier l'installation, j'ai décidé de ne pas utiliser de modem matériel pour le serveur. J'ai donc utilisé un module Softmodem pour Asterisk, permettant d'établir une connection entre Asterisk et une application quelconque via un simple socket TCP.

Comme ce module n'est pas distribué sous forme binaire, je l'ai compilé en suivant les instructions données par le développeur. J'aurais préféré pouvoir compiler uniquement ce module, mais je n'ai pas trouvé comment faire.

$ sudo apt install --no-install-recommends dpkg-dev wget ca-certificates g++ libncurses5-dev uuid-dev libjansson-dev libxml2-dev libsqlite3-dev libspandsp-dev
$ apt source asterisk
$ cd asterisk-*
$ wget https://raw.githubusercontent.com/proquar/asterisk-Softmodem/ba032c312d7a66171414285d27dbecf9908f5b3a/app_softmodem.c -O apps/app_softmodem.c
$ ./configure
$ make apps
$ sudo cp apps/app_softmodem.so /usr/lib/asterisk/modules/
$ # We need to restart Asterisk to load the new module
$ sudo asterisk -rx "core restart when convenient"

Note : L'utilisation de la commande apt source nécessite l'activation des dépôts source de Debian :

deb-src http://httpredir.debian.org/debian stretch main

Il est ensuite nécessaire de déclarer la connexion à l'application dans le fichier /etc/asterisk/extensions.conf. Par exemple, voilà la configuration présente sur mon serveur :

[default]
exten => _36XX,1,Softmodem(127.0.0.1,${EXTEN},ld(8)s(1))

Cette configuration utilise un numéro générique (signalé par le préfixe _), permettant de faire correspondre tous les numéros composés de quatre chiffres commençant par 36 au port TCP équivalent (paramètre ${EXTEN}). De cette manière, il n'est pas nécessaire de modifier la configuration d'Asterisk pour proposer un nouveau service, lancer une nouvelle application suffit.

Serveur applicatif

La connexion effectuée par le modem logiciel est une simple connexion TCP, ce qui permet d'écrire l'application dans n'importe quel langage.

La seule limitation du modem utilisé est qu'il ne calcule pas le bit de parité. J'ai d'abord pensé à le modifier pour ajouter cette fonctionnalité, mais je me suis perdu dans le code, et j'ai finalement décidé de gérer cette partie directement dans mon application.

Les sources de cette application seront distribuées sous licence AGPLv3 et vous pouvez les récupérer avec la commande suivante :

$ git clone https://git.garamotte.net/minitel-tcp

Bien que l'URL soit en https, il n'y a aucun affichage web, le lien mène directement vers le dépôt git. La page 403 obtenue en entrant l'URL dans un navigateur web, indique juste que la génération automatique d'une page index est désactivée dans ce sous-domaine, cloner le dépôt en utilisant git fonctionnera sans problème.

Note : Les tests unitaires sont cassés, et je n'aime pas distribuer des sources dans cet état, mais je n'ai malheureusement pas le temps de les corriger actuellement. Je mets donc quand même les sources à disposition, puisque plusieurs personnes me les ont demandées.