Page suivante Page précédente Table des matières

16. Utilisation du terminal

16.1 Introduction

Cette section parle du contrôle de l'interface terminal-ordinateur et/ou du changement de configuration du terminal pendant son utilisation. Elle explique (ou pointe vers des explications sur) la manière dont l'utilisateur d'un terminal peut contrôler et inspecter l'interface, et comment utiliser diverses commandes fournies par le pilote de périphérique. Elle n'explique pas comment utiliser les nombreuses applications, shells ou la plupart des utilitaires Linux. Deux commandes utilisées couramment sur un terminal sont :

16.2 Démarrer le terminal

Vous devriez être capable de basculer l'interrupteur du terminal, appuyer sur la touche "retour" (ou "entrée") et obtenir une invite de login. Tapez ensuite votre nom de login et votre mot de passe quand on vous le demande. Si rien ne se passe, assurez-vous que l'ordinateur hôte va bien. Si l'ordinateur hôte est éteint (pas de courant) ce que vous tapez sur le clavier du terminal peut apparaître à l'écran puisque les broches de transmission et de réception sur l'ordinateur peuvent être reliées ensemble ce qui fait que les caractères sont retournés par un ordinateur "éteint". Si vous ne pouvez pas vous logger quand l'ordinateur fonctionne, voyez résolution des problèmes.

16.3 Pilote de périphérique du terminal

En tapant sur la ligne de commande, le shell (tel que le shell Bash) lit ce que vous tapez et y réagit. Ce que vous tapez passe d'abord par la partie pilote de terminal de votre système d'exploitation. Ce pilote peut traduire certains caractères (comme changer le caractère "retour" généré par la touche "retour" en un caractère "nouvelle ligne" pour les fichiers Linux). Il reconnaît aussi certains codes de contrôle que vous pourriez taper au clavier comme ^C pour interrompre l'exécution d'un programme. Il retourne normalement ce que vous tapez à l'écran. On peut utiliser stty pour configurer le comportement de ce terminal, ce qui comprend l'arrêt de tout ou partie de cette fonctionnalité.

16.4 Problèmes avec les éditeurs

Il peut y avoir quelques problèmes pendant l'utilisation d'emacs et de vi sur certains terminaux.

Emacs et ^Q

Si le contrôle de flux logiciel est présent, la commande ^Q dans Emacs bloquera l'affichage (NdT : n'est-ce pas plutôt la commande ^S ??). La solution est de relier cette commande à une autre touche dans le fichier de configuration de Emacs.

Vi et les touches curseur

Vi utilise la touche ESC comme commande pour sortir du mode d'insertion. Si on appuie sur une touche fléchée (touche de curseur) une séquence d'échappement (démarrant par le caractère ESC) est envoyée à l'hôte. Vi doit faire la différence entre ces deux significations d'ESC. Un vi intelligent (comme vim) doit être capable de détecter la différence en regardant la touche qui suit la touche ESC.

Sur les terminaux VT on peut faire en sorte que la touche flèche gauche envoie soit ESC [ D soit ESC O D. Les autres touches fléchées sont similaires mais utilisent A, B et C au lieu de D. Si vous avez des problèmes, choisissez ESC [ D puisque le "O" dans l'autre alternative peut être interprétée comme une commande d'"ouverture de ligne". Le "[" devrait être interprété par vi pour dire qu'une touche fléchée a été pressée. ESC [ D sera envoyé à condition que le "mode application touches fléchées" (Cursor Key Application Mode) n'ait pas été activé. ESC [ D est normalement la valeur par défaut donc tout devrait être correct. Sauf que de nombreux termcaps contiennent une chaîne (pas la chaîne d'initialisation) qui positionne ce que vous voulez éviter : "Mode Application". Les éditeurs peuvent envoyer cette chaîne au terminal quand ils démarrent. Là, vous avez des problèmes.

Cette chaîne possède le code termcap "ks" (smkx dans terminfo) qui veut dire activer les touches de fonctions (et similaires, incluant les touches fléchées). Une application active ces touches en envoyant la chaîne "ks" au terminal. La personne qui a écrit le termcap a conclu que si une application voulait activer ces touches, elles devraient être mises en "Mode Application" puisque c'est une "application", mais vous ne voulez pas cela.

La console Linux n'a pas de chaîne "ks" pour que vous ne tombiez pas dans ce piège sur la console. Pour d'autres terminaux vous aurez besoin d'éditer termcap (ou terminfo) ou d'utiliser une autre entrée termcap. Vous devez modifier non seulement la chaîne "ks" mais aussi les définitions termcap de ce qu'elle envoie : kd, kl, kr, ku. Lancez ensuite tic pour l'installer.

Pour vim (VI aMélioré) il y a une manière de le configurer pour qu'il fonctionne correctement avec ESC O D (pour que vous ne deviez pas éditer termcap) : cherchez "vt100-cursor-keys" dans l'aide de vim. Vous pouvez lancer "gitkeys" et ensuite appuyer sur les touches fléchées pour voir ce qu'elles envoient mais on peut les configurer pour qu'elles envoient autre chose quand vous êtes dans un éditeur.

16.5 L'affichage se bloque (terminal bloqué)

Les symptômes d'un terminal bloqué sont que ce que vous tapez ne s'affiche pas sur le terminal (ou dans certains cas s'affiche mais ne fait rien). Si ce que vous tapez est invisible (ou ne fait rien) tapez ^Q pour relancer le flux (si le contrôle de flux l'a stoppé). Le blocage peut aussi venir de :
envoi d'un binaire au terminal ou un programme s'est terminé de façon anormale
Si vous n'avez fait ni l'un ni l'autre, votre programme peut alors être boggé ou vous avez intéragi de manière fatale avec lui.

Si vous voulez quitter le programme que vous avez lancé et que vous ne pouvez pas le faire par les méthodes normales (certains programmes ont des touches spéciales que vous devez taper pour sortir) essayez de le tuer à partir d'un autre terminal en utilisant "top" ou "kill". Si le processus refuse de s'arrêter, vous pouvez essayer de lui envoyer un signal 9 à partir de top qui devrait le forcer à s'arrêter. Le type de sortie forcée "9" peut laisser certains fichiers temporaires qui traînent ainsi qu'une interface corrompue. Tuer le shell de login devrait relancer getty avec une nouvelle invite de login.

Les personnes débutantes sous Linux peuvent sans le faire exprès appuyer sur Ctrl-S (^S) (ou la touche "Arrêt Défil") qui bloque l'écran de manière mystérieuse (bien que ce soit ce que cette touche est supposée faire si vous utilisez le contrôle de flux logiciel). Pour retrouver une interaction normale avec l'écran, pressez Ctrl-Q (^Q). Notez que tout ce qui est tapé durant le "blocage" est exécuté mais vous n'en verrez rien avant d'appuyer sur ^Q. Ainsi quand il est bloqué, ne tapez rien de spécial qui pourrait effacer des fichiers etc. L'un des arguments en faveur du contrôle de flux matériel est qu'il empêche de tels blocages.

16.6 Interface du terminal corrompue

Cela inclut le cas de l'"affichage bloqué" = "terminal stoppé net" de la section précédente.

Symptômes

Quand l'affichage ne semble pas correct, ou quand ce que vous tapez ne s'affiche pas correctement (si même un affichage se produit), ou que rien ne se passe quand vous tapez une commande, il y a des chances que vous soyez en face d'une corruption de l'interface du terminal. Dans les cas rares où la partie matérielle du port série elle-même serait corrompue, le seul remède peut être de basculer l'interrupteur (éteindre le PC et redémarrer). Le problème peut provenir de choses telles qu'un bogue dans le programme que vous utilisez, une panne matérielle (ce qui inclut un défaut matériel obscur avec lequel vous pouvez normalement vivre) ou peut-être une configuration incorrecte. Si tout fonctionnait correctement mais que ça va soudainement mal, il se peut que l'interface ait été corrompue par une de vos actions. Vous pouvez avoir fait l'une de ces trois erreurs :

Envoyer des données binaires au terminal

Votre terminal modifiera ses caractéristiques si on lui envoie certaines séquences d'échappement ou des caractères de contrôle. Si vous essayez par inadvertance d'afficher un fichier binaire, il peut contenir par hasard de telles séquences qui peuvent placer votre terminal dans un mode de fonctionnement étrange voire le rendre inutilisable. Visualisez ou éditez toujours un fichier binaire avec des programmes faits à cet effet pour que cela n'arrive pas. La plupart des éditeurs et des afficheurs manipuleront les binaires de la bonne manière afin de ne pas corrompre l'interface. Certains peuvent afficher un message vous avertissant qu'ils ne peuvent éditer du binaire. Par contre, l'utilisation de "cat ...." ou "cp .... /dev/tty.." où .... est un fichier binaire enverra le binaire au terminal et risque fortement de générer des problèmes.

La corruption peut aussi arriver en utilisant un programme de communication où un ordinateur distant peut envoyer des données binaires à l'écran. Il y a de nombreuses autres façons pour lesquelles ces problèmes peuvent arriver, alors soyez-y préparé. Même un fichier qu'on prend pour un fichier ASCII peut contenir des codes de contrôle indésirables.

Pour résoudre ce problème, ré-initialisez le terminal. Vous pouvez essayer de taper soit "reset" soit "setterm -reset" (bien que vous ne puissiez pas voir ce que vous tapez). Ceci enverra la chaîne de ré-initialisation à partir de l'entrée du terminal dans la base terminfo. Si la configuration correcte a été sauvée à l'intérieur du terminal, alors l'appui sur certaine(s) touche(s) (peut-être en mode de configuration) peut retrouver ce paramétrage. Vous voudrez alors ensuite encore utiliser "reset" pour envoyer la chaîne d'initialisation si vous l'utilisez pour configurer votre terminal.

Terminer un programme de façon anormale

De grandes applications (comme des éditeurs) utilisent souvent les commandes stty (ou autres) dans leur code pour modifier de manière temporaire la configuration stty pendant que vous utilisez ce programme. Cela peut mettre le pilote de périphérique en mode "brut" pour que chaque caractère que vous tapez aille directement à l'application. L'écho de retour que fait le pilote est désactivé pour que tout ce que vous voyez à l'écran vienne directement de l'application. Ainsi de nombreuses commandes de contrôle (comme ^C) peuvent ne pas fonctionner dans certaines applications.

Quand vous quittez de telles applications, celle-ci remet d'abord en place les paramètres stty aux valeurs qu'ils avaient avant le démarrage de l'application. Si vous quittez le programme de manière anormale (vous pouvez deviner que ça s'est passé ainsi quand ce que vous tapez ne s'affiche plus à l'écran) vous risquez d'être encore en mode "brut" sur la ligne de commande.

Pour sortir du mode brut et revenir aux paramètres stty normaux, tapez "stty sane". Cependant, vous devez taper ceci juste après un "retour" et le terminer par un "retour". Mais l'appui sur la touche "retour" ne donne pas le résultat escompté puisque le code "retour" n'est plus traduit en caractères nouvelle ligne que le shell attend. Tapez donc simplement nouvelle ligne (^J) à la place de "retour". L'interface de terminal "sane" peut ne pas être exactement la même que d'habitude mais elle fonctionne en général. "stty sane" peut aussi être utile pour sortir d'une interface corrompue par d'autres causes.

16.7 Caractères (de contrôle) spéciaux

Un certain nombre de caractères de contrôle que vous pouvez taper au clavier sont "attrapés" par le pilote de terminal et effectuent diverses tâches. Pour voir ces commandes de contrôle tapez : stty -a et regardez les lignes 2 à 4. Elles sont expliquées de manière vague dans les pages de manuel de stty. On peut modifier les caractères ou les désactiver en utilisant la commande stty. Ainsi vos caractères de contrôle peuvent différer de ceux décrits ci-dessous. On les utilise pour l'édition de la ligne de commande, l'interruption, le défilement et pour se déplacer sur le caractère suivant de manière transparente.

Édition de la ligne de commande

Alors que le pilote de terminal possède quelques commandes pour l'édition de la ligne de commande, certains shells possèdent un vrai éditeur intégré (comme "readline" dans le shell Bash). Un tel éditeur est normalement activé par défaut donc vous n'avez besoin de rien faire pour l'activer. S'il est disponible vous ne devez pas apprendre les commandes suivantes bien qu'elles fonctionnent souvent en plus de l'éditeur de lignes de commande. Les plus importantes à apprendre sont ^C (interruption), ^D et comment arrêter le défilement.

Interruption (et Quit, Suspend, EOF, Flush)

Défilement

Si ce que vous désirez voir défile hors du bas de l'écran, vous pouvez empêcher cela en envoyant un signal d'arrêt "stop" (^S ou Xoff) à l'hôte (à condition que le contrôle de flux Xon-Xoff soit activé). Envoyez un signal de départ "start" (^Q ou Xon) pour reprendre. Certains terminaux possèdent une touche "Pas de défilement" qui enverra de manière alternée Xoff et Xon ou peut-être enverra des signaux de contrôle de flux matériel ?? Voici ce que font ctrl-S (^S) et ctrl-Q (^Q) :

Si vous voulez à la fois arrêter le défilement et quitter, utilisez ^C. Si vous voulez arrêter le défilement pour faire autre chose mais voulez garder le programme qui générait la sortie en mémoire pour que vous puissiez reprendre le défilement plus tard, utilisez ^Z pour suspendre.

Une méthode de défilement différente est d'envoyer la sortie dans un tube vers un afficheur comme more, less ou most. Cependant, la sortie peut ne pas être la sortie standard mais peut être la sortie d'erreur que l'afficheur ne reconnaît pas. Pour résoudre ceci vous pouvez utiliser une redirection "2>&1" pour que l'afficheur fonctionne correctement. Il est souvent plus simple d'utiliser simplement ^S et ^Q sauf si vous devez défiler en arrière.

Sur une console PC (qui émule un terminal), vous pouvez défiler en arrière en utilisant Shift-PageHaut. Cela est fréquemment nécessaire puisque le défilement est souvent trop rapide à arrêter en utilisant ^S. Une fois que vous avez défilé en arrière Shift-PageBas défilera en avant à nouveau.

Prendre littéralement en compte le caractère suivant

^V envoie le caractère tapé suivant (en général un caractère de contrôle) directement au pilote de périphérique sans action ou interprétation. En retour deux caractères ASCII comme ^C sont affichés.

16.8 Visualiser des fichiers Latin-1 sur un terminal 7 bits

Certains fichiers texte sont au format Latin1 sur 8 bits (voyez ensembles de caractères). Si vous avez un terminal qui n'affiche pas les caractères Latin1 (ou sur lequel on n'a pas sélectionné l'ensemble de caractères Latin1), un symbole de boulet s'affichera comme un 7, etc. En visualisant des pages de manuel (elles sont en Latin1) vous pouvez passer l'option -7 à man afin de traduire les 7, etc. à quelque chose proche d'un boulet (en ASCII). Y a-t-il des afficheurs qui font ces traductions ??

16.9 Inspection de l'interface

Ces utilitaires vous fourniront des informations sur l'interface du terminal :

16.10 Modifier les paramètres du terminal

Les paramètres du terminal sont normalement positionnés une fois quand le terminal est installé en utilisant les procédures de configuration du manuel du terminal. Cependant, certains paramètres peuvent être modifiés alors que le terminal est en cours d'utilisation. Vous ne donnez normalement aucune commande "stty" ou "setserial" quand le terminal est en cours d'utilisation car elles causeront certainement des problèmes à l'interface du terminal. Cependant, vous pouvez faire certaines modifications à l'apparence de l'écran du terminal ou à son comportement sans détruire l'intégrité de l'interface. Parfois ces modifications sont faites automatiquement par les applications et donc vous ne devriez pas avoir besoin de vous en occuper.

Une méthode directe pour effectuer de telles modifications est d'utiliser la touche de configuration (ou autre) sur le terminal et ensuite d'utiliser les menus pour faire les modifications. Pour cela, vous aurez besoin de bien connaître le terminal. Les trois autres méthodes envoient une séquence d'échappement de l'ordinateur vers le terminal pour faire les modifications. Ces trois exemples montrent des méthodes différentes pour faire cela en positionnant la vidéo inverse :

  1. setterm -reverse
  2. tput -rev
  3. echo ^[[7m

setterm

C'est la commande la plus facile à utiliser. Elle utilise des options longues (mais n'utilise pas les -- devant). Elle consulte la base de données terminfo pour déterminer le code à envoyer. Vous pouvez modifier la couleur, la luminosité, la coupure de ligne, la vitesse de répétition du clavier, l'apparence du curseur etc.

tput

La commande "tput" est similaire à "setterm" mais au lieu d'utiliser des mots ordinaires comme arguments, vous devez utiliser les abréviations utilisées par terminfo. Beaucoup d'abréviations sont relativement laconiques et difficiles à retenir.

echo

Dans l'exemple "echo ^[[7m" pour positionner la vidéo inverse, ^[ est le caractère d'échappement. Pour le taper, tapez ^V^[ (ou ^V suivi de la touche ESC). Pour utiliser cette méthode "echo" vous devez trouver quel code utiliser à partir d'un manuel de terminal ou à partir de terminfo ou termcap. Il est plus facile d'utiliser setterm ou tput bien qu'echo s'exécutera un peu plus vite. Vous pouvez donc utiliser echo ... dans les scripts shell qui ne s'occupent que d'un type de terminal.

Sauver les modifications

Quand vous éteignez le terminal les modifications que vous avez faites seront perdues (sauf si vous les avez sauvées dans la mémoire permanente du terminal en allant dans le mode configuration et en les sauvant). Si vous voulez les utiliser à nouveau sans devoir les retaper, mettez les commandes dans un script shell ou créez une fonction shell. Lancez-la ensuite quand vous voulez faire les modifications. Une manière de rendre les modifications semi-permanentes est de mettre ces commandes dans un fichier lancé à chaque fois que vous vous loggez ou que vous démarrez l'ordinateur.

16.11 Faire d'un terminal une console

Beaucoup de messages en provenance du système ne sont normalement envoyés que sur la console. Alors que les messages générés au démarrage apparaissent sur la console, on peut aussi les voir sur un terminal après la fin du démarrage en tapant la commande : dmesg. Si le démarrage n'aboutit pas, cela ne sera pas utile, et vous voudrez avoir un terminal qui affiche les messages pendant le démarrage.

Il est possible de modifier (patcher) le noyau Linux pour faire cela, et le recompiler. Cela enverra au terminal les messages qui sont normalement envoyés uniquement à la console. Il ne transforme pas complètement le terminal en console puisqu'on ne peut pas redéfinir le clavier ni changer les couleurs comme on peut le faire sur la plupart des consoles. Le Linux Journal d'avril 1997 avait un article là-dessus. Pour patcher le noyau Linux ajoutez quelques #define au début de src/linux/drivers/char/console.c :


<item> #define CONFIG_SERIAL_ECHO
<item> #define SERIAL_ECHO_PORT 0x2f8  /* Serial port address  */

Si vous utilisez la console pour sélectionner quel système d'exploitation démarrer (avec LILO), mais que vous voudriez le faire à partir d'un terminal, vous devez ajouter une ligne au fichier /etc/lilo.conf. Voyez la page de manuel de lilo.conf et cherchez la chaîne "serial=".


Page suivante Page précédente Table des matières