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 Les deux révisions suivantes
atelier:chantier:terminaux-et-consoles-explications [13/06/2023 21:30]
agp91 Ajout dans la sous-section [Tuto/Le type $TERM]
atelier:chantier:terminaux-et-consoles-explications [13/06/2023 22:25]
agp91 [Tuto]
Ligne 966: Ligne 966:
 Si oui, alors le prompt (définit dans la variable **PS1**) dispose des séquences d'​échappement de colorisation.\\ 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. Sinon, il est définit sans.
 +
 +==== 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>​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>?</​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|(fr.manpages.org) 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 **--save**) 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 fonction, 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>​
 +
 +Nous allons maintenant nous intéresser aux terminaux virtuels.
  
atelier/chantier/terminaux-et-consoles-explications.txt · Dernière modification: 28/04/2024 07:10 par agp91

Pied de page des forums

Propulsé par FluxBB