Un minitel comme terminal linux USB. Partie 3 : Et avec systemd ?

Il y a 2 ans déjà, je publiais 2 articles décrivant comme réutiliser un Minitel comme terminal linux USB :

Cependant, si le premier article est toujours aussi pertinent, avec la migration des distributions Linux vers systemd, le nouveau gestionnaire de démarrage, le second article ne permet plus de configurer les Linux moderne pour utiliser le Minitel comme terminal.

raspi-config Minitel

l’outil de configuration raspi-config sur Minitel

Cet article vise donc à décrire la procédure nécessaire pour réaliser cette opération avec systemd sur Raspberry Pi sous la distribution Raspbian, mais cette procédure devrait s’appliquer, éventuellement avec des modifications mineures, à tout autre matériel exécutant une distribution Linux dotée de systemd.

Tout d’abord, systemd n’utilise plus le fichier innitab et les scripts de démarrages, mais raisonne en terme de services, chaque service étant décrit par un fichier contenant la commande à exécuter, des diverses informations, telles que les dépendances du services.

Un service en particulier est dédié à la gestion des terminaux série : serial-getty@.service

Cependant, il ne comporte pas les bonnes options de configurations pour dialoguer avec un Minitel, nous allons donc créer notre propre service, adapté à cet effet. :

Commençons par créer une copie du service, qu’on modifie ensuite :

sudo cp /lib/systemd/system/serial-getty@.service /etc/systemd/system/serial-getty-minitel@.service
sudo nano /etc/systemd/system/serial-getty-minitel@.service

Les modifications apportées au fichier concernent la ligne de commande exécutée (getty avec les options adéquats, à la place de agetty), et la suppression de l’attente de plymouth pour démarrer ( en gras ci-dessous)

#  This file is part of systemd.
#
#  systemd is free software; you can redistribute it and/or modify it
#  under the terms of the GNU Lesser General Public License as published by
#  the Free Software Foundation; either version 2.1 of the License, or
#  (at your option) any later version.

[Unit]
Description=Serial Getty on %I
Documentation=man:agetty(8) man:systemd-getty-generator(8)
Documentation=http://0pointer.de/blog/projects/serial-console.html
BindsTo=dev-%i.device
After=dev-%i.device systemd-user-sessions.service
After=rc-local.service

# If additional gettys are spawned during boot then we should make
# sure that this is synchronized before getty.target, even though
# getty.target didn't actually pull it in.
Before=getty.target
IgnoreOnIsolate=yes

[Service]
ExecStart=-/sbin/getty -L -i -I "\033\143" %i 4800 minitel1b-80
Type=idle
Restart=always
UtmpIdentifier=%I
TTYPath=/dev/%I
TTYReset=yes
TTYVHangup=yes
KillMode=process
IgnoreSIGPIPE=no
SendSIGHUP=yes

[Install]
WantedBy=getty.target

Ensuite, il ne reste plus qu’à ajouter un lien sur ce fichier dans le répertoire getty.target.wants. Ce lien comporte une indication sur le périphérique concerné (ici ttyUSB0). systemd remplacera toutes les occurrences de %i dans le fichier serial-getty-minitel@.service par cette valeur.

sudo ln -s /etc/systemd/system/serial-getty-minitel@.service /etc/systemd/system/getty.target.wants/serial-getty-minitel@ttyUSB0.service

On redémarre le processus de systemd :

sudo systemctl daemon-reload

Puis on lance manuellement notre service (ou on redémarre le raspberry)

sudo systemctl start serial-getty-minitel@ttyUSB0.service

Et voilà, on retrouve le même fonctionnement obtenu précédemment en modifiant le fichier inittab 🙂

Pour plus d’info sur l’utilisation du minitel comme terminal sous Linux, voir les parties précédentes :

Source  : doc serial-getty@.service

13 Commentaires

2 pings

Passer au formulaire de commentaire

  1. Merci beaucoup pour cet article !
    J’étais en train de m’arracher la tête avec systemd

  2. Après plusieurs essaies en suivant rigoureusement vos explications, lorsque je souhaite utiliser le port série intégré sur GPIO de la raspberry, le terminal marche que dans un sens. Je me suis demandé si un autre processus (peut être dans le boot) interfère et empeche le terminal de bien fonctionner.
    J’aimerais votre avis/expérience là dessus. Merci et bon travail !

    1. Salut,

      En effet, si mes souvenirs sont bons, il y a la console de debug qui utilise cette UART.

      Tu peux essayer la commande suivante, suivie d’un reboot pour désactiver cette console, et laisser l’UART libre pour ton utilisation :

      sudo systemctl disable serial-getty@ttyAMA0.service

  3. J’ai modifié le fichier cmdlines.txt dans le dossier /boot pour enlever la partie console de démarrage. Le résultat est satisfaisant tout fonctionne comme il faut !
    Maintenant je me demande s’il ne serrait pas possible de pouvoir démarrer sur la console de debug (celle de base) et ensuite de switch sur un terminal comme on le fait dans cet article ?
    Ou alors peut on bricoler un montage permettant d’adapter n’importe qu’elle vitesse de dialogue en 9600 bauds ?
    (9600 parce que j’ai un minitel 2 compatible 9600bauds)

  4. JackCarterS,

    Ce doit être possible, cependant le problème est qu’à 9600 bauds, cela risque de ralentir le démarrage du raspberry, qui sera limité par la vitesse de transmission de cette console.

    Concernant l’adaptation de la vitesse, c’est impossible de faire un montage « simple », il faut au minimum un peu de mémoire pour stocker les caractères qui arrivent plus rapidement qu’ils ne repartent, avec le risque que cette mémoire se remplisse jusqu’à saturation.

    • hardbidouille67 sur 30 novembre 2017 à 2h32
    • Répondre

    Salut et merci pour cet article!

    Quelque chose ne semble pas bien fonctionner chez moi.
    Lorsque j’utilise des commandes comme « nano, top, less » ou autres, ca ne fonctionne pas et me renvoie le message « Error opening terminal: minitel1b-80 ou « WARNING: Terminal is not fully functional ».
    Quelqu’un à une idée d’ou peut venir le problème ?

  5. @hardbidouill:
    Oui, il doit te manquer le terminfo pour minitel … c’est expliqué un peu partout ici et la …
    wget canal.chez.com/mntl.ti ; tic mntl.ti ; export TERM=m1b-x80 … te suffira !

    @JAckCarterS: essayes m2-x80 ou minitel2-80 avec screen(1) pour bénéficier des jeux spplémentaires du Minitel 2…

    Alex.
    PS: Nouvelle version 1.07 de mntl.ti …

    • Quiec Florian sur 15 août 2019 à 15h12
    • Répondre

    Bonjour,

    Deja un grand merci pour votre site qui rend cette manipe rigolotte a la porté du plus grand nombre .
    mais voila, j’ai un petit probleme ! j’y ai passer pas mal d’heure mais pas moyen de le regler.
    la partie 1 est parfaite et je peux meme converser avec le minitel via de petit script python(via pyserial).

    par contre ma configuration via systemed ne passe pas !
    la config: Fedora 30 workstation sur un pc portable (proc core i5).
    le prompt de login s’affiche, je peut saisir le login puis plus rien! le curseur passe au debut de la ligne suivant ,je ne peut plus rien entrer.
    J’ai finalement compris que c’est agetty qui plante a la reception du login! Il ce coupe, entrainant la fermeture du terminal associé. je ne parviens cependant pas a trouver les logs.

    le seul moyen pour avoir un terminal fonctionnel deduis de nombreux essais erreur:
    ne pas lancer les service au demarage.
    entrer la commande

    sudo stty -F /dev/ttyUSB0 4800 istrip cs7 parenb -parodd brkint ignpar icrnl ixon ixany opost onlcr cread hupcl isig icanon echo echoe echok
    #suivi de:

    sudo agetty ttyAMA0 4800&
    #cette commande plante car je n’ai pas de port associé a tty AMA0 mais agetty se lance un bref #instant. je peut maintenant lan cer la bonne commande:

    sudo agetty ttyUSB0 4800&
    #le service se lance avec un prompt de login horrible sur 3 ligne mais qui fonctionne

    Cette « procedure etrange semble etre la seule qui fonctionne a tous les coups ???????

    voila si quelqu’un voit une raison a ce plantage d’aggety ou peut m’apporter une quelconque aide.
    En vous remerciant d’avance !
    Flo

    • Quiec Florian sur 15 août 2019 à 15h29
    • Répondre

    ps l’argument TERM d’agetty, si il est renseigné semble fonctionner.
    flo

  6. Bonjour,

    J’ai suivi le tuto pour système.
    Ça fonctionne, merci, mais certains caractères s’affichent mal, par exemple le ‘@’ devient ‘à’ ou le ‘[‘ devient ‘°’. Une idée ?

    1. Bonjour,

      Il est possible que le fichier terminfo du Minitel ne soit pas installé sur votre système.
      Je vais essayer de retester sur un distribution récente dans les jours à venir.

  7. @Fabien … si tu as des ‘à’ au lieu de ‘@’ avec TERM=minitel1b-80 (ou m1b-x80) : tu es en Français (Fnct T+F). Il faut faire Fnct T+A.

    Avec TERM=minitel2-80 ou m2-x80 tu devrais avoir en plus les filets VT100…

    Alex.

    • Chris sur 13 septembre 2023 à 18h29
    • Répondre

    vous vendez toujours des câbles préfabriqués ?

    Amazing information

  1. […] pila.fr #1 et pila.fr #2 et pila.fr #3 […]

  2. […] Un minitel comme terminal linux USB. Partie 3 : Et avec systemd ? […]

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée.