Agetty

De Wiki doc


Agetty (alternative Linux getty) est un programme sous Linux qui s'occupe de créer un TTY, ouvrir un prompt de connexion et invoquer le programme login afin de donner accès à un Shell à un utilisateur. Il est exécuté par le système d'Init (le plus souvent Systemd sur un grand nombre de distributions).

Message d'accueil

Agetty permet d'afficher un message avant le prompt de connexion via la lecture d'un fichier. Celui-ci peut être différent si la connexion est demandée depuis un accès local (console) ou distant (telnet). Ce fichier ne peut pas contenir de commandes et doit se contenter de texte simple. Cependant, une série de séquences \char peut être utilisée afin de personnaliser dynamiquement le message avec des informations issues du système.

Enfin, je proposerai une méthode pour tout de même utiliser le retour de commandes dans ce message afin de rendre celui-ci encore plus utile.

Accès local

Lors d'un accès local, le programme va lire le contenu du fichier /etc/issue. Les séquences d’échappement possibles sont les suivantes :

Argument Effet
\4 ou \4{interface} Insert l'adresse IPv4 de la première interface pleinement configurée trouvée (UP, non-LOCALBACK, RUNNING) ou de celle spécifiée en argument
\6 ou \6{interface} Pareil que pour IPv4
\b Insert la vitesse de transmission en baud de la ligne série active
\d Insert la date actuelle (en anglais)
\e{couleur} Permet de changer la couleur du texte. Ces couleurs sont des mots clés et non des valeur numériques. En voici la liste exhaustive: black, blink, blue, bold, brown, cyan, darkgray, gray, green, halfbright, lightblue, lightcyan, lightgray, lightgreen, lightmagenta, lightred, magenta, red, reset, reverse, yellow. Notez la valeur reset qui permet de remettre la valeur par défaut. Exemple: \e{red}Debian\e{reset}
\s Insert le nom du système (identique à un uname -s)
\S ou \S{VARIABLE} Insert le contenu de la variable du fichier /etc/os-release ou /usr/lib/os-release passé en argument. Si aucun argument n'est donné, la séquence renvoie le contenu de la variable PRETTY_NAME des mêmes fichiers
\l Insert le nom du TTY actuel
\m Insert l'architecture du système (identique à un uname -m)
\n Insert le nom d'hôte de la machine (identique à un uname -n)
\o Insert le domaine NIS de la machine (identique à un hostname -d)
\O Insert le nom de domaine de la machine
\r Insert la version du noyau utilisée (identique à un uname -r)
\t Insert l'heure au format du système (variable d’environnement $LANG - valeur fr_FR.UTF-8 pour avoir le format Français)
\u Insert le nombre actuel d'utilisateurs connectés
\U Insert la chaine de caractère "\u user" (il exécute une séquence \u et ajoute le mot "user" après - oui c'est inutile...)
\v Affiche la version de l'OS (renvoi "#1 SMP Debian 5.7.6-1 (2020-06-24)" sur ma Debian Sid)

Accès distant

Lors d'un accès distant (via telnet), le programme va lire le contenu du fichier /etc/issue.net. Les séquences d’échappement possibles sont les suivantes :

Argument Effet
%t Insert le nom du TTY actuel
%h Insert le nom de domaine de la machine
%D Insert le domaine NIS de la machine (identique à un hostname -d)
%d Insert la date actuelle (en anglais)
%n Insert le nom d'hôte de la machine (identique à un uname -n)
%s Insert le nom du système (identique à un uname -s)
%m Insert l'architecture du système (identique à un uname -m)
%r Insert la version du noyau utilisée (identique à un uname -r)
%v Affiche la version de l'OS (renvoi "#1 SMP Debian 5.7.6-1 (2020-06-24)" sur ma Debian Sid)
%% Insert le caractère %

Remplissage par commande

Bien que le système de caractères d'échappement soit bien fournit, cela ne peut pas couvrir tout les besoins et il peut être pratique de remplir les fichiers lus par Agetty avec des commandes Bash classiques. Pour ce faire, j'utilise le fichier rc.local combiné à de simple redirecteurs.

cat << '_EOF_' > /etc/rc.local
#!/bin/bash
export chemin="/etc/issue" && echo 'Debian GNU/Linux 11 \n \l' > "${chemin}" && echo -e "\nListe des interfaces réseau :" >> "${chemin}" && ip -brief address >> "${chemin}" && echo -e "\n" >> "${chemin}"
_EOF_
chmod +x /etc/rc.local

Ceci est très utile notamment lors de la construction d'images Squashfs destinées à des tests afin de connaître la configuration IP dynamique des machines sans avoir à se connecter. On peut ainsi lancer une session SSH sans perdre de temps ou avoir à jongler avec le clavier (avec plusieurs machines et un tât de bordel sur le bureau ça peut vite devenir lourdingue).

Sources de la section

Source