XI/ Le terminal X
Introduction (courte): vous pensez bien que je ne tire pas ces connaissances sur les terminaux, de l'endroit béni d'où je suis né. Alors merci à freebsd pour leurs explications on ne peut plus claires.
Terminaux
Contribution de Sean Kelly <kelly@fsl.noaa.gov>28 Juillet 1996
Utiliser des terminaux est une solution commode et peu coûteuse pour disposer de la puissance de votre système FreeBSD lorsque vous n'êtes pas sur la console de l'ordinateur ou sur un réseau auquel il est connecté. Cette section vous explique comment utiliser des terminaux avec FreeBSD.
Usages et types de terminaux
Les premiers systèmes Unix n'avaient pas de console. Au lieu
de cela, les gens ouvraient des sessions et exécutaient leurs programmes
à partir de terminaux qui étaient connectés aux ports
série de l'ordinateur. C'est un peu la même chose que lorsque
l'on utilise un modem et un logiciel d'émulation de terminal pour
se connecter à un système distant et travailler en mode texte.
Les PCs d'aujourd'hui ont des consoles graphiques de haute résolution, mais la possibilité d'ouvrir une session sur un port série subsiste toujours sur presque tous les systèmes d'exploitation de type Unix; FreeBSD ne fait pas exception à la règle. Avec un terminal relié à un port série disponible, vous pouvez ouvrir une session et exécuter des programmes comme vous le feriez normalement à la console ou dans une fenêtre xterm avec le gestionnaire X Window.
Pour un usage professionnel, vous pouvez connecter de nombreux terminaux à un système FreeBSD et les installer sur les bureaux de vos employés. Pour une usage domestique, un ordinateur inutilisé, un vieux PC ou Macintosh, peut servir de terminal sur un ordinateur plus puissant sous FreeBSD. Vous pouvez ainsi faire de ce qui serait sinon un système mono-utilisateur un puissant système multi-utilisateurs.
FreeBSD connaît trois types de terminaux:
Les Terminaux passifs,
Les PCs servant de terminaux,
Les Terminaux X.
Les sections qui suivent décrivent chacun de ces types de terminaux.
Terminaux passifs
Les terminaux passifs sont des matériels spécialisés
qui vous permettent de vous connecter à votre ordinateur via une
ligne série. On les appelle ``passifs'' parce qu'ils ne savent qu'afficher,
envoyer et recevoir du texte. Ils ne peuvent pas exécuter de programmes.
C'est l'ordinateur auquel ils sont connectés qui dispose de tout
ce qu'il faut pour faire tourner les logiciels de traitement de texte,
les compilateurs, la messagerie électroniques, les jeux, et ainsi
de suite.
Il ya a des centaines de modèles de terminaux passifs de constructeurs différents, dont le VT-100 de Digital Equipment Corporation et le WY-75 de Wyse. Ils fonctionneront pratiquement tous avec FreeBSD. Certains terminaux haut de gamme peuvent même afficher des graphiques, mais seuls certains logiciels tireront parti de ces possibilités évoluées.
Les terminaux passifs sont d'usage courant lorsque les utilisateurs n'ont pas besoin d'accéder à des outils graphiques tels que ceux que fournit le système X Window.
PCs servant de terminaux
Si un terminal passif ne sait qu'afficher, envoyer et recevoir du texte,
alors n'importe quel ordinateur personnel inutilisé peut servir
de terminal passif. Il vous faudra uniquement le câble adapté
et un programme d'émulation de terminal qui tourne sur cet ordinateur.
C'est un usage domestique courant. Si votre femme travaille sur votre console système FreeBSD, vous pouvez travailler en mode texte en même temps à partir d'une machine moins puissante connectée comme terminal à votre système FreeBSD.
Terminaux X
Les terminaux X sont les terminaux les plus sophistiqués, ils
ne se connectent pas à un port série, mais habituellement
à un réseau du type Ethernet. Au lieu d'être cantonnés
au mode texte, ils peuvent afficher des applications X Window.
Les terminaux X ne sont cités ici que pour être exhaustif. Ce chapitre ne décrit pas comment installer, configurer et utiliser des terminaux X.
Câbles et Ports
Pour relier un terminal à votre système FreeBSD, il vous
faut le bon câble et un port série auquel le connecter. Cette
section vous explique comment faire. Si vous savez déjà comment
brancher votre terminal et quel type de câble il vous faut, passez
à la section Configuration.
Câbles
Comme les terminaux utilisent les ports série, il vous faudra
un câble série - appelé aussi RS-232C - pour relier
le terminal à votre système FreeBSD.
Il y a deux sortes de câbles série. Celui que vous utiliserez dépendra du type de terminal que vous voulez connecter:
Si vous connectez un ordinateur personnel pour servir de terminal, utilisez un câble ``null-modem''. Un câble ``null-modem'' relie deux ordinateurs ou deux terminaux entre eux.
Si vous avez un vrai terminal, la meilleure source d'information pour savoir quel câble utiliser est la documentation du terminal. Si vous n'avez pas de documentation, essayez un câble ``null-modem''. Si cela ne marche pas, alors essayez avec un câble standard.
Il faudra aussi que les ports série de votre terminal et de votre système FreeBSD aient des connecteurs compatibles avec le câble que vous utilisez.
Câbles ``Null-modem''
Un câble ``null-modem'' transmet directement certains signaux,
le ``signal à la terre'', par exemple, mais en permute d'autres,
les broches ``émission'' et ``réception'' sont par exemple
reliées entre elles, d'une extrémité sur l'autre.
Si vous réalisez vous-même vos propres câbles, voici une table qui décrit la méthode recommandée pour fabriquer un câble ``null-modem'' pour les terminaux. Cette table donne les noms et les numéros de broches des signaux RS-232C sur un connecteur DB-25,
Signal Broche # Broche # Signal
TxD 2 reliée à 3 RxD
RxD 3 reliée à 2 TxD
DTR 20 reliée à 6 DSR
DSR 6 reliée à 20 DTR
SG 7 reliée à 7 SG
DCD 8 reliée à 4 RTS [a]
RTS 4 5 CTS
CTS 5 reliée à 8 DCD
Remarques :
[a] reliez les broches 4 et 5 entre elles sur le connecteur et à la broche 8 de l'autre extrémité (côté ordinateur).
Câbles RS-232C standard
Un câble série standard transmet directement les signaux
RS-232C. Ce qui signifie que la broche ``émission'' d'une extrémité
est reliée à la broche ``émission'' de l'autre. C'est
le câble que l'on utilise pour connecter un modem à un système
FreeBSD, et dont ont besoin certains terminaux.
Ports
Les ports série sont les périphériques grâce
auxquels l'information est échangée entre le terminal et
l'ordinateur FreeBSD hôte. Cette section décrit les différents
types de ports série existant et comment ils sont adressés
par FreeBSD.
Types de ports
Il y a différents types de ports série. Avant d'acheter
ou de monter un câble, vous devez vérifier qu'il soit adapté
aux ports de votre terminal et de votre machine FreeBSD.
La plupart des terminaux ont des ports DB25. Les ordinateurs personnels, dont les PCs sous FreeBSD, ont des ports DB25 ou DB9. Si vous avez une carte multi-ports série sur votre PC, vous pouvez avoir des ports RJ-12 ou RJ-45.
Consultez la documentation de votre matériel pour connaître les spécifications des ports que vous allez utiliser. Un coup d'oeil aux ports suffit souvent aussi.
Noms des ports
Avec FreeBSD, vous accédez à chacun des ports série
par une entrée dans le répertoire /dev. Il y a deux sortes
d'entrées:
Les ports d'appel entrant sont appelés /dev/ttydX où X est le numéro du port, à partir de zéro. Vous utilisez habituellement les ports d'appel entrant pour les terminaux. Avec ces ports, la ligne série doit émettre le signal ``Data Carrier Detect'' (DCD) - détection de porteuse - pour qu'ils fonctionnent.
Les ports d'appel sortant sont appelés /dev/cuaaX. Vous n'utilisez normalement pas les ports d'appel sortant pour les terminaux, mais pour les modems. Vous pouvez les utiliser avec un terminal, si le câble série ou le terminal ne supportent pas le signal de détection de porteuse.
Reportez-vous aux pages de manuel de sio(4) pour plus d'informations.
Si vous connectez un terminal au premier port série (COM1 en langage DOS), vous utiliserez alors /dev/ttyd0 pour faire référence au terminal. S'il est sur le second port série (aussi appelé COM2), ce sera /dev/ttyd1, et ainsi de suite.
Notez bien que vous devrez peut-être configurer votre noyau pour y inclure le support de chaque port série, en particulier si vous avez une carte série multi-ports. Voyez le chapitre Configurer le noyau de FreeBSD pour plus d'informations.
Configuration
Cette section décrit ce que vous devez faire pour configurer
votre système FreeBSD pour pouvoir ouvrir une session depuis un
terminal. Elle suppose que vous avez déjà configuré
votre noyau pour y inclure le support du port série auquel votre
terminal est connecté - et que vous avez branché ce dernier.
En un mot, vous devez demander au programme init, qui contrôle le lancement et l'exécution des processus, de lancer un processus getty, lequel se chargera de lire le nom d'utilisateur au début de la session et lancera à son tour le programme login.
Pour cela, vous devez éditer le fichier /etc/ttys. Commencez par utiliser su pour devenir super-utilisateur. Modifiez ensuite de la façon suivante /etc/ttys:
Ajoutez à /etc/ttys une ligne pour l'entrée du répertoire /dev correspondant au port série, si elle n'y est pas déjà.
Précisez qu'il faut exécuter /usr/libexec/getty sur ce port et donnez le type de ``getty'' approprié, tel qu'il est défini dans le fichier /etc/gettytab.
Donnez le type de terminal par défaut.
Activez le port avec ``on''.
Indiquez si le port doit être ``secure''.
Faites relire le fichier /etc/ttys par init.
En option, vous pouvez définir un type de getty sur-mesure pour l'étape 2 en ajoutant une entrée au fichier /etc/gettytab. Ce document ne vous explique pas comment le faire. Vous êtes invités à consulter les pages de manuel de gettytab(5) et getty(8) pour plus d'informations.
Les sections qui suivent détaillent chacune de ces étapes, Dans l'exemple que nous prendrons pour cela, nous connecterons deux terminaux à notre système: un Wyse-50 et un vieil IBM PC 286 avec un logiciel d'émulation de terminal compatible VT-100. Nous connecterons le terminal Wyse au second port série et le 286 au sixième port série (sur une carte multi-ports).
Pour plus d'informations sur le fichier /etc/ttys, lisez les pages de manuel de ttys(5).
Ajouter une entrée à /etc/ttys
Vous devez d'abord ajouter une entrée au fichier /etc/ttys,
à moins qu'il n'y en ait déjà une.
Le fichier /etc/ttys liste tous les ports de votre système FreeBSD sur lesquels vous voulez autoriser l'ouverture de session. Par exemple, la première console virtuelle ttyv0 a une entrée dans ce fichier. Vous pouvez ouvrir une session à la console en utilisant cette entrée. Il y a des entrées dans le fichier pour les consoles virtuelles, les ports série et les ``pseudo-tty''s. Pour les terminaux physiques, n'indiquez que l'entrée /dev du port série, sans le ``/dev/''.
A l'installation de votre système FreeBSD, le fichier /etc/ttys contient les entrées pour les quatre premiers ports série: de ttyd0 à ttyd3. Si vous connectez un terminal à l'un de ces ports, vous n'avez pas d'entrée à ajouter.
Dans notre exemple, le Wyse-50 va sur le second port série, ttyd1, qui est déjà dans le fichier. Il nous suffit d'ajouter une entrée pour le PC 286 relié au sixième port série. Voici un extrait du fichier /etc/ttys après que nous ayons ajouté cette nouvelle entrée:
ttyd1 "/usr/libexec/getty std.9600"
unknown off secure
ttyd5
Définir le type de getty
Nous devons ensuite préciser quel est le programme à
exécuter pour gérer les ouvertures de session depuis le terminal.
Le programme standard de FreeBSD pour cela est /usr/libexec/getty. C'est
lui qui affiche l'invite login:.
Le programme getty a un argument (optionnel), le type de getty. Un type de getty décrit les caractéristiques de la ligne sur laquelle est le terminal, telle sa vitesse en bps et le type de contrôle de parité utilisé. le programme getty lit ces caractéristiques dans le fichier /etc/gettytab.
Le fichier /etc/gettytab contient un grand nombre d'entrées pour des terminaux anciens et d'autres plus récents. Dans presque tous les cas, les entrées qui commencent par std fonctionneront avec les terminaux physiques. Ces entrées ignorent le contrôle de parité. Il y a un entrée std pour chaque vitesse en bps de 110 à 115200. Vous pouvez bien entendu ajouter vos propres entrées à ce fichier. Les pages de manuel de gettytab(5) vous donnent plus d'informations.
Quand vous définissez le type de getty dans le fichier /etc/ttys, vérifiez que les paramètres de communication du terminal soient les mêmes.
Dans notre exemple, le Wyse-50 n'utilise pas de contrôle de parité et se connecte à 38400 bps. Le PC n'utilise pas de contrôle de parité et se connecte à 19200 bps. Voici le fichier /etc/ttys avec les définitions correspondantes (juste ce qui concerne les deux terminaux qui nous intéressent):
ttyd1 "/usr/libexec/getty std.38400"
unknown off secure
ttyd5 "/usr/libexec/getty std.19200"
Remarquez que le second champ - celui qui indique quel programme exécuter - est entre guillemets. C'est important, parce que sans cela le type donné en argument de getty serait interprété comme troisième champ.
Définir le type de terminal par défaut
Le troisième champ du fichier /etc/ttys donne le type de terminal
par défaut sur le port. Pour les ports d'appel entrant, vous y mettez
typiquement ``unknown'' - inconnu - ou dialup - appel - parce que les utilisateurs
peuvent s'y connecter avec n'importe quel type de terminal ou de logiciel.
Pour les terminaux physiques, le type de terminal ne varie pas, vous pouvez
donc indiquer un vrai type de terminal dans ce champ.
Habituellement, les utilisateurs emploient le programme tset depuis leur fichier .login ou .profile pour récupérer le type de terminal et demander de le préciser si nécessaire. En définissant le type de terminal dans le fichier /etc/ttys, vous leur évitez qu'on leur pose cette question.
Pour savoir quels types de terminaux sont reconnus par FreeBSD, consultez le fichier /usr/share/misc/termcap. Il liste environ 600 terminaux. Vous pouvez en ajouter si vous le désirez. Voyez les pages de manuel de termcap(5) pour plus d'informations.
Dans notre exemple, le Wyse-50 est un terminal de type Wyse-50 (bien qu'il puisse émuler d'autres types de terminaux, nous le laisseront en mode Wyse-50). Le PC 286 PC utilise Procomm qui sera configuré pour émuler une VT-100. Voici les entrées adéquates, quoiqu'encore incomplètes du fichier /etc/ttys:
ttyd1 "/usr/libexec/getty std.38400"
wy50 off secure
ttyd5 "/usr/libexec/getty std.19200"
vt100
Activer le port
Le champ suivant de /etc/ttys, le quatrième, indique s'il faut
activer le port. Si vous y mettez on, alors le processus init démarrera
le programme mentionné par le second champ, getty, qui affichera
l'invite de session. Si vous y mettez off, il n'y aura pas de getty, et
donc pas d'ouverture de session sur le port.
Vous devez donc bien sûr préciser on dans ce champ. Voici de nouveau le fichier /etc/ttys. Nous avons activé les deux ports avec on:
ttyd1 "/usr/libexec/getty std.38400"
wy50 on secure
ttyd5 "/usr/libexec/getty std.19200"
vt100 on
Définir les ports sécurisés
Nous voici arrivé au dernier champ (enfin, presque: il y a un
indicateur window optionnel, mais nous ne nous en préocupperons
pas). Le dernier champ indique si le port est sécurisé.
Que veut dire ``sécurisé''?
Cela veut dire que le compte super-utilisateur (ou tout compte avec un IDentifiant utilisateur de 0) peut ouvrir une session sur ce port. Les ports non-sécurisés n'autorisent pas l'ouverture de session super-utilisateur.
Comment utiliser les ports sécurisés et non sécurisés?
Lorsqu'un port est non sécurisé, le terminal qui y est connecté n'autorise pas l'ouverture de session super-utilisateur. Les gens qui connaissent le mot de passe super-utilisateur de votre système FreeBSD devront d'abord se connecter sous un compte utilisateur ordinaire. Ils devront ensuite utiliser la commande su pour avoir les droits du super-utilisateur.
Grâce à cela, vous aurez deux enregistrements pour pouvoir repérer les accès super-utilisateur illégitimes: les deux commandes login et su rapportent leur emploi dans le fichier de trace système (les ouvertures de sessions sont aussi enregistrées dans le fichier wtmp).
Lorsque le port est sécurisé, l'ouverture de session super-utilisateur est autorisée depuis le terminal. Les gens qui connaissent le mot de passe super-utilisateur peuvent directement se connecter en tant que tel. Vous n'avez plus les traces potentiellement utiles de l'ouverture de session et de l'utilisation de su.
Que devez-vous utiliser?
Utilisez ``non sécurisé''. Utilisez ``non sécurisé'' même pour les terminaux qui ne sont pas accessibles à tout le monde ou sont dans des locaux fermés à clé. Il est facile d'ouvrir une session et d'utiliser su quand vous avez besoin des droits du super-utilisateur.
Voici finalement les entrées complètes du fichier /etc/ttys accompagnées d'un commentaire qui indique où se trouvent les terminaux:
ttyd1 "/usr/libexec/getty std.38400"
wy50 on insecure # Cuisine
ttyd5 "/usr/libexec/getty std.19200"
vt100 on insecure # Salle de bains
Obliger init à relire le fichier /etc/ttys
Quand vous démarrez FreeBSD, le premier processus, init, lit
le fichier /etc/ttys et démarre les programmes listés pour
chacun des ports activés, pour afficher l'invite de session.
Après avoir modifié /etc/ttys, vous aimeriez ne pas avoir à redémarrer le système pour qu'init voit vos modifications. C'est pourquoi init relit /etc/ttys lorsqu'il reçoit un signal SIGHUP (``hang up'' - raccrocher).
Donc, après avoir sauvegardé vos modifications au fichier /etc/ttys, envoyez un SIGHUP à init en tapant:
# kill -HUP 1
(Le processus init a toujours l'IDentifiant de processus 1.)
Si la configuration est correcte, les câbles en place, les terminaux
sous tension, vous devriez voir les invites de session. Vos terminaux sont
prêts à être utilisés pour la première
fois!
Régler les problèmes liés à votre connection
Même en ayant porté la plus méticuleuse attention
aux détails, il peut toujours y avoir quelque chose qui ne va pas
lorsque vous installez un terminal. Voici une liste de symptômes
et de suggestions de solutions.
L'invite de session n'apparaît pas.
Vérifiez que le terminal est branché et sous tension.
Si c'est un ordinateur personnel utilisé comme terminal, vérifiez
qu'il utilise bien le logiciel d'émulation de terminal sur le bon
port.
Assurez-vous que le câble est solidement raccordé sur le terminal et sur la machine FreeBSD. Vérifiez que c'est le bon type de câble.
Contrôlez que le terminal et FreeBSD utilisent la même vitesse en bps et le même contrôle de parité. Si c'est un terminal vidéo, vérifiez que les contrôles de luminosité et de contraste ne soient pas au minimum. Si c'est un terminal papier, vérifiez qu'il y ait du papier et de l'encre.
Vérifiez qu'il y ait bien un processus getty qui s'exécute pour ce terminal. Tapez:
# ps -axww|grep getty
pour avoir la liste des processus getty actifs. Vous devriez voir une entrée pour le terminal. Par exemple, la ligne suivante:
22189 d1 Is+ 0:00.03 /usr/libexec/getty std.38400 ttyd1
montre qu'il y a un getty qui s'exécute sur le port série ttyd1 et utilise l'entrée std.38400 de /etc/gettytab.
S'il n'y a pas de processus getty actif, assurez-vous que vous avez activé le port dans /etc/ttys. Avez-vous aussi bien exécuté kill -HUP 1?
Il y a n'importe quoi à la place de l'invite de session.
Vérifiez que le terminal et FreeBSD définissent la même
vitesse et le même contrôle de parité. Assurez-vous
que le processus getty utilise le bon type de getty. Dans le cas contraire,
corrigez /etc/ttys et exécutez kill -HUP 1.
Les caractères sont redoublés; le mot de passe s'affiche
quand on le tape.
Passez le terminal (ou le logiciel d'émulation de terminal)
du mode ``half duplex'' ou ``echo local'' en mode ``full duplex''.