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 :
Évidemment il faut allumer le terminal pour qu'il fonctionne. Si vous ne voyez pas d'invite de login, appuyez sur la touche "Retour" (ou "Entrée") plusieurs fois. Saisissez ensuite le nom de votre compte (suivi d'un retour/entrée) et votre mot de passe quand on vous le demande (suivi aussi d'un retour/entrée). Prenez garde à ne pas tout taper en lettres majuscules. Si vous le faites, l'ordinateur peut croire que vous avez un vieux terminal qui ne peut pas transmettre de lettres minuscules et le pilote série peut se configurer pour n'envoyer que des lettres majuscules au terminal.
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.
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é.
Il peut y avoir quelques problèmes pendant l'utilisation d'emacs et de vi sur certains terminaux.
Si le contrôle de flux logiciel est présent, la commande ^S dans Emacs bloquera l'affichage. La commande ^Q débloquera l'affichage. La solution est de relier cette commande à une autre touche dans le fichier de configuration de Emacs.
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 le temps entre la touche ESC et celle qui suit. Si il s'agit d'un court délai, c'est comme si une touche curseur avait été pressée. Utilisez "help cursor-keys" dans vim pour en savoir plus.
Il y'a une autre façon d'arranger ça.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.
Si ls
met en l'air l'émulation de votre terminal avec la possibilité de
couleur, arrêtez-la. ls --color
et ls --colour
utilisent la
possibilité de couleur. Certaines installations font que ls
utilise la
couleur par défaut. Vérifiez dans /etc/profile
, etc. s'il y a des
alias pour ls
. Voyez
exemple de fonction ls
pour savoir comment faire pour que ls soit en couleur sur la console et en
noir et blanc sur les terminaux.
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.
Cela inclut le cas de l'"affichage bloqué" = "terminal stoppé net" de la section précédente.
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 :
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.
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.
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.
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.
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.
^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.
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 ??
Ces utilitaires vous fourniront des informations sur l'interface 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 :
C'est la commande la plus facile à utiliser. Elle utilise des options longues (mais n'utilise pas les -- normaux 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.
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.
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 si vous tapez sur la ligne de commande. Puisque "echo ..." s'exécutera plus vite (puisqu'il ne fait de requête), il est bon pour être utilisé dans les scripts shell lancés au démarrage, etc.
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.
C'est aussi ce que l'on appelle une "console série". Beaucoup de messages en provenance du système ne sont normalement envoyés que sur la console (Le moniteur). On peut aussi voir sur un terminal certains messages envoyés sur la console durant le démarrage après un démarrage réussi en tapant la commande : dmesg. Si le démarrage ne réussit pas, ceci ne sera d'aucun utilité. Il est possible de modifier le noyau Linux pour qu'un terminal serve de console et reçoive tous les messages de Linux destinés à la console. Malheureusement, les messages du BIOS (qui s'affiche sur le moniteur quand un PC est démarré) seront perdus puisqu'ils ne seront pas affichés sur le terminal.
Creer une "console série" veut dire que la console (dans la forme d'un terminal) se trouve maintenant sur un port série. Bien sûr, elle n'aura pas les couleurs, les fontes, les capacités graphiques, ni les possibilités de redéfinition du clavier de la vraie console du PC.
Avant le noyau 2.2, vous deviez patcher le noyau à la main. À partir du noyau 2.2, le support est inclus dans le noyau à condition que ce dernier ait été configuré pour cela. Ces deux cas sont traités dans les deux sous-sections suivantes :
Les instructions pour faire une console série sont incluses dans la documentation livrée avec le code source dans le fichier : serial-console.txt. Normalement, le périphérique /dev/console est un lien vers tty0 (la console PC). Pour une console série vous créez un nouveau /dev/console qui est un vrai périphérique (et non pas un lien vers autre chose). Vous devez aussi inclure une déclaration à propos de la console série dans /etc/lilo.conf et ensuite lancer lilo. C'est parce que l'équivalent de "setserial" doit être lancé pour configurer votre console série avant le chargement du noyau. Voyez la documentation ci-mentionnée pour plus de détails.
Le Linux Journal d'avril 1997 avait un article sur la façon d'appliquer une rustine au noyau. Vous 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 */ Ce qui suit n'était pas dans l'article de Linux Journal. Dans les noyaux 2.+ (et précédents ??) vous avez aussi besoin de positionner la vitesse d'émission (sauf si 9600 est convenable). Cherchez ces deux lignes : serial_echo_outb(0x00, UART_DLM); /* 9600 baud */ serial_echo_outb(0x0c, UART_DLL); Changez 0x0c dans la ligne ci-dessus en (selon la vitesse que vous désirez) : 115200 baud: 0x01 19200 baud: 0x06 2400 baud: 0x30 57600 baud: 0x02 9600 baud: 0x0c 1200 baud: 0x60 38400 baud: 0x03 4800 baud: 0x18
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=".
Oui, en utilisant un terminal et en le faisant passer pour une console comme indiqué ci-dessus. Vous aurez sans doute quand même besoin d'une carte graphique puisque la plupart des BIOS en ont besoin pour démarrer le PC. Votre BIOS peut aussi avoir besoin d'un clavier pour démarrer, ou bien il peut avoir une option grâce à laquelle vous pouvez indiquer au BIOS qu'il n'a pas besoin de clavier.
Le paquet "screen
" lance des sessions multiples un peu comme les
terminaux virtuels sur la console : voyez
la console : /dev/tty?. Cependant, ce n'est pas comme les "pages" (
section sur les pages) puisque l'image des pages est
stockée sur l'ordinateur hôte et non à l'intérieur du terminal comme elles le
sont avec les "pages".
Pour vous délogger, tapez soit "logout", soit "exit". Dans certains cas votre demande sera refusée, mais on devrait vous dire pourquoi. L'une des raisons du refus est que vous n'êtes pas sur le même shell que celui avec lequel vous vous êtes loggé. Une autre manière de vous délogger est d'appuyer sur ^D. Puisqu'on utilise aussi ^D à d'autres fins, vous ne voudrez pas forcément que cette touche vous délogge. Si vous positionnez la variable IGNOREEOF dans le shell Bash, alors ^D ne vous déloggera plus.
Si deux personnes loggées par l'intermédiaire de terminaux sur le même ordinateur hôte désirent discuter ensemble, ils peuvent utiliser les programmes "write" ou "talk". Sur Internet, on peut discuter en utilisant le navigateur "lynx".
Pour espionner ce qu'une autre personne fait sur son terminal, utilisez le programme "ttysnoop". Dans "ttysnoop", les deux terminaux ont le même état et tout ce qui est tapé sur l'un des deux claviers apparaît sur les deux écrans (au même endroit). Donc si vous espionnez et ne voulez pas être détecté, vous ne devriez rien taper. On peut utiliser ttysnoop pour s'entraîner avec un professeur et un étudiant assis côte à côte, chacun sur son terminal. Le professeur peut regarder ce que tape l'étudiant et peut corriger les erreurs en tapant correctement. L'étudiant peut regarder ce que tape le professeur et ensuite le répéter lui-même. C'est comme s'ils utilisaient un seul terminal, les deux personnes ayant leurs mains sur le clavier en même temps.