logo Debian Debian Debian-France Debian-Facile Debian-fr.org Forum-Debian.fr Debian ? Communautés logo inclusivité

Debian-facile

Bienvenue sur Debian-Facile, site d'aide pour les nouveaux utilisateurs de Debian.

Vous n'êtes pas identifié(e).


L'icône rouge permet de télécharger chaque page du wiki visitée au format PDF et la grise au format ODT → ODT PDF Export

Console virtuelle, le message issue

Nota :

Contributeurs, les FIXME sont là pour vous aider, supprimez-les une fois le problème corrigé ou le champ rempli !

Introduction

Ce tuto propose de personnaliser le message de présentation affiché, lors d'une demande de connexion, en mode texte, à une console (virtuelle).

Ce tuto peut-être réalisé depuis l'interface texte d'une console. Ou depuis une session graphique, avec un terminal fenêtre.
Remarque : Le réaliser depuis un terminal fenêtre, offrant le copier/coller, est plus pratique.

Présentation

La commande agetty parfois nommée getty 2) établie la communication avec une console (virtuelle) pour que nous pussions communiquer avec le système directement en mode texte (sans passer par une interface graphique).

Une fois la communication établie avec la console, agetty affiche le contenu du fichier /etc/issue.
Puis propose son invite à la saisie d'un nom d'utilisateur.
Agetty est la première étape de l'ouverture d'une session en mode texte.
Son processus est suspendu tant que nous ne saisissons pas un nom d'utilisateur.

Lorsque qu'un nom est renseigné,
Le programme agetty est remplacé par le programme login, qui contrôle le mot passe saisi.
Si le mot de passe est correcte, la session est ouverte… Et l'interpréteur de commande (souvent bash) est démarré.
La console (qui est un terminal3)) nous permet alors de communiquer interactivement avec l'interpréteur (le shell).

Le fichier /etc/issue peut être utilisé pour personnaliser l'affichage d'une demande de connexion.

Dans le fichier /etc/issue, le programme agetty reconnaît des codes d’échappements (voir plus bas), qu'il substituera par des informations ou par des séquences d’échappement couleur.

Le fichier issue

Commençons par afficher le contenu du fichier /etc/issue.
Note : Celui montré ici, provient d'un système Debian GNU/Linux 12 (Bookworm) :

cat /etc/issue
Debian GNU/Linux 12 \n \l
 

Il contient du texte : Debian GNU/Linux 12.
Et deux codes d'échappements :

  • \n, qui insère le nom de l'hôte (définit dans le fichier /etc/hostname).
  • Et \l, qui insère le nom du périphérique de la console utilisée.

Pour voir le rendu, nous demandons l'affichage de la 3em console virtuelle avec la combinaison Ctrl+Alt+F3

Pour revenir à l'interface graphique :
  • KDE : Alt+F1
  • Gnome : Alt+F2
  • Cinnamon, Mate, LXDE, LXQT ou Xfce : Alt+F7

Les codes d’échappement

Les codes d’échappement débutent par le caractère \ (contre-oblique).
Sont actuellement reconnus (chez Debian GNU/Linux) les codes suivants :

Codes d'échappement d'agetty
Codes Descriptions
\4{interface}
\4
Insère l’adresse IPv4 de l’interface réseau.
Si interface n’est pas indiquée, insère la première interface fonctionnelle qui n'est pas la boucle locale.
Si aucune interface n’est trouvée, insère l’adresse IP de l'hôte (recherchée dans /etc/hosts).
\6{interface}
\6
Insère l’adresse IPv6 de l’interface réseau.
Si interface n’est pas indiquée, insère la première interface fonctionnelle qui n'est pas la boucle locale.
Si aucune interface n’est trouvée, insère l’adresse IP de l'hôte (recherchée dans /etc/hosts)
\b Insère la vitesse en baud de la console virtuelle.
\d Insère la date actuelle.
\e{nom}
\e
Insère la séquence d’échappement de la couleur d'écriture, correspondante à nom.
Avec pour nom : black, blink, blue, bold, brown, cyan, darkgray, gray, green, halfbright, lightblue, lightcyan, lightgray, lightgreen, lightmagenta, lightred, magenta, red, reset, reverse, yellow et white.
Si non n'est pas indiqué, \033 est inséré.
Si nom est inconnu le code d'échappement est ignoré.
reset, permet de revenir à la couleur par défaut.
\s Insère l'équivalent retourné par la commande uname -s (nom du noyau).
\S{variable}
\S
Insère la valeur de variable déclarée dans le fichier /etc/os-release.
Si le fichier n’existe pas, /usr/lib/os-release est utilisé.
Si variable n’est pas indiqué, c'est la variable PRETTY_NAME du fichier qui est utilisée.
Si aucun des fichiers n'existent, le code \s est utilisé.
\l Insère le nom du périphérique de la console utilisée (ttyN; N étant le numéro de la console).
\n Insère l'équivalent du retour de la commande uname -n (nom de l'hôte).
\o Insère l'équivalent du retour de la commande domainname (nom de domaine NIS/YP).
\O Insère l'équivalent du retour de la commande hostname -d (nom de domaine DNS).
\r Insère l'équivalent du retour de la commande uname -r (révision du noyau).
\t Insère l'heure actuelle (hh:mm:ss).
\u Insère le nombre d'utilisateur connecté.
\U Insère la chaîne 1 utilisateur ou N utilisateurs (N est le nombre d'utilisateur connecté).
\v Insère l'équivalent du retour de la commande uname -v (la version du noyau).

Source : Manuel (fr) agetty (4) : getty alternatif pour Linux (manpages.org)

Les séquences d'échappement

Le fichier /etc/issue est affiché dans les consoles virtuelles.
Il peut donc aussi contenir, directement des séquences d'échappement, reconnues par la console Linux.

Voir Manuel (fr) console_codes (4) : Séquence de contrôle des consoles (manpage.org).

Personnalisation

Commençons par regarder les détails du fichier /etc/issue.

ls -l /etc/issue
-rw-r--r-- 1 root root 27  9 juin  03:29 /etc/issue

Il appartient à root,
Qui seul a le pouvoir d'écrire dedans.
Pour modifier son contenu, nous devons donc le faire sous son autorité.
Soit en étant nous même root (via la commande su).
Soit en utilisant la commande sudo.

Durant la confection d'un fichier issue,
Il n'est pas nécessaire de modifier l'original (/etc/issue).
Nous pouvons utiliser l'option -f <chemin_fichier> de la commande agetty, pour indiquer un chemin différent.

Afin de ne pas compliquer le tuto avec une histoire de chemin,
Nous créons notre fichier mon_issue dans le répertoire /tmp.

Copions l’intégralité ci-dessous dans le terminal fenêtre, puis appuyons sur ↵ Entrée.

echo '\e{gray} \S{NAME} \S{VERSION_ID} \S{VERSION_CODENAME}\e{reset}
\e{darkgray}       .--.   \e{reset} 
\e{darkgray}      |o_o |  \e{reset}         \e{yellow}Bonjour\e{reset}
\e{darkgray}      |:_/ |  \e{reset}  \e{yellow}Bienvenu\e{reset}   
\e{darkgray}     //    \\\\\  \e{reset}
\e{darkgray}    (|      |)     \e{reset}  \e{gray}Sur la console \l \e{reset}
\e{darkgray}   / \\\_   _/ \\\ \e{reset} 
\e{darkgray}   \\\___)=(___/   \e{reset}           \e{gray}De \e{lightgreen}\n\e{reset} 
 
\e{gray} Nous sommes au \e{lightred}\4\e{reset}
 
' >/tmp/mon_issue
Dans un fichier issue, le caractère \ est spécial, il annonce un code d’échappement.

Pour qu'il soit considéré comme simple caractère, il doit être noté ainsi : \\\ (3).
Pour en afficher 2 à la suite, ils doivent être notés ainsi : \\\\\ (5).
Pour en afficher 3 à la suite, ils doivent être notés ainsi : \\\\\\ (6).
Pour en afficher 4 à la suite, ils doivent être notés ainsi : \\\\\\\\\ (6+3).

Puis demandons son affichage :

La commande agetty est une commande système.
Elle se trouve dans le répertoire /usr/sbin.
Par défaut, ce chemin est inconnu pour un simple utilisateur (il n'est pas indiqué dans son PATH).
C'est pourquoi, pour exécuter agetty, nous devons saisir son chemin complet.
/usr/sbin/agetty --show-issue -f /tmp/mon_issue

Remarque :
Nous travaillons depuis un terminal fenêtre.
Le code d'échappement \l ne peut pas retourner correctement le nom de la console utilisée.
(Puisque nous sommes dans un terminal fenêtre.)

… Quand le rendu nous convient, nous pouvons remplacer l'original.
Mais avant nous devons le sauvegarder.

cp -v /etc/issue /etc/issue.s00
'/etc/issue' -> '/etc/issue.s00'

Voila qui est bien fait :-P

Puis écrasons le :

cp -v /tmp/mon_issue /etc/issue 
'/tmp/mon_issue' -> '/etc/issue'

Pour observer le résultat,
Il suffit de visiter une console qui ne dispose pas encore du processus agetty,
Par exemple la 4em console avec la combinaison Ctrl+Alt+F4.

Remarque :
Nous sommes ici dans une console, le code d'échappement \l a correctement retourné le nom de la console.

Conclusions

Voila nous pouvons maintenant personnaliser à notre convenance l'invite de connexion à une session en mode texte. 8-)

Le fichier /etc/issue peut être complémenté par d'autres fichiers disposant de l'extension .issue, placés dans le répertoire /etc/issue.d (à créer).
Si le fichier /etc/issue n'existe pas, ces fichiers sont ignorés.
Voir : Manuel (fr) agetty (4) : getty alternatif pour Linux (manpages.org) (section FICHIERS ISSUES).

Si les codes d'échappement ne suffisent pas (par exemple pour modifier la couleur du fond), les séquences d'échappement de la console peuvent être utilisées.
Voir Manuel (fr) console_codes (4) : Séquence de contrôle des consoles (manpage.org)

Il n'est pas forcément évident (du moins tant que nous ne savons pas faire) d'écrire une séquence d'échappement dans un fichier.
Cela provient du besoin d'écrire textuellement le caractère d’échappement (ESC), dont le caractère textuel n'existe pas.
Pour ce faire, voir le wiki : Séquences d'échappement, écriture dans un fichier.

Retour à l'état initial

Pour retrouver l'issue d'origine :

cp -v /etc/issue.s00 /etc/issue
'/etc/issue.s00' -> '/etc/issue'

Le fichier mon_issue à été créé dans le répertoire /tmp.
S'il n'est pas copier ailleurs, il sera supprimé à l'arrêt du système.

1)
N'hésitez pas à y faire part de vos remarques, succès, améliorations ou échecs !
2)
La commande agetty est l'alternative GNU/Linux de la commande getty.
3)
Un terminal est un appareil ou son émulation logicielle, qui permet de communiquer avec un système informatique. Il dispose généralement au moins, d'une entrée pour envoyer des informations au système (par exemple un clavier). Et d'une sortie, pour que le système puisse aussi nous informer (par exemple un écran).
atelier/chantier/console-virtuelle-message-issue.txt · Dernière modification: 11/06/2024 12:56 par agp91

Pied de page des forums

Propulsé par FluxBB