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

15. Terminfo et Termcap (en détails)

15.1 Introduction à Terminfo

Terminfo (anciennement termcap) est une base de données des capacités des terminaux et plus. Pour chaque (enfin presque) modèle de terminal elle indique aux applications ce que le terminal est capable de faire. Elle indique quelles séquences d'échappement (ou caractère de contrôle) envoyer au terminal afin de faire des choses telles que déplacer le curseur vers un nouvel endroit, effacer une partie de l'écran, faire défiler l'écran, changer de mode, changer l'apparence (couleurs, luminosité, clignotement, soulignement, vidéo inverse, etc.). À partir de 1980 environ, beaucoup de terminaux supportaient plus d'une centaine de commandes (certaines d'entre elles prenant des paramètres numériques).

Les abréviations terminfo sont en général plus longues que celles de termcap et il est ainsi plus facile de deviner ce qu'elles veulent dire. Les pages de manuel de terminfo sont plus détaillées (et incluent les anciennes abréviations de termcap). Ainsi, sauf si vous êtes déjà lié à termcap, vous devriez utiliser les fichier terminfo.

15.2 Base de données terminfo

La base de données terminfo est compilée et possède ainsi une partie source et une partie compilée. La vieille base de données termcap ne possède qu'une partie source mais cette source peut, grâce à une seule commande, être à la fois convertie en source terminfo et ensuite compilée. Vous pouvez ainsi vous en tirer sans avoir le source terminfo puisque le source termcap peut créer la base terminfo compilée.

Pour voir si votre terminal (disons vt100) est dans la base de données terminfo, tapez "locate vt100". Ceci pourra montrer /usr/lib/terminfo/v/vt100 ou /usr/share/terminfo/v/vt100 qui sont des localisations possibles des fichiers terminfo compilés. Certains programmes anciens peuvent s'attendre à ce qu'elle soit dans le répertoire /etc/terminfo. La variable d'environnement TERMINFO devrait être positionnée sur le chemin vers cette base de données. Exemple : TERMINFO=/usr/share/terminfo.

Le code source que vous utilisez peut résider dans /etc/termcap et/ou dans terminfo.src (ou un autre nom). Voyez les pages de manuel : terminfo(5) ou termcap(5) pour voir le format nécessaire pour créer (ou modifier) ces fichiers. Le fichier terminfo.src peut se trouver en divers endroits sur votre ordinateur ou peut ne pas être inclus dans votre distribution Linux. Utilisez la commande locate pour essayer de le trouver. Il est disponible pour téléchargement (sous le nom termtypes.ti) à http://sagan.earthspace.net/terminfo.

Compilateur terminfo (tic)

Les données des fichiers sources sont compilées avec le programme "tic" qui est capable de faire les conversions entre les formats termcap et terminfo. Vous pouvez ainsi créer une base de données terminfo compilée à partir d'un source termcap. Le programme d'installation utilisé pour installer Linux a probablement installé les fichiers compilés sur votre disque dur donc vous ne devez rien compiler sauf si vous modifiez /etc/termcap (ou terminfo.src). "tic" installera automatiquement les fichiers compilés résultant dans un répertoire terminfo prêt à être utilisé par les applications.

Regardez votre terminfo

C'est une bonne idée de jeter un coup d'oeil à votre entrée terminfo pour le terminal que vous utilisez (le code source, bien sûr) et de lire les commentaires. Une manière rapide de l'inspecter sans les commentaires est de taper simplement "infocmp". Mais les commentaires pourront vous dire des choses spéciales sur le terminal comme la manière dont vous devez le configurer pour qu'il fonctionne correctement avec la base de données terminfo.

Effacer des données non nécessaires

Afin d'économiser de l'espace disque, on peut effacer toute la base de données à part les types de terminaux que l'on possède (ou dont on pourrait avoir besoin dans le futur). N'effacez aucun termcap pour un "terminal Linux" (la console) ou les entrées xterm si vous utilisez X Window. Le type de terminal "dumb" peut être nécessaire quand une application ne peut pas déterminer le type de terminal que vous utilisez. Cela économiserait de l'espace disque si les programmes d'installation n'installaient les terminfo que pour les terminaux que vous possédez et que vous puissiez obtenir un termcap pour un nouveau terminal sur Internet en quelques secondes.

15.3 Modification des fichiers terminfo

Certaines entrées terminfo fournies peuvent être améliorées. Par exemple, la plupart des terminaux ont un jeu de caractères graphiques que l'on peut utiliser pour dessiner des rectangles avec des lignes solides (pas des lignes en pointillé). Si vous voyez des lignes en pointillé dans les programmes comme minicom, alors la raison est peut-être que la capacité graphique n'a pas été intégrée dans le fichier terminfo. Vous pouvez l'ajouter en découvrant quels symboles utiliser à partir du manuel (dans ce cas vous devez donner des valeurs à enacs, rmacs et smacs) et ensuite éditer le fichier source. Alors en utilisant "tic" vous pouvez le compiler. "tic" devrait placer automatiquement le fichier terminfo compilé dans le répertoire correct réservé à cet usage.

Si vous voulez trouver un terminfo meilleur que celui qui est fourni, vous pouvez essayer de chercher sur Internet (mais ce que vous y trouverez peut être pire). Si votre nouvelle entrée terminfo est meilleure que l'ancienne et semble stable (vous l'avez utilisée pendant un moment sans problèmes) vous devriez en envoyer une copie au mainteneur de terminfo comme indiqué au début du fichier source de terminfo (ou termcap).

15.4 Chaîne d'initialisation

Dans le terminfo sont souvent incluses des chaînes d'initialisation qu'on peut envoyer au terminal pour l'initialiser. Cela peut modifier l'apparence de l'écran, changer le mode dans lequel se trouve le terminal et/ou faire que le terminal émule un autre terminal. Une chaîne d'initialisation n'est pas envoyée automatiquement au terminal pour l'initialiser. On pourrait espérer que le programme getty le fasse mais s'il le faisait, on pourrait faire un changement de configuration sur le terminal et ce changement ne serait pas pris en compte parce que la chaîne d'initialisation l'annulerait automatiquement. Vous devez utiliser une commande sur la ligne de commande (ou dans un script shell) pour envoyer la chaîne d'initialisation telle quelle. De telles commandes sont : "tset", "tput init" ou "setterm -initialize". Parfois il n'y a pas besoin d'envoyer la chaîne d'initialisation puisque le terminal peut se configurer correctement quand il est allumé (en utilisant les options et préférences qu'on a sauvées dans la mémoire permanente du terminal).

15.5 Variable TERM

La variable d'environnement TERM devrait être initialisée au type de terminal que vous utilisez. Elle est normalement positionnée par le paramètre terminal_type passé au programme getty (regardez-le dans le fichier /etc/inittab). Ce nom doit se trouver dans la base de données terminfo. Tapez simplement "set" sur la ligne de commande pour voir quelle valeur a TERM (ou tapez : tset -q). Sur la console (moniteur) TERM est positionné à "linux" qui représente le moniteur du PC émulant un modèle de terminal fictif appelé "linux". Puisque "linux" est proche d'un terminal vt100 et que beaucoup de terminaux le sont aussi, l'appellation "linux" fonctionnera parfois comme un recours temporaire sur un terminal texte.

Si on peut connecter plus d'un type de terminal sur le même port (/dev/tty...) (par exemple, si un commutateur permet à différents types de terminaux d'utiliser le même port série, ou si le port est relié à un modem que des personnes appellent depuis différents types de terminaux) alors TERM doit être positionné à chaque fois que quelqu'un se connecte sur le port série. Il y a souvent une séquence d'échappement de requête pour que l'ordinateur puisse demander au terminal de quel type il est. Une autre façon est de demander à l'utilisateur de taper (sélectionner) le type de terminal qu'il ou elle utilise. Vous aurez peut-être besoin d'utiliser tset ou d'écrire un petit script shell pour gérer cela.

Une manière est d'utiliser "tset" (voir la page de manuel). tset essaie de déterminer le nom du terminal à partir du terminal que vous utilisez. Il regarde ensuite les données dans terminfo et envoie une chaîne d'initialisation à votre terminal. Il peut aussi positionner la valeur de TERM. Par exemple, un utilisateur appelle et se logge. Le script de login .profile est exécuté et il contient la commande suivante : eval `tset -s ?vt100`. Ceci fait que : on demande à l'utilisateur s'il ou elle utilise un vt100. L'utilisateur répond oui ou bien tape le type de terminal réel qu'il ou elle utilise. tset envoie ensuite la chaîne d'initialisation et positionne TERM à ce nom (type) de terminal.

15.6 Documents sur terminfo/termcap


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