Page suivantePage pr�c�denteTable 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).

La fa�on dont terminfo donne les information a un programme est par les fonctions "ncurses" que le programmeur met dans un programme C. Par exemple si un programme veut bouger le curseur � la ligne 3, colonne 6, il appelle simplement: move(3,6). La fonction move() (faisant partie de ncurses) sait comment faire pour votre terminal (elle peut lire terminfo). Donc il envoit la sequence d'�chappement appropri�e au terminal qui lui fait faire ce mouvement.

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� oblig� de travailler avec termcap, il est sugg�r� que vous utilisiez les fichier terminfo.

15.2 Base de donn�es terminfo

Introduction

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 un affichage de la base de donn�es pour le terminal que vous utilisez actuellement (y compris un moniteur de PC), tapez "infocmp" et vous devriez voir le "fichier" source terminfo correspondant.

Pour voir si votre terminal (disons vt100) est dans la base de donn�es terminfo, tapez "locate vt100". Si vous ne connaissez pas le nom de votre terminal, explorez la liste des fichiers dans la base de donn�es compil�e ou voyez quel est le nom terminfo de mon terminal ?.

O� se trouve la base de donn�es ?

Emplacements de la base de donn�es compil�e

Le fait de taper "locate vt100" peut vous indiquer /usr/lib/terminfo/v/vt100, /usr/share/terminfo/v/vt100, /home/vous/.terminfo/v/vt100 et/ou /etc/terminfo/v/vt100. Tout ceci sont des localisations possibles des fichiers terminfo compil�s. Quoique le r�pertoire /etc/terminfo ne soit pas l'emplacement standard pour ca, avoir quelques types de terminal a cet endroit peut �tre pratique au cas ou le r�pertoire /usr ne soit pas accessible. Par exemple, /usr peut �tre plac� sur un disque ou une partition qui n'ait pas pue �tre mont�e. Normalement, les applications qui utilisent votre base de donn�e terminfo principale sont capables de les trouver si il est mis dans au moin un des emplacements mentionn�s avant. Autrement la variable d'environnement TERMINFO devrait �tre positionn�e sur le chemin vers cette base de donn�es. Exemple : TERMINFO=/usr/share/terminfo.

Si le terminfo compil� se trouve � plus d'un endroit, tout se passe en g�n�ral bien jusqu'� ce que quelqu'un r�cup�re un ou plusieurs fichiers terminfo (d'une distribution plus r�cente, d'Internet, en �ditant la plus vieille, etc.). Le nouveau terminfo doit �tre plac� � tous les emplacements existants (ou les emplacements redondants doivent �tre abolis). Si vous ne vous assurez pas que c'est fait, alors plusieurs applications peuvent se retrouver � chercher et utiliser les anciennes donn�es terminfo (bogu�es) qui existent encore � un emplacement "traditionnel".

Emplacements du code source des bases de donn�es

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 source. 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 Bogues dans les fichiers terminfo existants (et dans le mat�riel)

Malheureusement, il y a un certain nombres de bogues dans les fichiers terminfo et termcap. En plus, bien des d�finitions ne sont pas compl�tes et ne d�finissent pas certaines capacit�s disponibles sur les terminaux. Parfois vous pouvez vous en tirer sans modifier terminfo mais dans d'autres cas vous devez le modifier ou peut-�tre utiliser une autre �mulation qui poss�de un bon terminfo.

Le mauvais �tat des fichiers terminfo fournis est d� � un certain nombre de raisons. L'une d'entre elles est que durant les ann�es 1980, quand on en a �crit beaucoup (souvent au format termcap), les applications n'utilisaient les capacit�s avanc�es des terminaux. Ainsi, si une telle capacit� n'�tait pas dans le fichier termcap (ou terminfo), personne ne se plaignait. Aujourd'hui, les programmes tels que vim utilisent la "colorisation contextuelle" et minicom utilise le code de caract�re graphique du terminal. Ceux-ci ont souvent besoin de plus de d�finitions � ajouter � l'ancien termcap. Ceci peut (ou peut ne pas) avoir d�j� �t� fait.

La plupart des terminaux avaient des bogues mat�riels (dans leur programme interne) qui �taient parfois "r�par�s" en modifiant le termcap. Ensuite, le fabricant pouvait envoyer des puces de remplacement qui r�paraient le bogue. Tous les propri�taires ne passaient pas leur temps � obtenir les puces de remplacement. Ainsi il peut y avoir deux terminfos ou plus pour votre terminal, selon les puces qu'il poss�de. Cette situation n'�tait pas toujours not�e dans le termcap et un seul termcap peut �tre fourni avec Linux. Certains bogues mat�riels pr�sents pour des capacit�s qui n'�taient quasiment jamais utilis�es dans le pass� n'ont s�rement jamais �t� r�par�s. De plus, certaines bogues mat�riels rapport�s peuvent ne jamais avoir �t� r�par�s puisqu'ils n'�taient pas tr�s importants � l'�poque ou que la soci�t� est d�c�d�e, etc.

15.4 Modification des fichiers terminfo

Pour faire ceci vous avez besoin du manuel de votre terminal indiquant les s�quences d'�chappement qu'il utilise. Les manuels r�cents des ann�es 1990 ne les montrent pas souvent. Vous avez aussi besoin d'un manuel terminfo (ou similaire). Par exemple, afin d'ajouter des capacit�s graphiques vous devez assigner des valeurs aux variables terminfo : enacs, rmacs et smacs en �ditant un 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 meilleur terminfo pour un certain terminal 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.5 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.6 Variable TERM

La variable d'environnement TERM devrait �tre initialis�e au nom de terminal que vous utilisez. Si TERM n'a pas encore �t� positionn�e et que vous ne connaissez pas le nom de votre terminal, voyez quel est le nom terminfo de mon terminal ?. 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.7 Documents sur terminfo/termcap


Page suivantePage pr�c�denteTable des mati�res

Hosting by: Hurra Communications GmbH
Generated: 2007-01-26 18:01:43