/etc/issue
.Nota :
Contributeurs, les sont là pour vous aider, supprimez-les une fois le problème corrigé ou le champ rempli !
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.
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.
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
).\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
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)
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).
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.
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
issue
, le caractère \
est spécial, il annonce un code d’échappement.\\\
(3).\\\\\
(5).\\\\\\
(6).\\\\\\\\\
(6+3).Puis demandons son affichage :
agetty
est une commande système./usr/sbin
.agetty
, nous devons saisir son chemin complet.
/usr/sbin/agetty --show-issue -f /tmp/mon_issue
\l
ne peut pas retourner correctement le nom de la console utilisée.
… 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
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.
\l
a correctement retourné le nom de la console.
Voila nous pouvons maintenant personnaliser à notre convenance l'invite de connexion à une session en mode texte.
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 : Ecrire le caractère d'échappement ESC.
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.
agetty
est l'alternative GNU/Linux de la commande getty
.