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

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
atelier:chantier:terminaux-et-consoles-explications [27/04/2023 11:14]
agp91 [Explications]
atelier:chantier:terminaux-et-consoles-explications [28/04/2024 07:10] (Version actuelle)
agp91 [Explications]
Ligne 330: Ligne 330:
 >​[[https://​git.kernel.org/​pub/​scm/​linux/​kernel/​git/​torvalds/​linux.git/​tree/​drivers/​tty/​Kconfig?​id=HEAD|(git.kernel)(en) Torvalds/​Linux/​drivers/​tty/​Kconfig]] (traduction) : La console système est le périphérique qui reçoit tous les messages du noyau et des avertissements et qui permet les connexions en mode mono-utilisateur. >​[[https://​git.kernel.org/​pub/​scm/​linux/​kernel/​git/​torvalds/​linux.git/​tree/​drivers/​tty/​Kconfig?​id=HEAD|(git.kernel)(en) Torvalds/​Linux/​drivers/​tty/​Kconfig]] (traduction) : La console système est le périphérique qui reçoit tous les messages du noyau et des avertissements et qui permet les connexions en mode mono-utilisateur.
  
-Ainsi la **console Linux** est **__la__ console** de l'​ordinateur. Elle est, ce qu'est une __console système__ ​pour l'​ordinateur central.+Ainsi la **console Linux** est **__la__ console** de l'​ordinateur. Elle est, ce qu'est une console système ​pour l'​ordinateur central.
  
-Elle n'​existe que dans le noyaumatériel et les drivers.+La console Linux **n'​existe que dans l'​espace noyau et le matériel.** 
 + 
 +<​note>​__**L'​espace ​noyau**__ fait référence aux anneaux théoriques de sécurité d'un système informatique(([[https://​fr.wikipedia.org/​wiki/​Anneau_de_protection|Anneau de protection (fr)(wikipedia)]])).\\ 
 +\\ 
 +Il y a 4 niveaux de sécurité (numérotés de 0 à 3) :\\ 
 +\\ 
 +  * Le **niveau 0** : Le noyau lui-même. 
 +  * Le **niveau 1** : Les drivers qui ordonnent le matériel
 +  * Le **niveau 2** : Les drivers qui implémentent l'​accès ​et l'​autorité aux ressources. 
 +  * Le **niveau 3** : L'​espace utilisateur. Où nous pouvons utiliser ​les ressources pour exécuter nos programmes. 
 + 
 +Depuis l'​espace utilisateur,​ nous accédons au ressources du système (détenue par le noyau), que par le niveau 2.\\ 
 +... Ainsi le noyau est protégé de tout accès direct. 
 + 
 +Pour simplifier ce schéma, **les trois premiers anneaux** (0, 1 et 2),\\ 
 +Sont regroupés en un seul, pour être **nommer** ''​l'​espace noyau''​.\\ 
 +Ainsi nous voyons le système avec  : 
 + 
 +  * L'​**espace noyau** (noyau + drivers
 +  * Et l'​**espace utilisateur**. 
 +</​note>​
  
 <file config La console Linux> <file config La console Linux>
-                 ​+------------------------Logiciel--------------------------+ +                 ​+------------------------Logiciel---------------------------------------+ 
-                 ​+---------------------Espace-noyau-------------------------+ +                 ​+---------------------Espace-noyau--------------------------------------+ 
- ​+------------Console-----------------------------------------------------+ | + ​+------------Console------------------------------------------------------------------+ ​
- | +-Matériel-+ ​ |  +-------+ ​  ​+---------+ ​   +----------+ ​   +-------+ ​ | | + ​| ​              ​| ​            ​+-------------Noyau-------------+ ​                      ​| ​
- | | +-----+ ​ |  |  |Drivers| ​  ​|         ​| ​   |          |    ​| ​      |  | | + | +-Matériel-+ ​ |  +-------+ ​ ​|  ​+---------+ ​   +----------+ ​ ​|  ​+------------------+ | | 
- | | |Ecran|<​-|--|--| vidéo |<​--|Emulateur| ​   |Discipline| ​   |Drivers|  | | + | | +-----+ ​ |  |  |Drivers| ​ ​|  ​|         ​| ​   |          |  |  ​|     ​Drivers ​     | | | 
- | | +-----+ ​ |  |  +-------+ ​  ​|   ​de ​   |<​==>​| ​         |<​==>​| ​      ​|  | | + | | |Ecran|<​-|--|--| vidéo |<-|--|Emulateur| ​   |Discipline| ​  |  ​+------------+ ​ | | | 
- | |+-------+ |  |  +-------+ ​  ​|terminal |    | de ligne |     ​TTY ​ ​| ​ | | + | | +-----+ ​ |  |  +-------+ ​ ​|  ​|   ​de ​   |<​==>​| ​   ​de ​   ​|<=|==|=>|/​dev/​console|  ​| | 
- | ||Clavier|-|--|->​|Drivers|-->​| ​        ​| ​   |          |    |       ​| ​ | | + | |+-------+ |  |  +-------+ ​ ​|  ​|terminal |    |  ligne   ​ |  |  ​+------------+ ​ | | | 
- | |+-------+ |  |  |Clavier| ​  ​+---------+ ​   +----------+ ​   +-------+ ​ | | + | ||Clavier|-|--|->​|Drivers|--|->​| ​        ​| ​   |          |  ​|  ​|       TTY        ​| | | 
- | +----------+ ​ |  +-------+ ​                                            ​| | + | |+-------+ |  |  |Clavier| ​ ​|  ​+---------+ ​   +----------+ ​ ​|  ​+------------------+ | | 
- ​+---------------|--------------------------------------------------------+ | + | +----------+ ​ |  +-------+ ​ ​+-------------------------------+ ​                      | | 
-                 ​+----------------------------------------------------------++ ​+---------------|---------------------------------------------------------------------+ | 
 +                 +-----------------------------------------------------------------------+
 </​file>​ </​file>​
  
-  * Le matériel UART et ses drivers ont disparu, laissant la place aux **drivers vidéo et clavier**. +Le matériel UART et ses drivers ont disparu, laissant la place aux **drivers vidéo et clavier**. 
-  L'**émulateur de terminal** ​est désigné ​comme **terminal physique**.+ 
 +**Le terminal ​est émulé** au sein du noyau.\\ 
 +Le noyau nous le présente donc comme **terminal physique**.\\ 
 +Son émulateur fut **nommé Linux**.\\ 
 +Ce qui donna **le type** ''​linux'',​ pour le différencier des autres types de terminaux. 
 + 
 +----
  
 Avec les systèmes GNU/Linux modernes, sur un PC et un écran moderne, la **console** est un __terminal graphique__. Avec les systèmes GNU/Linux modernes, sur un PC et un écran moderne, la **console** est un __terminal graphique__.
Ligne 389: Ligne 416:
 <file config Deux terminaux virtuels (tty1 et tty2), utilisés pour l'​exécution d'un shell chacun.> <file config Deux terminaux virtuels (tty1 et tty2), utilisés pour l'​exécution d'un shell chacun.>
                ​+-----------------------------Logiciel---------------------------------+                ​+-----------------------------Logiciel---------------------------------+
-               ​+----------------------Espace-noyau-------------------+-----Espace-----+ +               ​+----------------------Espace-noyau------------------------+--Espace---+ 
-               ​| ​                                                    |  utilisateur ​  +               ​| ​            +---------Noyau---------+ ​ +--Drivers-TTY--+ | utilisat. ​
- ​+-Matériel-+ ​ |  +-------+ ​  ​+---------+ ​  ​+---+ ​  +-------+ ​  +---------+ ​  ​+-----+ | + ​+-Matériel-+ ​ |  +-------+ ​ ​|  ​+---------+ ​  ​+---+ ​ ​| ​ |  ​+---------+ ​ | |  ​+-----+ ​ 
- | +-----+ ​ |  |  |Drivers| ​  ​|         ​| ​  ​| ​  ​| ​  ​      ​|<=>​|/​dev/​tty1|<​=>​|shell| | + | +-----+ ​ |  |  |Drivers| ​ ​|  ​|         ​| ​  ​| ​  |<=|==|=>​|/​dev/​tty1|<​=|=|=>​|shell| ​ 
- | |Ecran|<​-|--|--| vidéo |<​--|Emulateur| ​  | D |   ​|Drivers  ​+---------+ ​  ​+-----+ | + | |Ecran|<​-|--|--| vidéo |<-|--|Emulateur| ​  | D |    +---------+ ​ | |  ​+-----+ ​ 
- | +-----+ ​ |  |  +-------+ ​  ​|   ​de ​   |<=>| D |<=>      ​                      + | +-----+ ​ |  |  +-------+ ​ ​|  ​|   ​de ​   |<=>| D |   ​| ​              | |           ​
- ​|+-------+ |  |  +-------+ ​  ​|terminal |   | L |   ​|  ​TTY  |   +---------+ ​  ​+-----+ | + ​|+-------+ |  |  +-------+ ​ ​|  ​|terminal |   | L |  |  ​ ​+---------+ ​ | |  ​+-----+ ​ 
- ​||Clavier|-|--|->​|Drivers|-->​| ​        ​| ​  ​| ​  ​| ​  ​      ​|<=>​|/​dev/​tty2|<​=>​|shell| | + ​||Clavier|-|--|->​|Drivers|--|->​| ​        ​| ​  ​| ​  |<=|==|=>​|/​dev/​tty2|<​=|=|=>​|shell| ​ 
- ​|+-------+ |  |  |Clavier| ​  ​+---------+ ​  ​+---+ ​  ​+-------+ ​  ​+---------+ ​  ​+-----+ ​+ ​|+-------+ |  |  |Clavier| ​ ​|  ​+---------+ ​  ​+---+ ​ ​| ​ |  ​+---------+ ​ | |  ​+-----+ ​ | 
- +----------+ ​ ​| ​ ​+-------+ ​                                                        + +----------+ ​ ​|  ​+-------+ ​ +-----------------------+ ​ +---------------+ |           ​
-               ​+-----------------------------------------------------+----------------++               ​+----------------------------------------------------------+-----------+ 
 +Alice a ouvert deux terminaux virtuels, sur son PC, démarrant chacun un shell.
 DDL : Discipline de ligne DDL : Discipline de ligne
 </​file>​ </​file>​
Ligne 478: Ligne 506:
  
 <file config Deux terminaux fenêtre émulés par le processus xterm> <file config Deux terminaux fenêtre émulés par le processus xterm>
-               ​+--------------------------Logiciel-------------------------+ +               +---------------------------Logiciel--------------------------+ 
-               +-Espace-noyau-------------------------+-Espace-------------+ +               ​+--------------Espace-noyau--------------+-Espace-utilisateur-
-               ​| ​               +-------------+       ​       ​utilisateur | +               ​| ​               +------Drivers PTY----+ |                    | 
-               ​| ​               | Drivers PTY |       |                    | +               ​| ​               ​|  ​+-----esclave----+ | |                    | 
-               ​| ​               ​|  ​+-------+  |  +----------+ ​  ​+-----+ ​   +               ​| ​        ​+---+  ​| ​ ​| ​ +----------+ ​ | | |     +-------+ ​     
-               ​| ​                ​| ​      |<​=|=>​|/​dev/​pts/​0|<​=>​|shell| ​   +               ​| ​        ​  ​|<=|==|=>​|/​dev/​pts/​0|<​=|=|=|====>| shell |      |  
- +-Matériel-+ ​ ​| ​ +---+  +---+  |  |esclave ​|  ​+----------+ ​  ​+-----+    |  ​ +               |         ​| ​  ​| ​ |  ​| ​ +----------+  | | |     ​+-------+ ​     | 
- ​| ​+------+  ​| ​ ​| ​  |  ​|   ​| ​ |  | (PTS) |  |  +----------+ ​  ​+-----+ ​   + +-Matériel-+  |  +---+  | |  |  |  +----------+ ​ | | |     +-------+ ​     
- ​| ​|Souris|-|--|->|  | D |<=|=>|       |<=|=>​|/​dev/​pts/​1|<​=>​|shell| ​   + ​| ​+------+  ​| ​ |   |  | D |<​=|==|=>​|/​dev/​pts/​1|<​=|=|=|====>| shell |        ​ 
- ​| ​+------ |  | |  ​| D |  |  +-------+ ​ |  +----------+ ​  ​+-----+ ​   + ​| ​|Souris|-|--|->|  | |  |  |  +----------+ ​ | | |     +-------+      | 
- ​|+-------+ |  |  | I |  | |  |  +------+ ​  ​      ​|                    | + | +------+ ​|  |  | R |  |   ​|  |  ​+----------------+ ​| |                    ​
- ​||Clavier|-|--|->​| V |  |   ​|<​=|=>​|maitre| ​  ​      ​|            +-----+ | + ​|+-------+ |  |  | I |  |   ​|  |      +------+ ​      ​| |                    | 
- ​|+-------+ |  |  | E |  +---+  |  |(PTM) |<==|=======|===========>​| ​    | | + ​||Clavier|-|--|->​| V |  |   ​|<​=|=====>​|maitre| ​      ​| |            +-----+ | 
- | +-----+ ​ |  |  | R |         ​| ​ +------+ ​  ​      ​|  +-----+ ​  ​|xterm| | + ​|+-------+ |  |  | E |  +---+  |      |(PTM) |<======|=|===========>​| ​    | | 
- | |Ecran|<​-|--|--| S |         ​+-------------+ ​      ​|  |serv.|<​=>​| ​    | | + | +-----+ ​ |  |  | R |         ​| ​     +------+ ​      ​| |  +-----+ ​  ​|xterm| | 
- | +-----+ ​ |  |  |   ​|<​==============================|=>​| ​ X  |   ​+-----+ | + | |Ecran|<​-|--|--| S |         +---------------------+ |  |serv.|<​=>​| ​    | | 
- ​+----------+ ​ |  +---+                               ​|  +-----+ ​          | + | +-----+ ​ |  |  |   |<================================|=>​| ​ X  |   ​+-----+ | 
-               ​+--------------------------------------+--------------------+ + ​+----------+ ​ |  +---+                                 ​|  +-----+ ​          | 
-DDL Discipline de ligne+               +----------------------------------------+--------------------+ 
 +Alice à ouvert deux terminaux fenêtre sur son PC. 
 +DDL Discipline de ligne
 </​file>​ </​file>​
  
Ligne 538: Ligne 568:
  
 <file config Deux accès distants au shell sur un ordinateur hôte> <file config Deux accès distants au shell sur un ordinateur hôte>
-+---------------------Logiciel-------------------+ +                          Hôte 
-+--------Espace-noyau-----------+-Espace---------+ ++-----------------Logiciel-----------------------+ 
-|        +-------------+           utilisateur ​++----------Espace-noyau----------+--Espace-------+ 
-|        | Drivers PTY |        |                ​+|        +------Drivers-PTY----+ |  utilisateur ​ 
-|        |  +------+ ​  ​       |  +---------+ ​  ​+|        |  +------+ ​          ​| |  +---------+ ​ 
-|        |  |      |<==|========|=>​|sshd@pts0| ​  ​+|        |  |      |<​==========|=|=>​|sshd@pts0|<=|==//=> Alice 
-+---+  ​|  |maître| ​  ​       |  +---------+ ​  ​+       |  |maître| ​          ​| |  +---------+ ​ 
-|   ​| ​ ​| ​ |(PTM) |   ​       |  +---------+ ​  ​++---+  ​| ​ |(PTM) |           ​| |  +---------+ ​ 
-| | |<​=|=>​| ​     |<==|========|=>​|sshd@pts1| ​  ​+| |   ​|<​=|=>​| ​     |<​==========|=|=>​|sshd@pts1|<=|==//=> Bob 
-| | |  |  +------+ ​  ​       |  +---------+ ​  ​+| |   ​|  |  +------+ ​          ​| |  +---------+ ​ 
-| | |  |  +-------+  |  +----------+ ​  ​+-----+ | +| | |  |  +--Esclave-(PTS)-+ | |               | 
-| |   ​|<=|=>|       |<=|=>​|/​dev/​pts/​0|<​=>​|shell| | +| | D |  |  ​| ​ +----------+ ​ | | |    ​+-----+ ​   
-+---+  ​|  ​|esclave|  |  +----------+ ​  ​+-----+ | +| | |<​=|==|=>​|/​dev/​pts/​0|<​=|=|=|===>​|shell| ​   
-       |  ​| (PTS) |  |  +----------+ ​  ​+-----+ | +|   |  |  |  +----------+ ​ | | |    ​+-----+ ​   |  
-        ​| ​      |<​=|=>​|/​dev/​pts/​1|<​=>​|shell| | +|   |  |  |  +----------+ ​ | | |    ​+-----+ ​   
-       ​|  ​+-------+  |  +----------+ ​  ​+-----+ | +| |   ​|<=|==|=>​|/​dev/​pts/​1|<​=|=|=|===>​|shell| ​   
-|        +-------------+ ​                      +| +---+  |  +----------------+ ​| |    ​+-----+ ​   
-+-------------------------------+----------------+ +|        +---------------------+ |               ​
-DDL : Discipline++--------------------------------+---------------+ 
 +Alice et Bob se sont connectés à distance sur l'​hôte pour ouvrir un shell. 
 +DDL : Discipline ​de ligne 
 +PTM : Drivers PTY maître 
 +PTS : Drivers PTY esclave
 </​file>​ </​file>​
  
Ligne 565: Ligne 599:
  
 <file config Accès à distance via un terminal virtuel> <file config Accès à distance via un terminal virtuel>
-   PC local    ​+---------------------------Logiciel------------------------+ ​     +----------------Logiciel-----------------+            ​PC local--------------------Logiciel----------------------+ ​     ​ 
-               +---------------Espace-noyau---------------+----------------+      +-Espace----------+----Espace-noyau-------+ +               +------------------Espace-noyau--------------+-Espace--+                     PC distant 
- ​+-Matériel-+ ​ |  +---+                                   ​| ​               |      |      utilisateur| ​                      | + +-Matériel-+  |  +---+                                     | utilis. |    ​+------------- ---Logiciel----------------+ 
- | +-----+ ​ |  |  | D |   ​+---+ ​  ​+---+ ​  ​+-------+   +---------+   +---+  |       +----------+   ​| ​        +---+   +---+ | + | +-----+ ​ |  |  | D |   ​+---+ ​  ​+---+ ​ +---------------+ ​ |         ​   +-Espace---------+-----Espace-noyau-------+ 
- | |Ecran|<​-|--|--| R |   | L |   ​| ​  ​| ​  ​      ​|<=>|/dev/tty1|<=>|ssh|<​=|==//​==|=>​|sshd@pts42|<​==|========>​|PTM|<​=>​| ​  | | + | |Ecran|<​-|--|--| R |   | L |   ​| ​  ​| ​  ​Drivers TTY  ​         ​      ​utilisateur ​                       
- | +-----+ ​ |  |  | I |<--| i |   | D |   ​|Drivers| ​  +---------+ ​  ​+---+  |      |  +----------+ ​  ​        ​+---+   | D | + | +-----+ ​ |  |  | I |<--| i |   | D |   +---------+ ​ ​| ​ |  ​+---+  |    |  +----------+ ​     +-----+ ​     ​+---+ |     ​ 
- ​|+-------+ |  |  | V |   | n |<=>| D |<​=>​| ​      ​                     ​                     ​                ​| D | | + ​|+-------+ |  |  | V |   | n |<=>| D |<=|=>|/dev/tty1|<=|==|=>|ssh|<​=|=//​=|=>​|sshd@pts42|<​=|====>​| PTM |<​====>​| D | | 
- ​||Clavier|-|--|->​| E |   | u |   | L |    ​TTY ​ ​| ​       ​| ​   Espace ​    ​| ​     | +-----+ ​  ​+-----------+ ​  ​+---+   ​| | + ​||Clavier|-|--|->​| E |   | u |   | L |  |  +---------+ ​ ​| ​ |  ​+---+  |    |  +----------+ ​ ​| ​    +-----+      | | 
- ​|+-------+ |  |  | R |-->| x |   ​| ​  ​| ​  |       ​| ​       ​|               ​| ​     | |shell|<​=>​|/​dev/​pts/​42|<​=>​|PTS|<​=>​| ​  | | + ​|+-------+ |  |  | R |-->| x |   ​| ​  ​| ​ |               ​| ​         ​       +-----+ ​   ​ +----PTS----+   ​| L | | 
- ​+----------+ ​ |  | S |   ​+---+ ​  ​+---+ ​  ​+-------+ ​       |  ​utilisateur  ​     | +-----+ ​  ​+-----------+   +---+   +---+ | + ​+----------+ ​ |  | S |   ​+---+ ​  ​+---+ ​ +---------------+ ​ ​| ​        ​| ​   |     ​|shell|<​===|=>​|/​dev/​pts/​42|<​=>​| ​  | | 
-               |  ​+---+                                    |               ​| ​     |                 ​| ​                      | +               |  ​+---+                                             ​   ​| ​    +-----+ ​   ​|  ​+-----------+ ​  +---+ | 
-               +-------------------------------------------+---------------+ ​     +-----------------+-----------------------+ ​        ​ +               ​+--------------------------------------------+---------+ ​   +----------------+------------------------+ 
-Linux : Émulateur ​de terminal ​                                                                   ​PC distant+Bob utilise ssh depuis une console virtuelle, pour se connecter et ouvrir un shell distant, sur le PC d'​Alice. 
 +Linux : L'​émulateur ​de terminal ​du noyau                                                                    
 DDL : Discipline de ligne            DDL : Discipline de ligne           
 PTM : Drivers PTY maître PTM : Drivers PTY maître
 PTS : Drivers PTY esclave PTS : Drivers PTY esclave
- 
 </​file>​ </​file>​
  
Ligne 587: Ligne 621:
  
 <file config Accès à distance via un terminal fenêtre>​ <file config Accès à distance via un terminal fenêtre>​
-   PC local    ​+-----------------------Logiciel-----------------------+ ​     +------------------Logiciel-----------------+ +            ​PC local-----------------Logiciel-----------------------+ ​   +----------------Logiciel------------------+ 
-               ​+--------Espace-noyau-------------+-Espace-------------+ ​     +-Espace----------+-----Espace-noyau--------+ +               +----------Espace-noyau---------+-Espace-------------+ ​   +-Espace----------+------Espace-noyau------+ 
- ​+-Matériel-+ ​ |  +---+                          |     ​utilisateur ​   |      |      utilisateur| ​                        ​+ ​+-Matériel-+ ​ |  +---+                        |     ​utilisateur ​   |    |      utilisateur| ​                       
- | +------+ |  |  |   ​| ​ +---+   +-----+   ​+----------+   ​+---+       ​     |  +----------+ ​  ​| ​        ​+-----+ ​  ​+---+ | + | +------+ |  |  |   ​| ​ +---+   +---PTS----+  ​| ​      +---+           |  +----------+ ​  ​| ​    ​+-----+ ​     +---+ | 
- | |Souris|-|--|->​| D |  |   |<=>| PTS |<​=>​|/​dev/​pts/​0|<​=>​|ssh|<​======|==//==|=>​|sshd@pts42|<​==|========>| PTM |<​=>​| ​  ​| | + | |Souris|-|--|->​| D |  |   ​|<​=>​|/​dev/​pts/​0|<​=|======>​|ssh|<​=======|=//​=|=>​|sshd@pts42|<​==|====>​| PTM |<====>​| ​| | 
- | +------+ |  |  | R |  | D |   +-----+ ​  +----------+ ​  ​+---+       ​     |  +----------+ ​  ​| ​        ​+-----+ ​  ​| D | | + | +------+ |  |  | R |  | D |   ​+----------+ ​ ​| ​      +---+           |  +----------+ ​  ​| ​    ​+-----+ ​     | D | | 
- ​|+-------+ |  |  | I |  | D |                   ​|                    |                      ​                  ​| | + ​|+-------+ |  |  | I |  | D |                 ​|                    |        +-----+ ​     ​+----PTS----+ ​  | | 
- ​||Clavier|-|--|->​| V |  | L |   ​+-----+ ​        ​|            +-----+ |      +-----+ ​  ​+-----------+ ​  ​+-----+ ​  | | + ​||Clavier|-|--|->​| V |  | L |     ​+-----+ ​    ​|            +-----+ |        ​|shell|<​====|=>​|/​dev/​pts/​42|<​=>​| ​  | | 
- ​|+-------+ |  |  | E |  |   ​|<​=>​| PTM |<========|===========>​| ​    | |      | |shell|<​=>​|/​dev/​pts/​42|<​=>​| PTS |<​=>​| ​  ​+ ​|+-------+ |  |  | E |  |   |<===>| PTM |<​====|===========>​| ​    | |        +-----+ ​     ​+-----------+ ​  ​+---+ 
- | +-----+ ​ |  |  | R |  +---+   ​+-----+ ​        ​|  +-----+ ​  ​|xterm| |      ​| ​+-----+   +-----------+   +-----+   +---+ | + | +-----+ ​ |  |  | R |  +---+     ​+-----+ ​    ​|  +-----+ ​  ​|xterm| |    +-----------------+------------------------+ 
- | |Ecran|<​-|--|--| S |                          |  |serv.|<​=>​| ​    ​| ​|      |                 ​| ​                        + | |Ecran|<​-|--|--| S |                        |  |serv.|<​=>​| ​    | |  
- | +-----+ ​ |  |  |   |<=========================|=>​| ​ X  |   ​+-----+ |      ​+-----------------+-------------------------+ + | +-----+ ​ |  |  |   ​|<​=======================|=>​| ​ X  |   ​+-----+ |                    PC distant 
- ​+----------+ ​ |  +---+                          |  +-----+ ​          ​| ​                     PC distant + ​+----------+ ​ |  +---+                        |  +-----+ ​          | 
-               +---------------------------------+--------------------++               ​+-------------------------------+--------------------+ 
 +Bob utilise ssh depuis un terminal fenêtre, pour se connecter et ouvrir un shell distant, sur le PC d'​Alice.
 DDL : Discipline de ligne DDL : Discipline de ligne
 PTM : Drivers PTY maître PTM : Drivers PTY maître
-PTS : Drivers PTY esclave 
 </​file>​ </​file>​
 +
 +==== Les consoles graphiques ====
 +
 +Une **consoles graphique *** est une **console système graphique**.\\
 +Elle permet de communiquer avec l'​ordinateur depuis sont démarrage.\\
 +Sa sortie est un graphique.
 +
 +Les consoles graphiques qui permettent d'​utiliser les machines virtuelles (qui disposent d'un système graphique) en sont l'​exemple.
 +
 +Une telle console affiche les messages du système et permet la communication entrante, depuis le démarrage de la machine virtuelle.\\
 +Une fois démarrée, elle permet d'​utiliser le système graphique.
 +
 +Les machines virtuelles sont vues comme des machines physiques distantes.\\
 +Pour qu'une console graphique (qui est locale) puisse communiquer avec une machine (virtuelle) distante, le réseau doit être utilisé.\\
 +Des projets comme
 +**VNC**((**VNC** est une suite logiciel historique, de type client/​serveur,​ qui permet l'​usage d'une console graphique connectée à système distant. Il a alors été développé un protocole réseau, qui établit, ​ la communication entre la console et la machine distante, par un flux graphique. [[https://​fr.wikipedia.org/​wiki/​VNC|(wikipedia)(fr) Virtual_Network_Computing]]))
 +ou
 +**SPICE**((**SPICE** est projet qui fourni une console graphique permettant d'​accéder à une machine virtuelle. La communication entre la console et la machine virtuelle est réalisée par un flux vidéo. [[https://​fr.wikipedia.org/​wiki/​SPICE_(protocole)|(wikipedia)(fr) SPICE (protocol)]] - [[http://​www.spice-space.org/​|(spice-space)(en)]]))
 +ont développés des protocoles réseaux, dont la console communique graphiquement avec la machine. ​
 +
 +  * **VNC** véhicule un flux graphique.
 +  * **SPICE** véhicule un flux vidéo.
 +
 +<​note>​Qui dit vidéo, dit graphisme et audio...\\
 +\\
 +LOL Pouvons-nous voir là, une //console système graphique audio// ?</​note>​
 +
 +----
 +
 +Un autre exemple de **console graphique** est celle que nous utilisons pour communiquer avec un BIOS graphique.
  
 ==== Les terminaux X ==== ==== Les terminaux X ====
Ligne 618: Ligne 682:
  
 <file config Accès à un ordinateur via un terminal X> <file config Accès à un ordinateur via un terminal X>
-                                           +------------------Logiciel---------------------+ +                                                       ​Ordinateur distant 
-          ​Terminal X                       +-Espace utilisateur--+-------Espace noyau------+ +          Terminal X                    ​+------------------Logiciel--------------------+ 
- +-Matériel-+  ​+------Logiciel------+ ​     ​| ​                    ​| ​                        | + +-Matériel-+  ​+------Logiciel-----+ ​   +-Espace utilisateur--+-----Espace noyau-------+ 
- | +------+ |  |  +---+             ​         ​+-----+ ​  ​+-----------+ ​  +-----+   +---+ | + | +------+ |  |  +---+                          +-----+ ​ ​|  ​+----PTS----+   +---+ | 
- | |Souris|-|--|->​| D |             ​         ​|Shell|<​=>​|/​dev/​pts/​42|<=>| PTS |<=>| D | | + | |Souris|-|--|->​| D |                          |Shell|<=|=>​|/​dev/​pts/​42|<​=>​| D | | 
- | +------+ |  |  | R |             ​         ​+-----+ ​  ​+-----------+ ​  +-----+ ​  | D | | + | +------+ |  |  | R |                          +-----+ ​ ​|  ​+-----------+ ​  | D | | 
- ​|+-------+ |  |  | I |    +-----+ ​ |      |  +-----+ ​  ​+-----+ ​ |         ​+-----+ ​  ​| L | | + ​|+-------+ |  |  | I |   ​+-----+ ​ |    |  +-----+ ​  ​+-----+ ​ |     ​+-----+ ​     | L | | 
- ​||Clavier|-|--|->​| V |    |     ​| ​ |      |  |     ​|<​=>​|xterm|<​=|========>| PTM |<​=>​| ​  | | + ​||Clavier|-|--|->​| V |   ​|     ​| ​ |    |  |     ​|<​=>​|xterm|<​=|====>​| PTM |<====>​| ​  | | 
- ​|+-------+ |  |  | E |    |Serv.| ​ |      |  |Serv.| ​  ​+-----+ ​ |         ​+-----+ ​  ​+---+ | + ​|+-------+ |  |  | E |   ​|Serv.| ​ |    |  |Serv.| ​  ​+-----+ ​ |     ​+-----+ ​     +---+ | 
- | +-----+ ​ |  |  | R |<==>​| ​ X  |<=|==//==|=>​| ​ X  |   ​+------+ |                         ​+ | +-----+ ​ |  |  | R |<​=>​| ​ X  |<​=|=//​=|=>​| ​ X  |   ​+------+ |                        
- | |Ecran|<​-|--|--| S |    |     ​| ​ |      |  |     ​|<​=>​|Clt. X| |    ​Ordinateur ​          + | |Ecran|<​-|--|--| S |   ​|     ​| ​ |    |  |     ​|<​=>​|Clt. X| |                        
- | +-----+ ​ |  |  +---+    +-----+ ​ |      |  +-----+ ​  ​+------+ |                         ​+ | +-----+ ​ |  |  +---+   ​+-----+ ​ |    |  +-----+ ​  ​+------+ |                        
- ​+----------+ ​ +--------------------+ ​     +---------------------+-------------------------++ ​+----------+ ​ +-------------------+ ​   +---------------------+------------------------+ 
 +Depuis un terminal X, Alice se connecte à la machine distante, pour y exécuter un shell.
 DDL : Discipline de ligne DDL : Discipline de ligne
 PTM : Drivers PTY maître PTM : Drivers PTY maître
Ligne 653: Ligne 718:
 D'​autres permettent d'en afficher plusieurs à l'​écran ou dans une fenêtre. D'​autres permettent d'en afficher plusieurs à l'​écran ou dans une fenêtre.
  
 +===== T0 - Tutos, préparatifs =====
 +
 +Voila le moment où nous devons expliquer par la pratique.
 +
 +==== Itinéraire ====
 +
 +Cette suite de tutos propose un voyage initiatique dans le monde des terminaux GNU/Linux.
 +
 +  * T0 - Tutos préparatifs
 +    * Itinéraire :-) **nous sommes ici**
 +    * Recommandations (conseil pour un meilleur confort)
 +    * Conventions (qui est quoi et qui somme nous)
 +    * **Sauvegarde du fichier** ''​~/​.bashrc''​
 +    * Usage de root
 +  * [[#​t1-le-type-term|T1 - Le type $TERM]]
 +    * Présentation de la variable d'​environnement TERM.
 +    * Son usage dans le fichier ''​.bashrc''​ pour coloriser l'​invite de l'​interpréteur bash.
 +  * [[#​t2-configuration-avec-stty|T2 - Configuration avec stty]]
 +    * Manipulation de la configuration d'un terminal.
 +  * [[#​t3-la-commande-tty|T3. La commande tty]]
 +    * Retourne le chemin du fichier périphérique du terminal utilisé.
 +    * **Modification du fichier** ''​~/​.bashrc''​
 +  * (A venir) [[#​t4-les-terminaux-virtuels|T4 - Les terminaux virtuels]]
 +    * Premières approches
 +    * Visualisation des processus et des fichiers périphériques,​ **Modification du fichier** ''​~/​.bashrc''​
 +    * Colorisation de l'​invite de bash, **Modification du fichier** ''​~/​.bashrc''​
 +    * Graphisme avec le framebuffer. ​
 +  * (A venir) [[#​t5-les-terminaux-fenetres|T5 - Les terminaux fenêtres]]
 +    * Visualisation des processus et des fichiers périphériques
 +    * Redimensionnement du terminal
 +    * Graphisme avec l’émulateur xterm.
 +  * (A venir) [[#​t6-les-terminaux-connectes|T6 - Les terminaux connectés]]
 +    * Visualisation des processus et des fichiers périphériques associés ; 
 +  * (A venir) [[#​t7-les_peripheriques-tty-et-tty0|T7 - Les périphériques tty et tty0]]
 +    * Deux fichiers de périphérique spéciaux.
 +  * (A venir) [[#​t8-Le_peripherique-console|T8 - Le périphérique console]]
 +    * Le terminal du noyau.
 +  * [[#​tx-retour-a-l-etat-initial|TX - Retour à l'​état initial]]
 +    * Fin des tutos. Le système est remis à son état initial.
 +    * **Restauration du fichier** ''​~/​.bashrc''​
 +
 +
 +==== Recommandations ====
 +
 +Pour un confort pratique, nous conseillons de réaliser cette suite de tutos dans une machine virtuelle.
 +
 +Car nous allons utiliser des terminaux virtuels en ligne de commande.\\
 +Il nous sera alors pas possible de lire les instruction affichées sur cette page.
 +
 +Disposer d'une machine virtuelle, dont la console est affichée dans une fenêtre, pour exécuter les tutos.\\
 +Permet d'​avoir accoté, la fenêtre du navigateur qui affiche les instruction de cette page.
 +
 +Pour créer facilement (sans ligne de commande) une machine virtuelle, voir le tuto  [[https://​debian-facile.org/​doc:​autres:​vm:​virt-manager|Virt-manager : Un gestionnaire graphique de machine virtuelle]].
 +
 +----
 +
 +Vous devriez déjà avoir une sauvegarde de votre fichier ''​.bashrc''​.\\
 +LOL Mais, nous ne jouerons pas là dessus.\\
 +
 +... Alors, nous le sauvegarderons tout même plus bas ^_^
 +
 +==== Conventions ====
 + 
 +Dans cette suite de tutos, nous utilisons les termes suivants : 
 +
 +^  Désignations ​ ^  Noms  ^  Périphériques (fichiers) ​ ^
 +|**Console linux** | ​ Console ​ | /​dev/​console |
 +|**Terminal virtuel** | ​ Tty**N** | /​dev/​tty**N** | ​
 +|**Terminal fenêtre** | ​ Pts**N** | /​dev/​pts/​**N** |
 +|**Terminal connecté** | ​ Pts**N** | /​dev/​pts/​**N** |
 +|**Terminal** | Désigne indifféremment un terminal physique ou émulé,\\ la console Linux, un terminal virtuel, fenêtre ou connecté.||
 +|Avec **N**, le numéro du terminal (un décimal entier).|||
 +
 +----
 +
 +Nous utilisons ici d'un PC disposant d'un système Debian GNU/linux 11 (Bullseye).\\
 +Le bureau graphique **xfce4** y a été installé.
 +
 +Après reboot (redémarrage),​ le gestionnaire d'​affichage **lightdm** nous propose de saisir notre nom d'​utilisateur et notre mot de passe.\\
 +Ici, nous utilisons l'​utilisateur **DF**, pour nous connecter.
 +
 +Une fois connecté, nous sommes sous le bureau d'​**Xfce**.
 +
 +Nous lançons une **fenêtre de terminal** (ici, **xfce4-treminal**).\\
 +... L'​interpréteur de commande **bash** y est exécuté.
 +
 +<​note>​
 +Les fichiers de configuration de bash de l'​utilisateur **DF**, n'ont pas été modifiés.\\
 +Les fichiers **~/​.profile** et **~/​.bashrc**,​ sont les fichiers donnés par défaut par un système Debian 11 GNU/Linux.
 +</​note>​
 +
 +==== Sauvegarde ====
 +
 +Plusieurs fois, nous modifierons notre fichier ''​.bashrc''​ :
 +
 +  * Au tuto [[#​t3-la-commande-tty|T3 - La commande tty]], pour ajouter le nom du terminal utilisé à l'​invite (le prompt) de l'​interpréteur de commande (bash).
 +  * Au tuto [[#​t4-les-terminaux-virtuels|T4 - Les terminaux virtuels]], pour forcer la colorisation de l'​invite pour les terminaux virtuels et nous y ajouterons deux alias qui nous faciliterons l'​écriture de commande.
 +
 +Ces modifications pourraient être réalisées en exécutant leurs commandes directement dans le terminal, sans modifier le fichier ''​.bashrc''​.\\
 +Mais elles seraient appliquées qu'à l'​interpréteur de commande de ce terminal (dans l'​interface où elles ont été exécutées) et ne le seraient pas pour les autres.\\
 +C'est pourquoi nous plaçons nos commandes dans le fichier ''​.bashrc'',​ qui lui, est interprété à chaque démarrage interactif de bash.
 +
 +Ainsi ces modifications seront disponibles pour tous shells bash que nous exécuterons,​ lorsque nous ouvriront un nouveau terminal.
 +
 +<​note>​Avant de modifier le fichier ''​~/​.bashrc'',​ nous devons en réaliser une sauvegarde.\\
 +Ainsi nous pourrons restaurer son état actuel, à la fin de notre voyage.\\
 +
 +Nous le copions simplement dans le répertoire **''​~/​DF-tuto''​**,​ que nous créons préalablement,​ dans le répertoire personnel de notre utilisateur.
 +</​note>​
 +
 +<code user>
 +cd ~ # Déplacement dans le dossier personnel
 +mkdir -v DF-tuto # Création du répertoire DF-tuto
 +
 +# Copie du fichier .bashrc dans DF-tuto
 +cp -v .bashrc DF-tuto
 +</​code><​code>​
 +mkdir: création du répertoire '​DF-tuto'​
 +'​.bashrc'​ -> '​DF-tuto/​.bashrc'​
 +</​code>​
 +
 +Voila qui est bien fait ;-)
 +
 +==== Root ====
 +
 +Nous utiliserons l'​utilisateur **root**((L'​utilisateur **root** est l'​administrateur de tout le système. Il a tout les droits sur tout. Il est aussi l'​utilisateur qui exécute les programmes nécessaires au fondement du système.)) via la commande **su**((La commande **[[doc:​systeme:​su|su]]** permet de changer d'​utilisateur,​ si nous en connaissons le mot de passe.)) pour exécuter des commandes sous son autorité.
 +
 +Le mot de passe root doit donc être connu.
 +
 +=====T1 - Le type $TERM =====
 +
 +La variable d'​environnement **TERM** contient le type du terminal utilisé.
 +
 +Tous les terminaux n'ont pas les même fonctionnalités que nous nommons **capacités**,​ ni les mêmes méthodes pour y parvenir. Par exemples : Certains disposent de touche de contrôle que d'​autre non pas ; Les séquences d'​échappement peuvent différer ; Certains sont capables d'​afficher des couleurs, d'​autres sont mono-chrome ; Etc.
 +
 +Le système dispose d'une base de données, constituée de fichiers binaires, pour mémoriser toutes les différences. Chaque type de terminal dispose de son fichier décrivant ses capacités.
 +
 +La première base de données (1978) fut nommés **termcap**((**Termcap** est une base de données (obsolète) des capacités des terminaux. [[https://​fr.manpages.org/​termcap/​5|(manpages.org)(fr) termcap (5)]])) ​ pour "​terminal capcities"​ (capacités des terminaux).\\
 +**Termcap** est noté obsolète sur de nombreux système (dont Debian GNU/​Linux).\\
 +Elle laisse la place à **terminfo**((**Terminfo** est la  base de données des capacités des terminaux, actuellement utilisée par les système GNU/Linux. [[https://​manpages.org/​terminfo/​5|(manpages.org)(en) terminfo (5)]])).
 +
 +<file config Extrait de la page de manuel terminfo (5)>
 +https://​manpages.org/​terminfo/​5 (traduction)
 +
 +Terminfo ​ est une base de données décrivant les terminaux, ​ utilisée par des
 +programmes ​ orientés ​ écran ​ tels que nvi(1), ​ lynx(1), ​ mutt(1) et d'​autres
 +applications curses, utilisant des appels de haut niveau à des bibliothèques
 +telles que ncurses (3NCURSES ).  Il est également ​ utilisé via des appels de
 +bas niveau par des applications non curses qui  peuvent être orientées écran
 +(telles que clear(1)) ou non écran (telles que tabs(1)).
 +</​file>​
 +
 +Ainsi, un programme peut s'il le souhaite, consulter la variable **TERM**, ​ pour connaître le type de terminal qu'il utilise. Et consulter la base de données **terminfo**,​ via la librairie **ncurses**((**Ncurses** (« New curses » : « Nouvelles malédictions ») est une bibliothèque de programmation qui offre des routines indépendantes des terminaux. Elle permet de réaliser des interfaces avec des fenêtres, de créer des menus déroulants,​ d'​utiliser des couleurs, etc, sur des terminaux texte. En affranchissant les différentes syntaxes des séquences d'​échappement. Évidement **ncurses** ne fait pas de miracle et ne peut coloriser du texte sur des terminaux nono-chrome. Ainsi **ncurses** permet d'​obtenir le meilleur rendu d'​affichage pour chaque terminal. [[https://​wiki.debian.org/​fr/​Ncurses|(wiki.debian.org)(fr) Ncurses]], [[http://​www.linuxfocus.org/​Francais//​Archives/​lf-2002_03-0233.pdf|(linuxfocus.org)(fr) Introduction à Ncurses]].)) (ou pas), afin de communiquer correctement avec le terminal. Par exemple, il est inutile d'​envoyer la séquence d'​échappement affichant le texte en rouge, sur des terminaux mono-chrome.
 +
 +**Terminfo** reconnaît de nombreux types de terminal.\\
 +La commande **toe -a**(([[https://​manpages.org/​toe|(nampage.org)(en) toe (1) : Table of terminfo entries]])) en retourne la liste.
 +
 +<​note>​
 +Nous n'​affichons pas ici la liste des terminaux connus par **terminfo**,​ car elle est trop longue.\\
 +\\
 +Nous demandons donc à la commande **wc -l**(([[https://​fr.manpages.org/​wc|(manpages.org)(fr) wc (1) : Afficher le nombre de lignes, de mots et d'​octets d'un fichier]])) d'en compter le nombre (nombre de ligne retourné par la commande **toe -a**).
 +</​note>​
 +
 +<code user>
 +echo "​Nombre de type de terminaux reconnus par terminfo : $(toe -a | wc -l)"
 +</​code><​code>​
 +Nombre de type de terminaux reconnus par terminfo : 1771
 +</​code>​
 +
 +8-O 1771 terminaux. (Pas tout à fait, car certains sont des liens pointant vers d'​autres. Ainsi un type peut disposer de plusieurs noms.)\\
 +Beaucoup sont exotiques et nous les rencontrons jamais.
 +
 +Les fichiers des capacités sont compilés avec la commande **tic**(([[https://​manpages.org/​tic|(manpages.org)(en) tic (1) : The terminfo entry-description compiler]])). Depuis des fichiers sources au format **term**(([[https://​manpages.org/​term/​5|(manpages.org)(en) term (5) : Format of compiled term file.]]))\\
 +Ils sont situés dans différents répertoires. Le fichier **/​etc/​terminfo/​README** nous l'​indique.
 +
 +<file config /​etc/​terminfo/​README>​
 +(Traduction)
 +Ce repétoire est pour les descriptions de terminfo du système local. Par défaut,
 +ncurses recherchera en premier dans ${HOME}/​.terminfo,​ puis dans /​etc/​terminfo
 +(ce répertoire),​ puis dans /​lib/​terminfo,​ et enfin dans /​usr/​share/​terminfo.
 +</​file>​
 +
 +Les fichiers de description de terminfo (des capacités des terminaux), placés dans les répertoires **/​lib/​terminfo** et **/​usr/​share/​terminfo**,​ sont classés par ordre alphabétique dans des sous-dossiers.
 +
 +Par exemple dans le répertoire **/​lib/​terminfo** :
 +
 +<code user>
 +ls /​lib/​terminfo
 +</​code><​code>​
 +a  c  d  E  h  l  m  p  r  s  t  v  w  x
 +</​code>​
 +
 +<code user>
 +echo /​lib/​terminfo/?/​*
 +</​code><​code>​
 +/​lib/​terminfo/​a/​ansi /​lib/​terminfo/​c/​cons25 /​lib/​terminfo/​c/​cons25-debian /lib/
 +terminfo/​c/​cygwin /​lib/​terminfo/​d/​dumb /​lib/​terminfo/​E/​Eterm /​lib/​terminfo/​E/​Et
 +erm-color /​lib/​terminfo/​h/​hurd /​lib/​terminfo/​l/​linux...
 +</​code>​
 +
 +Les fichiers de **terminfo** sont des fichiers binaires :
 +
 +<code user>
 +file /​lib/​terminfo/​l/​linux
 +</​code><​code>​
 +/​lib/​terminfo/​l/​linux:​ Compiled terminfo entry "​linux"​
 +</​code>​
 +
 +----
 +
 +Pour montrer la capacité des terminaux, nous pouvons utiliser la commande **man** (qui affiche les pages des manuels).\\
 +Elle utilise la commande **less** pour pager les pages d'un manuel.\\
 +La commande **less** utilise **terminfo** pour obtenir les capacités du terminal utilisé.\\
 +La variable **TERM** renseigne alors quel fichier de **terminfo** doit être lu.
 +
 +<code user>
 +man bash
 +</​code>​
 +
 +La page de manuel est affichée, nous pouvons y naviguer avec les touches <​key>​PageUp</​key>,​ <​key>​PageDown</​key>,​ <​key>​Fin</​key>​ et <​key>​Début</​key>​.\\
 +Bien... Quittons avec la touche <​key>​q</​key>​.\\
 +Puis relançons la commande en précisant un autre type de terminal.
 +
 +<code user>
 +TERM=vt102 man bash
 +</​code>​
 +
 +8-O Les touches <​key>​PageUp</​key>,​ <​key>​PageDown</​key>,​ <​key>​Fin</​key>​ et <​key>​Début</​key>​ ne fonctionne plus !\\
 +C'est normal... Le terminal VT102, ne prend pas en charge ces touches.\\
 +Quittons avec <​key>​q</​key>​.
 +
 +<note important>​
 +Modifier la variable **TERM** ne modifie pas le type de terminal utilisé.\\
 +Elle indique seulement aux applications qui le souhaitent quel type de terminal utiliser.
 +</​note>​
 +
 +Un autre exemple, avec la commande **top** (qui affiche la liste les processus exécutés) :
 +
 +<code user>
 +top
 +</​code>​
 +
 +Puis appuyons plusieurs fois sur la touche <​key>​z</​key>​.\\
 +Nous pouvons observer une différence à chaque fois que nous appuyons sur <​key>​z</​key>​.\\
 +Bien... Quittons avec la touche <​key>​q</​key>​.\\
 +Puis relançons **top** en précisant un autre type de terminal.
 +
 +<code user>
 +TERM=vt102 top
 +</​code>​
 +
 +Appuyons plusieurs fois sur <​key>​z</​key>​. Puis <​key>​q</​key>​ pour quitter.\\
 +8-O Il n'y a plus de changement de couleur !\\
 +C'est normal... Le terminal VT102 est un terminal mono-chrome ;-).
 +
 +----
 +
 +Affichons le type de terminal de notre terminal fenêtre (ici **xfce4-terminal**).
 +
 +<code user>
 +echo $TERM
 +</​code><​code>​
 +xterm-256color
 +</​code>​
 +
 +**Xfce4-terminal** est de type **xterm-256color**. Nous indiquant (entre autres) qu'il prend en charge 256 couleurs.
 +
 +Actuellement **xterm-256color** est le type utilisé par la plus part des terminaux fenêtre. Mais pas tous...
 +
 +|  Les différents types de terminal courants ​ |||
 +^  Terminaux ​ ^  Bureaux GUI  ^  Types  ^
 +|**Terminaux virtuels**|||
 +|Tty1 à tty6 | ​ Aucun  | linux |
 +|**Terminaux fenêtres**|||
 +|Xterm / uxterm | ​ Indéfinit ​ | xterm |
 +|Xfce4-terminal | ​ Xfce  | xterm-256color |
 +|Lxterminal | ​ LXDE  | xterm-256color |
 +|Mate-terminal | ​ Mate  | xterm-256color |
 +|Terminator | ​ Gnome | xterm-256color |
 +|Gnome-terminal | ​ Gnome/​Cinnamon ​ | xterm-256color |
 +|Terminator | ​ Gnome | xterm-256color |
 +|Konsole | ​ KDE  | xterm-256color |
 +|Eterm | ​ Enlightenment ​ | Eterm |
 +|Terminology | ​ Enlightenment ​ | xterm-256color |
 +|Aterm (urxvt) | ​ Indéfinit ​ | rxvt-unicode-256color |
 +|**Mutilpexeur de terminal**|||
 +|Screen | ​ Aucun/​indéfinit ​ | screen.linux,​ screen.xterm,​ screen.xterm-256color,​ screen.Eterm,​ etc |
 +|Tmux | ​ Aucun/​indéfinit ​ | screen |
 +
 +Tous les terminaux cités ci-dessus permettent la colorisation du texte. Ceux qui l'​indique permettent l'​usage de 256 couleurs, les autres utilisent 8 couleurs.
 +
 +La commande **infocmp __<​type>​__** permet de retourner via **terminfo**,​ les capacités d'un terminal.
 +
 +<​note>​
 +Ci-dessous, nous utilisons une boucle **for**, qui va pour chaque type de terminal listé,\\
 +\\
 +  * Mémoriser le type dans la variable **t**,
 +  * Extraire le nombre de couleur qu'il supporte, de la sortie de la commande **infocmp**,​ dans la variable **c**.
 +Puis utiliser la commande **printf** pour afficher de façon formaté le contenu des variables **t** et **c**.
 +</​note>​
 +
 +<code user>
 +echo "​Types ​          ​Couleur(s)"​
 +echo "​--------------------------"​
 +for t in vt102 vt220 linux xterm xterm-color xterm-256color Eterm screen
 +do # Pour chaque type listé
 + c=$(infocmp $t | grep '​colors#'​) #​ Récupère la ligne contenant le nombre de couleur, de la commande infocmp
 + c=${c#​*colors\#​} #​ Supprime tout ce qui se trouve avant le nombre de couleur
 + c=${c%%,​*} #​ Supprime tout ce qui se trouve après le nombre de couleur
 + printf "%-16s %3u\n" $t $c # Affiche le type et le nombre de couleur
 +done
 +unset t c # Supprime les variables utilisées
 +</​code><​code>​
 +Types           ​Couleur(s)
 +--------------------------
 +vt102              0
 +vt220              0
 +linux              8
 +xterm              8
 +xterm-color ​       8
 +xterm-256color ​  256
 +Eterm              8
 +screen ​            8
 +</​code>​
 +
 +La commande **infocmp __<​type1>​__ __<​type2>​__** permet de comparer les capacités deux types de terminal.\\
 +Sans option, seuls les différences sont affichées.
 +
 +<code user>
 +infocmp xterm xterm-256color
 +</​code><​code>​
 +comparing xterm to xterm-256color.
 +    comparing booleans.
 + ccc: F:T.
 +    comparing numbers.
 + colors: 8, 256.
 + pairs: 64, 65536.
 +    comparing strings.
 + initc: NULL, '​\E]4;​%p1%d;​rgb\:​%p2%{255}%*%{1000}%/​%2.2X/​%p3%{255}%*%{1000}%/​%2.2X/​%p4%{255}%*%{1000}%/​%2.2X\E\\'​.
 + oc: NULL, '​\E]104\007'​.
 + rs1: '​\Ec',​ '​\Ec\E]104\007'​.
 + setab: '​\E[4%p1%dm',​ '​\E[%?​%p1%{8}%<​%t4%p1%d%e%p1%{16}%<​%t10%p1%{8}%-%d%e48;​5;​%p1%d%;​m'​.
 + setaf: '​\E[3%p1%dm',​ '​\E[%?​%p1%{8}%<​%t3%p1%d%e%p1%{16}%<​%t9%p1%{8}%-%d%e38;​5;​%p1%d%;​m'​.
 + setb: '​\E[4%?​%p1%{1}%=%t4%e%p1%{3}%=%t6%e%p1%{4}%=%t1%e%p1%{6}%=%t3%e%p1%d%;​m',​ NULL.
 + setf: '​\E[3%?​%p1%{1}%=%t4%e%p1%{3}%=%t6%e%p1%{4}%=%t1%e%p1%{6}%=%t3%e%p1%d%;​m',​ NULL.
 +</​code>​
 +
 +----
 +
 +Sur un système Debian GNU/Linux, la variable **TERM** est utilisée pour savoir si le prompt (l'​invite) de bash peut-être colorisé.\\
 +Cela se passe dans le fichier **.bashrc** situé dans le répertoire de l'​utilisateur.
 +
 +<file config Extrait du fichier .bashrc sur un système Debian GNU/Linux 11>
 +...
 +case "​$TERM"​ in
 +    xterm-color|*-256color) color_prompt=yes;;​
 +esac
 +...
 +if [ "​$color_prompt"​ = yes ]; then
 +    PS1='​${debian_chroot:​+($debian_chroot)}\[\033[01;​32m\]\u@\h\[\033[00m\]:​\[\033[01;​34m\]\w\[\033[00m\]\$ '
 +else
 +    PS1='​${debian_chroot:​+($debian_chroot)}\u@\h:​\w\$ '
 +fi
 +...
 +</​file>​
 +
 +La commande **case**, permet de définir si la variable **TERM**, contient **xterm-color** ou si son contenu se termine par **-256color**.\\
 +Si c'est le cas, la variable **color_prompt** est valoriser avec **yes**.\\
 +...\\
 +Puis est testé, si la variable **color_prompt** contient **yes**.\\
 +Si oui, alors le prompt (définit dans la variable **PS1**) dispose des séquences d'​échappement de colorisation.\\
 +Sinon, il est définit sans.
 +
 +===== T2 - Configuration avec stty =====
 +
 +La commande **stty** (set tty) permet d'​afficher ou de modifier la configuration d'un terminal.
 +
 +L'​option **-a** (ou **<​nowiki>​--all</​nowiki>​**) de la commande **stty** permet de retourner la configuration du terminal utilisé :
 +
 +<code user>
 +stty -a
 +</​code><​code>​
 +speed 38400 baud; rows 24; columns 80; line = 0;
 +intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <​undef>;​
 +eol2 = <​undef>;​ swtch = <​undef>;​ start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R;
 +werase = ^W; lnext = ^V; discard = ^O; min = 1; time = 0;
 +-parenb -parodd -cmspar cs8 -hupcl -cstopb cread -clocal -crtscts
 +-ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl ixon -ixoff
 +-iuclc -ixany -imaxbel iutf8
 +opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
 +isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt
 +echoctl echoke -flusho -extproc
 +</​code>​
 +
 +La première ligne\\
 +''​speed 38400 baud; rows 24; columns 80; line = 0;''​\\
 +Indique :
 +
 +    * La vitesse de transition de l'​entrée et de la sortie du terminal.
 +    * Le nombre de ligne et de colonne de la sortie du terminal.
 +    * Et le numéro de la discipline de ligne.
 +
 +Puis nous trouvons la configuration des caractères de contrôle :\\
 +''​intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <​undef>;​ eol2 = <​undef>;​ swtch = <​undef>;​ start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R; werase = ^W; lnext = ^V; discard = ^O; min = 1; time = 0;''​.\\
 +Ainsi configuré :
 +
 +  * <​key>​C</​key>​+<​key>​c</​key>​ permet d’arrêter l'​exécution du processus du premier plan. Ou de mettre fin à l'​écriture d'une ligne de commande, sans l'​interprétée.
 +  * <​key>​C</​key>​+<​key>​\</​key>,​ émet le signal quit.
 +  * <​key>​C</​key>​+<​key>​d</​key>,​ envoie le signal de fin de fichier. Il indique la fin d'un flux. S'il est utilisé à l'​invite (au prompt) et qu'​aucune saisie ne soit effectuée, le signal est envoyé à l'​entrée du terminal. Ce qui a pour effet d'​indiquer la fin du flux de l'​entrée standard et donc de fermer le terminal. Puisque le terminal, sans son entrée n'a plus aucun intérêt.
 +  * <​key>​C</​key>​+<​key>​z</​key>,​ suspend l'​exécution du processus du premier plan, pour le placé en arrière plan.
 +  * <​key>​C</​key>​+<​key>​s</​key>,​ suspend les processus (en premier plan et en arrière plan) qui écrivent sur la sortie standard.
 +  * <​key>​C</​key>​+<​key>​q</​key>,​ reprend l'​exécution des processus suspendus par <​key>​C</​key>​+<​key>​s</​key>​.
 +  * <​key>​C</​key>​+<​key>?</​key>,​ efface le caractère précédent le curseur (équivalent à <​key>​← Retour Arrière</​key>​)
 +  * <​key>​C</​key>​+<​key>​u</​key>,​ "​coupe"​ du début de la ligne, jusqu'​au curseur. (La ligne entière, si le curseur est en fin de ligne.)
 +  * <​key>​C</​key>​+<​key>​w</​key>,​ "​coupe"​ du début d'un mot, jusqu'​au curseur. (Le mot entier, si le curseur est à la fin du mot.)
 +  * <​key>​C</​key>​+<​key>​r</​key>,​ effectue une recherche dans l'​historique.
 +
 +<​note>​
 +La commande **stty** ne permet pas de configurer tout les caractères de contrôle disponibles dans un terminal.\\
 +\\
 +En voici d'​autres très utiles :\\
 +\\
 +  * <​key>​C</​key>​+<​key>​a</​key>​ : Déplace le curseur en début de ligne (équivalent à <​key>​Début</​key>​).
 +  * <​key>​C</​key>​+<​key>​e</​key>​ : Déplace le curseur en fin de ligne (équivalent à <​key>​Fin</​key>​).
 +  * <​key>​C</​key>​+<​key>​k</​key>​ : Coupe tout ce qui est après le curseur.
 +  * <​key>​C</​key>​+<​key>​y</​key>​ : Colle (yank) ce qui a été coupé.
 +</​note>​
 +
 +Vient en suite les paramètres configurables. Tous les paramètres disponibles sont donnés. Ceux préfixés par le signe négatif (**-**) sont désactivés.
 +
 +Les paramètres de contrôle :\\
 +''​-parenb -parodd -cmspar cs8 -hupcl -cstopb cread -clocal -crtscts''​.
 +
 +Les paramètres d'​entrée :\\
 +''​-ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl ixon -ixoff -iuclc -ixany -imaxbel iutf8''​.
 +
 +Les paramètres de sortie :\\
 +''​opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0''​.
 +
 +Et les paramètres locaux :\\
 +''​isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt echoctl echoke -flusho -extproc''​.
 +
 +Pour une description des paramètres,​ voir la page du manuel de la commande **stty**(([[https://​fr.manpages.org/​stty|(manpages.org)(fr) stty (1) : Modifier et afficher la configuration de la ligne de terminal]])) avec la commande ''​man stty''​.
 +
 +----
 +
 +Sans option la commande **stty** retourne la vitesse de transmission,​ le numéro de la discipline de ligne. Et la différence entre une configuration saine (sane en anglais) et la configuration actuelle.
 +
 +<code user>
 +stty
 +</​code><​code>​
 +speed 38400 baud; line = 0;
 +-brkint -imaxbel iutf8
 +</​code>​
 +
 +Nous remarquons qu'à l'​ouverture d'un terminal, sa configuration à déjà été modifiée.
 +
 +  * **-brkint**,​ indique que le paramètre **brkint** (le « break » provoque un signal d'​interruption) est désactivé.
 +  * **-imaxbel**,​ indique que le paramètre **imaxbel** (émettre un bip sonore et ne pas vider un tampon d'​entrée plein lors de l'​arrivée d'un caractère) est désactivé.
 +  * Le paramètre **iutf8** (supposer que les caractères d'​entrées sont codés en UTF-8) est activé.
 +
 +----
 +
 +L'​option **-g** (ou **<​nowiki>​--save</​nowiki>​**) de la commande **stty** retourne la configuration actuel du terminal dans un format compréhensible par **stty**.
 +
 +<code user>
 +stty -g
 +</​code><​code>​
 +4500:​5:​bf:​8a3b:​3:​1c:​7f:​15:​4:​0:​1:​0:​11:​13:​1a:​0:​12:​f:​17:​16:​0:​0:​0:​0:​0:​0:​0:​0:​0:​0:​0:​0:​0:​0:​0:​0
 +</​code>​
 +
 +C'est très pratique pour sauvegarder la configuration du terminal,
 +  * Dans un fichier avec ''​stty -g > fichier''​
 +    * Restauré avec ''​stty $(cat fichier)''​
 +  * Ou dans une variable avec ''​var=$(stty -g)''​
 +    * Restauré avec ''​stty $var''​
 +
 +Sauvegardons notre configuration dans la variable **stty**
 +
 +<code user>
 +stty=$(stty -g)
 +echo stty=$stty
 +</​code><​code>​
 +stty=4500:​5:​bf:​8a3b:​3:​1c:​7f:​15:​4:​0:​1:​0:​11:​13:​1a:​0:​12:​f:​17:​16:​0:​0:​0:​0:​0:​0:​0:​0:​0:​0:​0:​0:​0:​0:​0:​0
 +</​code>​
 +
 +Voila qui est bien fait :-)\\
 +Jouons un peu avec les paramètres.
 +
 +----
 +
 +Le paramètre de sortie **onlcr** indique au terminal de convertir un saut de ligne en un saut ligne + un retour chariot.\\
 +... Désactivons le :
 +
 +<code user>
 +stty -onlcr
 +</​code>​
 +
 +Demandons l'​affichage de la différence avec une configuration saine :
 +
 +<code user>
 +stty
 +</​code><​code>​
 +speed 38400 baud; line = 0;
 +                           ​-brkint -imaxbel iutf8
 +                                                 ​-onlcr
 +</​code>​
 + 
 +8-O Le saut de ligne ne dispose plus de retour chariot.\\
 +Réactiver le paramètre permet de revenir à l'​état normal.
 +
 +<code user>
 +stty onlcr
 +</​code>​
 +
 +----
 +
 +Continuons à jouer et grimpons d'un niveau en désactivant le paramètre local **echo**.
 +
 +<code user>
 +stty -echo
 +</​code>​
 +
 +Puis affichons la différence avec la configuration saine :
 +
 +<code user>
 +stty
 +</​code><​code>​
 +speed 38400 baud; line = 0;
 +-brkint -imaxbel iutf8
 +-echo
 +</​code>​
 +
 +LOL La saisie ce fait en aveugle.\\
 +Le paramètre **echo** fait l'​affichage des caractères en entrée. Alors le désactiver...\\
 +Réactiver le paramètre permet de revenir à l'​état normal.
 +
 +<code user>
 +stty echo
 +</​code>​
 +
 +----
 +
 +Les paramètres spéciaux **rows** et **cols** permettent d'​indiquer au noyau le nombre de ligne et de colonne que dispose le terminal.\\
 +
 +Commençons par récupérer les valeurs actuelles, retournées par le paramètre **size** :
 +
 +<code user>
 +stty size
 +</​code><​code>​
 +24 80
 +</​code>​
 +<code user>
 +s=$(stty size) # Récupère le retour de stty size dans la variable s
 +
 +r=${s% *} # Mémorise le nombre de ligne dans la variable r
 +c=${s#* } # Mémorise le nombre de colonne dans la variable c
 +
 +echo "​Nombre de ligne : $r"
 +echo "​Nombre de colonne : $c"
 +
 +unset s # Destruction de la variable s
 +</​code><​code>​
 +Nombre de ligne : 24
 +Nombre de colonne : 80
 +</​code>​
 +
 +Et modifions en le nombre :
 +
 +<code user>
 +stty rows 10 cols 40
 +man stty
 +</​code><​code>​
 +STTY(1Commandes de l'​utilisateuSTTY(1)
 +
 +NOM
 +       ​stty ​ - Modifier et afficher la
 +       ​configuration de  la  ligne  de
 +       ​terminal
 +
 +SYNOPSIS
 +       ​stty ​   [-F    PÉRIPHÉRIQUE ​  |
 +line 1 (press h for help or q to quit)
 +</​code>​
 +
 +Appuyons sur la touche <​key>​q</​key>​ pour quitter.
 +Et restaurons les valeurs initiales :
 +
 +<code user>
 +stty rows $r cols $c
 +
 +unset r c # Destruction des variables r et c
 +</​code>​
 +
 +----
 +
 +La commande **stty** dispose de paramètre combiné (qui regroupent plusieurs paramètres en un seul).
 +
 +Par exemples :\\
 +Le paramètre **raw** permet de passer le terminal en mode brut.\\
 +La __discipline de ligne__ passe alors en __mode caractère__ et aucune modification n'est appliquée ni à l'​entrée,​ ni à la sortie.
 +
 +<code user>
 +stty raw
 +stty
 +</​code><​code>​
 +speed 38400 baud; line = 0;
 +                           min = 1; time = 0;
 +                                             ​-brkint -icrnl -imaxbel
 +                                                                    -opost
 +                                                                          -isig
 +-icanon
 +</​code>​
 +
 +Remarquons que le retour chariot n'est plus ajouté au saut de ligne. Cela n'est pas obtenu comme plus haut, par la négation du paramètre **onlcr** (**-onclcr**). Mais par la négation du paramètre **opost** (effectuer un post-traitement de la sortie).
 +
 +Pour restaurer notre terminal dans son état d'​origine,​ nous pouvons utiliser le paramètre **sane** (traduction : saine) avec les paramètres donnés plus haut avec la commande **stty** sans option ni paramètre.
 +
 +<code user>
 +stty sane -brkint -imaxbel iutf8
 +</​code>​
 +
 +<​note>​
 +Nous aurions pu aussi utiliser la sauvegarde que nous avons réaliser dans la variable **stty**\\
 +\\
 +<code user>
 +stty $stty
 +</​code>​
 +</​note>​
 +
 +Le mode brut (raw) empêche aussi l'​utilisation de certaines touches de contrôle.\\
 +Comme par exemple le caractère d'​interruption (<​key>​C</​key>​+<​key>​c</​key>​) qui termine le processus du premier plan.
 +
 +Pour mettre cela en évidence, nous allons utiliser une boucle qui va afficher les secondes pendant 10 secondes.\\
 +Pendant son déroulement nous l'​interrompons en appuyant sur les touches <​key>​C</​key>​+<​key>​c</​key>​.
 +
 +<code user>
 +(for t in {1..10}; do echo $t; sleep 1; done)
 +</​code><​code>​
 +1
 +2
 +3
 +^C
 +</​code>​
 +
 +<​note>​
 +Nous exécutons notre boucle **for** entre parenthèse **(**...**)**,​ pour l'​exécuter dans processus fils.\\
 +Ainsi son processus se termine en même temps que la boucle.\\
 +Et la variable **t** n'​existe pas, (puisque qu'​elle à été initialisée dans le processus fils).
 +</​note>​
 +
 +... Cela fonctionne, testons en mode brut.
 +
 +<code user>
 +stty raw
 +(for t in {1..10}; do echo $t; sleep 1; done)
 +</​code><​code>​
 +1
 + 2
 +  3
 +   ^C4
 +      5
 +       6
 +        ^C7
 +           8
 +            9
 +             10
 +</​code>​
 +
 +Cela ne fonctionne plus.\\
 +C'est le paramètre local **-isig** (la négation de **isig**), apporté par le paramètre combiné **raw** qui fait cela.
 +
 +Restaurons notre terminal avec sa configuration d'​origine.
 +
 +<code user>
 +stty $stty
 +
 +unset stty # Destruction de la variable stty
 +</​code>​
 +===== T3 - La commande tty =====
 +
 +Dans un système GNU/Linux, un appareil (un périphérique) est caractérisé (accessible),​ par __un fichier spécial__, aussi nommé __fichier de périphérique__ (ou plus communément,​ __périphérique__).\\
 +Ces fichiers sont placés dans le répertoire ''/​dev''​ et ses sous-répertoires (dev pour device en anglais, appareil en français).
 +
 +**__Les périphériques des terminaux virtuels__**,​\\
 +Sont nommés **tty<​n>​** (avec <n>, un entier décimal, de 1 à 63).\\
 +Ils sont situés dans le répertoire ''/​dev''​ (''/​dev/​tty<​n>''​).\\
 +Par exemples : ''/​dev/​tty1'',​ ''/​dev/​tty2'',​ etc.
 +
 +<​note>​
 +Le fichier périphérique ''/​dev/​tty0''​ est particulier,​ il caractérise toujours le terminal virtuel qui est affiché.\\
 +(Actuellement le 7em, puisque nous affichons l'​interface graphique.)\\
 +Son usage est présenté dans la section [[#​t7_-_les_peripheriques_tty_et_tty0|T7 - Les périphériques tty et tty0]].
 +</​note>​
 +
 +**__Les périphériques des terminaux fenêtre ou connecté (les pseudo-terminaux)__**\\
 +Sont nommés **pts<​n>​** (avec <n> un entier décimal).\\
 +Leurs fichiers sont numérotés dans le répertoire ''/​dev/​pts''​ (''/​dev/​pts/<​n>''​).\\
 +Par exemples : ''/​dev/​pts/​0'',​ ''/​dev/​pts/​1'',​ etc.
 +
 +__**La commande tty**__,
 +
 +Retourne le chemin du fichier périphérique du terminal utilisé par la commande.
 +
 +<​note>​
 +La commande **tty**, ne doit pas être confondue avec le périphérique ''/​dev/​tty''​.\\
 +\\
 +Le fichier périphérique ''/​dev/​tty''​ est particulier,​ il caractérise toujours le terminal utilisé, qu'il soit virtuel, fenêtre ou connecté.\\
 +Son usage est présenté dans la section [[#​t7_-_les_peripheriques_tty_et_tty0|T7 - Les périphériques tty et tty0]].\\
 +\\
 +Le chemin de la commande **tty** est ''/​usr/​bin/​tty''​.\\
 +
 +<code user>
 +which tty
 +</​code><​code>​
 +/​usr/​bin/​tty
 +</​code>​
 +</​note>​
 +
 +<code user>
 +tty
 +</​code><​code>​
 +/dev/pts/0
 +</​code>​
 +
 +La commande nous indique que le terminal que nous utilisons, est le périphérique ''/​dev/​pts/​0''​.\\
 +Le chemin retourné montre que les terminaux fenêtres sont des pseudo-terminaux.
 +
 +Nous venons de redémarrer ; Avons  ouvert qu'un seul terminal fenêtre ; Et aucun PC distant n'est connecté au notre.\\
 +Alors le système n'a créé qu'un seul pseudo-terminal (celui que notre terminal utilise). Il l'a numéroté (et nommé) 0, le premier nombre disponible.\\
 +Mais, nous y reviendrons...
 +
 +----
 +
 +<note warning>
 +Par la suite, nous allons ouvrir plusieurs terminaux.\\
 +Pour mieux nous situer, nous allons insérer dans l'​invite de notre interpréteur de commande (le prompt), le nom du périphérique utilisé.\\
 +\\
 +L'​invite (le prompt) affichée, est le retour de l'​interprétation du contenu de la variable **PS1**, définit dans le fichier ''​~/​.bashrc''​.\\
 +\\
 +Nous pourrions modifier cette variable directement dans notre terminal, mais la modification ne serait pas disponible pour les autres terminaux que nous ouvrirons.\\
 +Pour qu'​elle le soit, elle doit être écrite dans le fichier ''​~/​.bashrc''​.\\
 +\\
 +**__Rappel__ :** A la section [[#​t0-tutos-preparatifs|T0 - Tutos, préparatifs]],​ nous avons sauvegardé le fichier ''​~/​.bashrc''​ afin de pouvoir le restaurer plus tard.
 +</​note>​
 +
 +Nous n'​allons pas insérer le chemin complet du périphérique dans l'​invite,​ mais son nom simplifié :
 +
 +  - La commande **tty** permet de récupérer le chemin du périphérique.
 +  - De ce chemin (''/​dev/​tty<​n>''​ ou ''/​dev/​pts/<​n>''​),​ est formé le nom du périphérique (tty<​n>​ ou pts<​n>​).\\
 +  - Puis, le nom obtenu est passé en majuscule, en étant ajouté au début du contenu de la variable PS1.
 +
 +<​note>​
 +L'​opérateur de redirection **>>​** permet d'​ajouter la sortie standard à la fin d'un fichier.\\
 +\\
 +Placer entre guillemets, simple ou double, une chaîne de caractère peut s'​étendre sur plusieurs lignes.\\
 +\\
 +Nous utilisons ici, les guillemets simples, pour que la chaîne de caractère ne soit pas interprété par bash.
 +</​note>​
 +
 +<code user>
 +echo '
 +# Insère le nom du terminal dans PS1
 +n=$(tty) # Récupère le chemin du périphérique dans la variable n
 +n=${n#/​dev/​} #​ Supprime /dev/ du chemin
 +n=${n/​\//​} #​ Supprime le / restant (si pseudo-terminal)
 +PS1=${n^^}:​$PS1 #​ Ajoute le nom en majuscule à PS1
 +unset n # Destruction de n
 +' >> ~/.bashrc
 +</​code>​
 +
 +Pour que cette modification soit prise en compte, il est nécessaire de réinterpréter le fichier ''​~/​.bashrc'',​ avec la commande **.** (point) ou **source**.
 +
 +<​note>​
 +La commande **.** (synonyme de **source**) est une commande interne de l'​interpréteur bash.\\
 +\\
 +Elle ne doit pas être confondue avec l'​usage du point dans les chemins de systèmes de fichiers :\\
 +\\
 +  * Le point seul **.**  ou **./** en début du chemin, indiquent le répertoire courant.
 +  * Un nom de fichier (ou de dossier) débutant par un point (**.<​nom>​**) , indique que cet élément est caché (par exemple ''​.bashrc''​).
 +</​note>​
 +
 +<code user>
 +. ~/.bashrc
 +</​code><​code>​
 +PTS0:​DF@pc24:​~
 +</​code>​
 +
 +Yes ! Maintenant, nous ne pouvons plus nous perdre.\\
 +Nous allons maintenant nous intéresser aux terminaux virtuels.
 +
 +===== TX - Retour à l'​état initial =====
 +
 +... Nous arrivons à la fin de cette suite de tutos.\\
 +Nous remettons ici le système, tel qu'il était lorsque nous avons commencé notre voyage.
 +
 +Le fichier ''​~/​.bashrc''​ **doit être restauré**.
 +
 +<code user>cd
 +cp -v ~/​DF-tuto/​.bashrc .
 +</​code><​code>​
 +'​DF-tuto/​.bashrc'​ -> '​./​.bashrc'​
 +</​code>​
 +
 +Et le répertoire ''​~/​.DF-tuto''​ **supprimé**.
 +
 +<code user>rm -vrf ~/DF-tuto
 +</​code><​code>​
 +'​DF-tuto/​.bashrc'​ supprimé
 +répertoire '​DF-tuto'​ supprimé
 +</​code>​
 +
 +Voila notre voyage est terminé.\\
 +La compagnie Debian-Facile vous remercie,\\
 +Et espère que vous avez réalisé un bon voyage.
 +8-)
atelier/chantier/terminaux-et-consoles-explications.1682586876.txt.gz · Dernière modification: 27/04/2023 11:14 par agp91 · Actuellement bloqué par: Titouxt31

Pied de page des forums

Propulsé par FluxBB