« Agetty » : différence entre les versions

De Wiki doc

(Page créée avec « Category:shell ''Agetty'' (''alternative Linux getty'') est un programme sous ''Linux'' qui s'occupe de créer un ''TTY'', ouvrir un prompt de connexion et invoquer l... »)
 
(Remplacement des balises "source" obsolètes par "syntaxhighlight" + correction de fautes de français + correction d'une erreur dans le fichier "rc.local")
 
Ligne 9 : Ligne 9 :


==Accès local==
==Accès local==
Lors d'un accès local, le programme va lire le contenu du fichier <source lang="bash" inline>/etc/issue</source>. Les séquences d’échappement possibles sont les suivantes:
Lors d'un accès local, le programme va lire le contenu du fichier <syntaxhighlight lang="bash" inline>/etc/issue</syntaxhighlight>. Les séquences d’échappement possibles sont les suivantes :


{| class="wikitable"
{| class="wikitable"
Ligne 23 : Ligne 23 :
| \d || Insert la date actuelle (en anglais)
| \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: <source lang="bash" inline>\e{red}Debian\e{reset}</source>
| \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: <syntaxhighlight lang="bash" inline>\e{red}Debian\e{reset}</syntaxhighlight>
|-
|-
| \s || Insert le nom du système (identique à un <source lang="bash" inline>uname -s</source>)
| \s || Insert le nom du système (identique à un <syntaxhighlight lang="bash" inline>uname -s</syntaxhighlight>)
|-
|-
| \S ou \S{VARIABLE} || Insert le contenu de la variable du fichier <source lang="bash" inline>/etc/os-release</source> ou <source lang="bash" inline>/usr/lib/os-release</source> passé en argument. Si aucun argument n'est donné, la séquence renvoie le contenu de la variable ''PRETTY_NAME'' des mêmes fichiers
| \S ou \S{VARIABLE} || Insert le contenu de la variable du fichier <syntaxhighlight lang="bash" inline>/etc/os-release</syntaxhighlight> ou <syntaxhighlight lang="bash" inline>/usr/lib/os-release</syntaxhighlight> 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
| \l || Insert le nom du ''TTY'' actuel
|-
|-
| \m || Insert l'architecture du système (identique à un <source lang="bash" inline>uname -m</source>)
| \m || Insert l'architecture du système (identique à un <syntaxhighlight lang="bash" inline>uname -m</syntaxhighlight>)
|-
|-
| \n || Insert le nom d'hôte de la machine (identique à un <source lang="bash" inline>uname -n</source>)
| \n || Insert le nom d'hôte de la machine (identique à un <syntaxhighlight lang="bash" inline>uname -n</syntaxhighlight>)
|-
|-
| \o || Insert le domaine NIS de la machine (identique à un <source lang="bash" inline>hostname -d</source>)
| \o || Insert le domaine NIS de la machine (identique à un <syntaxhighlight lang="bash" inline>hostname -d</syntaxhighlight>)
|-
|-
| \O || Insert le nom de domaine de la machine
| \O || Insert le nom de domaine de la machine
|-
|-
| \r || Insert la version du noyau utilisée (identique à un <source lang="bash" inline>uname -r</source>)
| \r || Insert la version du noyau utilisée (identique à un <syntaxhighlight lang="bash" inline>uname -r</syntaxhighlight>)
|-
|-
| \t || Insert l'heure au format du système (variable d’environnement ''$LANG'' - valeur ''fr_FR.UTF-8'' pour avoir le format Français)
| \t || Insert l'heure au format du système (variable d’environnement ''$LANG'' - valeur ''fr_FR.UTF-8'' pour avoir le format Français)
Ligne 51 : Ligne 51 :


==Accès distant==
==Accès distant==
Lors d'un accès distant (via ''telnet''), le programme va lire le contenu du fichier <source lang="bash" inline>/etc/issue.net</source>. Les séquences d’échappement possibles sont les suivantes:
Lors d'un accès distant (via ''telnet''), le programme va lire le contenu du fichier <syntaxhighlight lang="bash" inline>/etc/issue.net</syntaxhighlight>. Les séquences d’échappement possibles sont les suivantes :


{| class="wikitable"
{| class="wikitable"
Ligne 61 : Ligne 61 :
| %h || Insert le nom de domaine de la machine
| %h || Insert le nom de domaine de la machine
|-
|-
| %D || Insert le domaine NIS de la machine (identique à un <source lang="bash" inline>hostname -d</source>)
| %D || Insert le domaine NIS de la machine (identique à un <syntaxhighlight lang="bash" inline>hostname -d</syntaxhighlight>)
|-
|-
| %d || Insert la date actuelle (en anglais)
| %d || Insert la date actuelle (en anglais)
|-
|-
| %n || Insert le nom d'hôte de la machine (identique à un <source lang="bash" inline>uname -n</source>)
| %n || Insert le nom d'hôte de la machine (identique à un <syntaxhighlight lang="bash" inline>uname -n</syntaxhighlight>)
|-
|-
| %s || Insert le nom du système (identique à un <source lang="bash" inline>uname -s</source>)
| %s || Insert le nom du système (identique à un <syntaxhighlight lang="bash" inline>uname -s</syntaxhighlight>)
|-
|-
| %m || Insert l'architecture du système (identique à un <source lang="bash" inline>uname -m</source>)
| %m || Insert l'architecture du système (identique à un <syntaxhighlight lang="bash" inline>uname -m</syntaxhighlight>)
|-
|-
| %r || Insert la version du noyau utilisée (identique à un <source lang="bash" inline>uname -r</source>)
| %r || Insert la version du noyau utilisée (identique à un <syntaxhighlight lang="bash" inline>uname -r</syntaxhighlight>)
|-
|-
| %v || Affiche la version de l'OS (renvoi ''"#1 SMP Debian 5.7.6-1 (2020-06-24)"'' sur ma ''Debian Sid'')
| %v || Affiche la version de l'OS (renvoi ''"#1 SMP Debian 5.7.6-1 (2020-06-24)"'' sur ma ''Debian Sid'')
Ligne 81 : Ligne 81 :
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 [[Shell bash|commandes Bash]] classiques. Pour ce faire, j'utilise le fichier ''[[rc.local]]'' combiné à de simple redirecteurs.
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 [[Shell bash|commandes Bash]] classiques. Pour ce faire, j'utilise le fichier ''[[rc.local]]'' combiné à de simple redirecteurs.


vim /etc/rc.local
<syntaxhighlight lang="php">
 
cat << '_EOF_' > /etc/rc.local
<source lang="bash">
#!/bin/bash
export chemin="/etc/issue" && echo 'Debian GNU/Linux 10 \n \l' > "${chemin}" && echo -e "\nListe des interfaces réseau:" >> "${chemin}" && ip -brief address >> "${chemin}" && echo -e "\n" >> "${chemin}"
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}"
</source>
_EOF_
</syntaxhighlight>


  chmod +x /etc/rc.local
  chmod +x /etc/rc.local


Ceci est très utile nottament lors de la construction d'images [[Squashfs]] destinées à des tests afin de connaitre 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).
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==
==Sources de la section==

Dernière version du 23 juillet 2022 à 11:24


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