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 →
Ci-dessous, les différences entre deux révisions de la page.
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 [14/06/2023 12:10] agp91 Correction dans la section [Tuto] et sous sections |
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 noyau, maté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-+ | +---+ | D | | | +----------+ | | | +-------+ | |
- | | |Souris|-|--|->| D | | D |<=|=>| |<=|=>|/dev/pts/1|<=>|shell| | | + | | +------+ | | | | | D |<=|==|=>|/dev/pts/1|<=|=|=|====>| shell | | |
- | | +------+ | | | R | | D | | +-------+ | +----------+ +-----+ | | + | | |Souris|-|--|->| D | | L | | | +----------+ | | | +-------+ | |
- | |+-------+ | | | I | | L | | +------+ | | | | + | | +------+ | | | 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) | | | +---------+ | |
- | | | D |<=|=>| |<==|========|=>|sshd@pts1| | | + | | | |<=|=>| |<==========|=|=>|sshd@pts1|<=|==//=> Bob |
- | | | D | | +------+ | | +---------+ | | + | | | | | +------+ | | +---------+ | |
- | | | L | | +-------+ | +----------+ +-----+ | | + | | | D | | +--Esclave-(PTS)-+ | | | |
- | | | |<=|=>| |<=|=>|/dev/pts/0|<=>|shell| | | + | | | D | | | +----------+ | | | +-----+ | |
- | | +---+ | |esclave| | +----------+ +-----+ | | + | | | L |<=|==|=>|/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 | | +-----+ +-----------+ +---+ | L | | | + | ||Clavier|-|--|->| E | | u | | L | | +---------+ | | +---+ | | +----------+ | +-----+ | D | | |
- | |+-------+ | | | 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 |<====>| D | | |
- | | +------+ | | | R | | D | +-----+ +----------+ +---+ | | +----------+ | +-----+ | D | | | + | | +------+ | | | R | | D | +----------+ | +---+ | | +----------+ | +-----+ | D | | |
- | |+-------+ | | | I | | D | | | | | | D | | | + | |+-------+ | | | I | | D | | | | +-----+ | +----PTS----+ | L | | |
- | ||Clavier|-|--|->| V | | L | +-----+ | +-----+ | | +-----+ +-----------+ +-----+ | 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. | ||
- | ===== Tuto ===== | + | ===== T0 - Tutos, préparatifs ===== |
- | Ce tuto propose un voyage initiatique dans le monde des terminaux GNU/Linux.\\ | + | Voila le moment où nous devons expliquer par la pratique. |
- | Après la présentation de la variables d'environnement **TERM** et de la commande **stty**, il mettra en évidences par la pratique la théorie donnée plus haut. | + | |
- | Dans ce tuto, nous utilisons les termes suivants : | + | ==== 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) ^ | ^ Désignations ^ Noms ^ Périphériques (fichiers) ^ | ||
Ligne 668: | Ligne 791: | ||
|Avec **N**, le numéro du terminal (un décimal entier).||| | |Avec **N**, le numéro du terminal (un décimal entier).||| | ||
- | Nous utilisons ici un PC nommé **pc24**, disposant d'un système Debian GNU/linux 11 (Bullseye).\\ | + | ---- |
+ | |||
+ | Nous utilisons ici d'un PC disposant d'un système Debian GNU/linux 11 (Bullseye).\\ | ||
Le bureau graphique **xfce4** y a été installé. | Le bureau graphique **xfce4** y a été installé. | ||
Ligne 674: | Ligne 799: | ||
Ici, nous utilisons l'utilisateur **DF**, pour nous connecter. | Ici, nous utilisons l'utilisateur **DF**, pour nous connecter. | ||
- | Une fois connecté, nous sommes sous le bureau d'**Xfce**.\\ | + | Une fois connecté, nous sommes sous le bureau d'**Xfce**. |
Nous lançons une **fenêtre de terminal** (ici, **xfce4-treminal**).\\ | Nous lançons une **fenêtre de terminal** (ici, **xfce4-treminal**).\\ | ||
... L'interpréteur de commande **bash** y est exécuté. | ... L'interpréteur de commande **bash** y est exécuté. | ||
<note> | <note> | ||
- | Les fichiers de configuration de bash de l'utilisateur **DF**, n'ont pas été modifiés. | + | 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. | |
- | * Les fichiers **~/.profile** et **~/.bashrc**, sont les fichiers donnés par défaut par un système Debian 11 GNU/Linux. | + | |
- | * Et le fichier **~/.bash_aliases**, n'existe pas. | + | |
</note> | </note> | ||
- | <note warning> | + | ==== Sauvegarde ==== |
- | Au court de ce tuto, nous modifierons les fichiers :\\ | + | |
- | \\ | + | Plusieurs fois, nous modifierons notre fichier ''.bashrc'' : |
- | * **~/.bashrc** afin de : | + | |
- | * Décommenter la variable de colorisation **force_color_prompt**. | + | * 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). |
- | * Modifier la variable de l'interpréteur **PS1** définissant l'invite de l'interpréteur (le **prompt**). Pour y ajouter le nom du terminal utilisé. | + | * 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. |
- | * Nous ajouterons aussi 2 **alias** dans le fichier **~/.bash_aliases** pour nous simplifier 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. | Ainsi ces modifications seront disponibles pour tous shells bash que nous exécuterons, lorsque nous ouvriront un nouveau terminal. | ||
- | Nous allons donc, sauvegarder ces deux fichiers, dans le répertoire **DF-tuto**, que nous créons dans notre répertoire personnel.\\ | + | <note>Avant de modifier le fichier ''~/.bashrc'', nous devons en réaliser une sauvegarde.\\ |
- | Ainsi nous pourrons **les restaurer à la fin du tuto**. | + | 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> | </note> | ||
Ligne 705: | Ligne 834: | ||
# Copie du fichier .bashrc dans DF-tuto | # Copie du fichier .bashrc dans DF-tuto | ||
cp -v .bashrc DF-tuto | cp -v .bashrc DF-tuto | ||
- | |||
- | # Si pour votre utilisateur, le fichier .bash_aliases existe, copie le dans DF-tuto | ||
- | [ -f .bash_aliases ] && cp -v .bash_aliases DF-tuto | ||
</code><code> | </code><code> | ||
mkdir: création du répertoire 'DF-tuto' | mkdir: création du répertoire 'DF-tuto' | ||
Ligne 714: | Ligne 840: | ||
Voila qui est bien fait ;-) | 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é. | 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é. | ||
- | Nous installerons aussi des programmes avec la commande **apt-get**((La commande **[[doc:systeme:apt:apt-get|apt-get]]** permet d'installer, supprimer ou mettre à jour les programmes d'un système Debian GNU/Linux.)) pour montrer les capacités graphique des terminaux.\\ | + | Le mot de passe root doit donc être connu. |
- | Seront installés : | + | |
- | + | ||
- | * **Fbi** un visualiseur d'image pour terminal virtuel. | + | |
- | * **Imagemagick** pour convertir les formats d'images. | + | |
- | * Et les lecteurs multi-médias **mplayer** et **vlc**, pour lire des vidéos. | + | |
- | + | ||
- | Ces programmes seront supprimés à la fin du tuto. | + | |
- | + | ||
- | Pour installer correctement des programmes, il nous est recommandé, de mettre à jour le système. | + | |
- | + | ||
- | <code root> | + | |
- | apt-get update && apt-get upgrade | + | |
- | </code> | + | |
- | ==== Le type $TERM ==== | + | =====T1 - Le type $TERM ===== |
La variable d'environnement **TERM** contient le type du terminal utilisé. | La variable d'environnement **TERM** contient le type du terminal utilisé. | ||
Ligne 976: | Ligne 1091: | ||
Sinon, il est définit sans. | Sinon, il est définit sans. | ||
- | ==== Configuration avec stty ==== | + | ===== T2 - Configuration avec stty ===== |
La commande **stty** (set tty) permet d'afficher ou de modifier la configuration d'un terminal. | La commande **stty** (set tty) permet d'afficher ou de modifier la configuration d'un terminal. | ||
Ligne 1282: | Ligne 1397: | ||
unset stty # Destruction de la variable stty | unset stty # Destruction de la variable stty | ||
</code> | </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. | 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-) |