Mini HOWTO terminal X NCD Ian Hodge, ian@permedia.ca v1.07, 30 Novembre 1999 _________________________________________________________________ _Ce document explique comment connecter un terminal X NCD à une machine hôte UNIX (traduction : Michel Billaud, billaud@labri.u-bordeaux.fr)._ _________________________________________________________________ 1. Copyright Le _NCD X terminal mini HOWTO_ est copyright (C) 1998 par Ian Hodge. Les documents _HOWTO_ de Linux peuvent être reproduits et diffusés en tout ou partie, par tout moyen physique ou électronique, du moment que cette notice de copyright figure sur toutes les copies. 2. Introduction Ce document explique comment connecter un terminal X fabriqué par NCD (Network Computing Devices) à une machine hôte fonctionnant sous UNIX, en utilisant le protocole _BootP_ (_Boot Protocol_). De nombreux terminaux peuvent également démarrrer par RARP, NFS, ou depuis une carte PCMCIA ou une liaison série (directe ou par modem). Bien que le matériau de ce document soit basé sur l'expérience d'un seul type de terminal X, une grande partie des informations qui y figurent s'appliquent également à d'autres modèles. Il existe également un _Linux X Terminal mini HOWTO_ (qui est actuellement déclaré obsolète par les responsables des HOWTO, et n'est donc peut-être pas disponible avec toutes les distributions de Linux) qui recoupe en partie ce document. Celui-ci contient davantage d'informations sur les terminaux X. 2.1 Étapes La connexion d'un terminal X à un réseau Unix se résume aux étapes suivantes : * Relier physiquement le terminal X au réseau. * Configurer la _machine hôte_ UNIX qui servira au _boot_ (démarrage) du terminal X. * Paramétrer la procédure de boot du terminal X. * Démarrer le terminal X. * Se connecter sur le réseau. 3. Préliminaires 3.1 Le terminal X Un terminal X est un appareil capable d'afficher et de communiquer sur un réseau, en utilisant le système de fenêtrage pour réseaux distribués connu sous le nom de X. Typiquement, le logiciel du terminal X (ce qu'on appelle le _serveur X_) est chargé depuis le réseau au démarrage du terminal. Les programmes autres que le serveur X (programmes _clients X_) ne sont pas exécutés localement (à part quelques exceptions) par le terminal X, qui affiche des programmes qui tournent sur d'autres machines du réseau. Le terminal X est donc un genre de _network computer_ qui utilise le protocole X pour accéder aux ressources du réseau. 3.2 Connexion physique Le terminal X NCD (nous avons utilisé le modèle _Xncd19r_ pour la préparation de ce document) possède une prise RJ-45 (paire torsadée) pour Ethernet 10 Base T. Il faut un répèteur multiport (_hub_) pour relier plus de deux appareils en paire torsadée. Si le terminal X et la machine hôte sont les seules machines de votre réseau, vous pouvez les connecter par un câble croisé qui est décrit dans le _Linux Ethernet HOWTO_. 3.3 Logiciel serveur X de NCD Le fichier qui contient le logiciel serveur X du terminal est disponible auprès du constructeur, qui le fournit en principe avec le terminal. Ce fichier va résider sur la machine hôte, d'où il sera téléchargé au démarrage du terminal X. Il est spécifique du modèle du terminal, mais indépendant du type de la machine hôte. Le terminal peut démarrer depuis n'importe quelle machine qui supporte le protocole de communication _BootP_ (expliqué plus loin). En plus du serveur, le logiciel X peut contenir des applications, comme un gestionnaire de fenêtres, qui s'exécuteront localement sur le terminal X. 4. Configuration de la machine hôte UNIX Au démarrage, le terminal X va chercher ses fichiers (y compris le serveur X) sur une machine du réseau. Une fois démarré, le serveur X contrôlera les entrées (clavier, souris), l'affichage, les clients locaux et la communication par le protocole X. Le serveur X s'exécute sur le terminal X, et n'a donc besoin d'aucune compatibilité logicielle avec la machine hôte. 4.1 TFTP et BootP Les protocoles TFTP (_Trivial File Transfer Protocol_, protocole élémentaire de transfert de fichiers) et BootP (_boot protocol_, protocole d'amorçage) sont utilisés ensemble sur la machine hôte pour permettre au terminal X de récupérer le serveur X et les fichiers de configuration à travers le réseau. Ces deux services sont habituellement démarrés par _inetd_ (Internet Daemon). Lorsque le terminal X est mis sous tension, si il est configuré pour un démarrage par le réseau, il émet un appel général (_broadcast_) sur le réseau en utilisant le protocole _BootP_ (protocole d'amorçage TCP/IP). Ce message d'appel contient l'adresse matérielle (Ethernet) du terminal X, adresse qui sera utilisée par la machine hôte pour répondre à la "demande de boot". Lorsque la machine hôte reçoit une demande de boot, _inetd_ (qui surveille un port désigné dans /etc/services) démarre le démon _BootP_ spécifié dans /etc/inetd.conf. Dans le fichier inetd.conf, ajoutez ou dé-commentez les lignes qui concernent TFTP ou BootP. Dans l'exemple qui suit, le dernier paramètre de la ligne de TFTP indique le répertoire qui contient les fichiers pour le terminal X. Bien que les noms de répertoires ne soient pas obligatoires, pour des raisons de sécurité il faut toujours les mettre, de façon à restreindre l'accès TFTP à ces seuls répertoires. Exemple de fichier /etc/inetd.conf (extrait) : # Le service TFTP sert principalement au boot. La plupart des sites # ne font tourner ceci que sur les machines qui sont des "serveurs de boot". tftp dgram udp wait root /usr/sbin/tcpd /usr/sbin/in.tftpd /usr/X11/lib/X11/n cd/ bootps dgram udp wait root /usr/sbin/tcpd /usr/sbin/in.bootpd Lors de son activation, le démon du serveur BootP lit son fichier de données /etc/bootptab. Une description de ce terminal X doit s'y trouver. Chaque description contient un ensemble d'éléments séparés par des deux-points ":". Le premier élément est le nom du terminal. Éléments utiles du fichier bootptab : _hd_ (_home directory_) Répertoire contenant le fichier de boot du terminal X (ici /usr/X11/lib/X11/ncd/). _ip_ Addresse IP du terminal X (dans notre exemple 10.0.0.1). _sm(subnet mask) _ masque de sous-réseau (ici 255.0.0.0). Pour comprendre l'usage des masques de sous-réseau et autres principes des réseaux IP, consultez le _Linux NET-3 HOWTO_. _gw(gateway)_ adresse IP de la passerelle (ici 10.0.0.1). _ht(hardware type) _ Type de matériel. C'est ethernet dans cet exemple. _ha(hardware address)_ Adresse matérielle du terminal X (adresse Ethernet sur 6 octets). D'après la page _bootptab_ du manuel UNIX, l'élément "_ht_" doit précéder le "_ha_". L'adresse Ethernet s'affiche à la mise sous tension du terminal X, sous forme d'une série de 6 nombres à deux chiffres hexadécimaux, séparés par des deux-points. Par exemple 00:00:A7:12:26:19 _tc(table continuation)_ Suite d'une autre description du fichier _bootptab_. Voir l'exemple ci-dessous. _ds(domain name server) _ Adresse IP du serveur de noms (par exemple 10.0.0.3). Inutile si la résolution d'adresse n'utilise pas de serveur de noms (DNS). _bf(boot file) _ Nom du fichier contenant le serveur du terminal X (d'habitude le nom du fichier est celui du modèle du terminal X, ici Xncd19r). Ce qui suit est un exemple de fichier /etc/bootptab. Le caractère "\" sert à neutraliser les fins de ligne. ______________________________________________________________ # Ceci est une description, appelée ici ``default'', avec # des informations communes à tous les clients BootP default:hd=/usr/X11/lib/X11/ncd/:\ ds=10.0.0.3:\ sm=255.0.0.0:\ gw=10.0.0.1: # Le terminal X s'appelle ``myxterm''. Remarquez l'élément # ``tc'' qui fait référence à la description ``default''. myxterm:ht=ethernet:\ ha=0x0000a7122619:\ ip=10.0.0.2:\ tc=default:\ bf=Xncd19r: ______________________________________________________________ Lorsque le démon bootpd trouve (dans le fichier bootptab) une description qui correspond à l'adresse matérielle contenue dans une requête de boot, il envoie une réponse à l'adresse IP correspondante. Le transfert de fichiers peut alors se faire par TFTP au dessus de IP. On attribue un nom au terminal X en ajoutant une description dans le fichier /etc/hosts de la machine hôte. Ce fichier sert à établir une correspondance entre noms de machines et adresses IP. Dans l'exemple ci-dessous, le terminal X (d'adresse 10.0.0.2) est nommé "myxterm" : 10.0.0.1 linuxhost # La machine hôte (serveur de boot) 10.0.0.2 myxterm # terminal X 5. Configurer la procédure de démarrage du terminal X Lorsqu'il est mis sous tension, le terminal X tente de _booter_, c'est-à-dire de charger le logiciel serveur X en mémoire et de l'exécuter. Si le terminal X ne peut pas booter, la chaîne d'invite ">" du moniteur (_Boot Monitor_) apparaît. Le Boot Monitor est un programme enregistré dans les mémoires mortes (_PROM = programmable read-only memory_) du terminal. À l'aide du moniteur, il est possible de configurer le terminal X pour qu'il aille chercher le serveur X sur la machine hôte au démarrage. Utilisez "?" pour avoir la liste des commandes du moniteur. Les paramètres de configuration que vous modifiez grâce au moniteur sont stockés dans une mémoire non volatile (NVRAM = non-volatile random access memory), et sont conservés lorsque le terminal est mis hors-tension. Pour booter le terminal depuis le moniteur, on a le choix entre la commande "bt" et un système de menus. Les deux méthodes permettent en gros de faire la même chose, mais les menus donnent accès à davantage de paramètres. 5.1 Syntaxe des commandes du _Boot Monitor_ > bt fichier IP_terminal IP_hôte IP_passerelle masque_sous-réseau _fichier_ Le nom du fichier, sur la machine hôte, qui contient le logiciel du serveur X pour le terminal (dans notre exemple "Xncd19r"). Vérifiez que c'est le même nom que celui indiqué dans le fichier bootptab (expliqué dans la section précédente) pour ce terminal X. _IP_terminal_ L'adresse IP affectée au terminal X (ici 10.0.0.2). Pareillement, cette adresse doit être celle indiquée dans bootptab. _IP_hôte_ L'adresse IP de la machine hôte (10.0.0.1). _IP_passerelle_ L'adresse IP de la passerelle du sous-réseau (par exemple 10.0.0.1). _masque_sous-réseau_ Le masque de sous-réseau, en notation IP décimale ou hexadécimale (par exemple 255.0.0.0 ou ff000000). 5.2 Menu de configuration "setup" du moniteur Les menus de configuration sont appelés par la touche "Setup" ou en tapant la commande "se" après l'invite '>' du moniteur. _Get IP Addresses From_ Normalement, l'adresse IP du terminal devrait être obtenue depuis la configuration stockée dans la NVRAM. Ne selectionnez 'Network' que si vous utilisez RARP (_reverse ARP_) pour déterminer l'adresse IP du terminal X depuis la machine hôte. _Terminal IP Address_ L'adresse IP affectée au terminal X (par exemple 10.0.0.2). C'est la même chose que le paramètre 'IP_terminal' vu précédemment. _First Boot Host IP Address_ L'adresse IP de la machine hôte (ici 10.0.0.1). Même chose que le paramètre 'IP_hôte'. _Gateway IP Address_ L'adresse IP de la passerelle de sous-réseau. Correspond à "IP_passerelle". _Subnet Mask_ Le masque de sous-réseau, en notation IP décimale (voir variable "masque_sous-réseau" plus haut). _Broadcast IP Address_ L'adresse IP pour la diffusion vers le sous-réseau (par exemple 10.255.255.255). _Boot File_ Le nom du fichier qui, sur la machine hôte, contient le logiciel serveur X du terminal (exemple "Xncd19r"). Même chose que le paramètre "fichier" décrit plus haut. _TFTP Boot Directory_ Le nom du répertoire, sur la machine hôte, qui contient le logiciel serveur (par exemple "/usr/X11/lib/X11/ncd/" ou "/tftpboot/"). _Config file_ Le nom du fichier de configuration du terminal X sur la machine hôte (voir plus loin). _UNIX Config Directory_ Le nom du répertoire qui contient le fichier de configuration (exemple "/usr/X11/lib/X11/ncd/"). _TFTP Order, NFS Order, Local Order_ Mettez "1" pour la méthode de démarrage que vous préférez, c'est-à-dire TFTP si vous démarrez par BootP depuis une machine hôte. 5.3 Fichiers de configuration du terminal X Pendant la procédure de boot, le terminal X va essayer d'aller chercher des fichiers depuis la machine hôte. Si un fichier manque, le terminal utilisera des options par défaut. Voici les fichiers transférés pendant le démarrage du terminal X : * Le fichier de configuration (par exemple ncd.conf) qui contient les paramètres du terminal X. * Le fichier des couleurs (par exemple rgb.txt). * La base de données des symboles des touches (par exemple XKeysymDB). * Les fichiers catalogues des polices (exemple font.dir, font.alias). Après un démarrage réussi, la fenêtre console du terminal X doit apparaître avec une barre de menus. La touche "Setup" du clavier fait apparaître/disparaître cette fenêtre. Le menu déroulant "setup" permet de voir et changer les paramètres du terminal X, et de les sauver sur la machine hôte, dans un fichier de configuration qui pourra être réutilisé plus tard. Si le transfert de fichiers se fait par TFTP, le fichier doit être accessible en lecture pour tous. De la même façon, pour pouvoir sauver un fichier de configuration sur la machine hôte, le fichier doit exister préalablement et être accessible en écriture pour tout le monde. Si vous utilisez TFTP sécurisé (ce qui est recommandé pour des raisons de sécurité), l'accès aux fichiers ne pourra se faire que dans des répertoires déterminés. _Note :_ le terminal peut rater son démarrage si il était configuré pour fonctionner avec d'autres hôtes ou avec des paramètres différents. Le problème peut être résolu en réinitialisant la NVRAM pour supprimer les paramètres mémorisés. Pour réinitialiser la NVRAM depuis le _boot monitor_, tapez la commande "nv". Depuis ce sous-menu choisissez "l" pour charger les valeurs par défaut, "s" pour sauver et enfin "q" pour quitter. Relancez la procédure de démarrage décrite plus haut. 5.4 Connexion sur une machine du réseau Depuis la barre de menu de la console X, selectionnez le menu déroulant "Terminals" et choisissez l'option "New Telnet...". Lorsque la fenêtre telnet apparaît, tapez l'adresse d'une machine du réseau dans le champ "service" et cliquez sur "OK". La bannière du site choisi devrait apparaître alors. Une fois connecté, on peut lancer des programmes X, y compris un gestionnaire de fenêtres, depuis la fenêtre telnet. 6. Le terminal X et les polices Le terminal X possède quelques polices internes, appelées "built-ins" dans les menus et fichiers de configuration. Le terminal peut fonctionner avec ces seules polices, mais, en général, on préfère en avoir davantage. On peut ajouter des polices en indiquant des chemins d'accès dans les menus de configuration de la console X, dans les fichiers de configuration, ou par la commande xset. Lorsque le logiciel serveur X s'exécute sur le terminal, cette commande xset permet de modifier ou consulter la liste de chemins d'accès des polices. Pour interroger le serveur X : xset -q Pour ajouter des chemins d'accès : xset +fp _chemin_ Pour enlever des chemins d'accès : xset -fp _chemin_ 6.1 Le serveur de polices Le serveur de polices (xfs : _X Font Server_) tourne sur une des machines du réseau, et fournit des polices au terminal X et aux autres clients du réseau. L'emploi d'un serveur de polices permet d'utiliser une grande variété de polices, parce que le logiciel du serveur X ne traite que des polices _bitmap_. Lors d'un chargement de police, le serveur de polices peut décompresser, ajuster et convertir des polices pour le serveur X, et peut aider à simplifier la gestion des polices pour des groupes de terminaux et de clients réseau. Le serveur de polices est fourni avec de nombreuses distributions Linux, et a également été incorporé dans le logiciel du consortium X disponible sur ftp.x.org. Pour indiquer l'utilisation d'un serveur de polices, on met une référence à un service TCP à la place d'un chemin d'accès dans les menus ou fichiers de configuration du terminal X. Format des références à des services TCP : tcp/: Exemple: tcp/10.0.0.1:7100 Voici un exemple extrait du fichier de configuration d'un terminal X : xserver-default-font-path = { { "tcp/10.0.0.1:7100" } { "built-ins" } } La commande xset permet d'ajouter un serveur de polices dans la liste des chemins d'accès : xset +fp tcp/10.0.0.1:7100 AVERTISSEMENT : Certaines versions de NCDWare (logiciel serveur) exigent que le serveur de polices soit indiqué en premier avant les polices prédéfinies "built-ins". Ceci est en contradiction avec la documentation NCD "System Administrator's Guide for UNIX Systems". Faites des essais, et vérifiez le résultat avec la commande "xset q". Sur la machine hôte, le serveur de polices xfs est lancé au démarrage par le script rc.local, par la commande suivante : xfs -config -port Le numéro de port standard pour le serveur de polices est 7100. Exemple: xfs -config /usr/X11/lib/X11/fs/config -port 7100 Exemple de fichier de configuration du serveur de polices : ______________________________________________________________ # Fichier de configuration du serveur de polices # On autorise au plus 10 clients a se connecter à ce serveur de polices. client-limit = 10 # lorsqu'un serveur de polices atteint le nombre maximum de client, # on en démarre un autre. clone-self = on # On utilise le syslog d'UNIX pour noter les erreurs. use-syslog = on # liste des répertoires de polices catalog = /usr/X11R6/lib/X11/fonts/misc/, /usr/X11R6/lib/X11/fonts/Speedo/, /usr/X11R6/lib/X11/fonts/Type1/, /usr/X11R6/lib/X11/fonts/75dpi/, /usr/X11R6/lib/X11/fonts/100dpi/ # fichier pour noter les erreurs si syslog n'est pas employé error-file = /usr/X11R6/lib/X11/fs/fs-errors # 12 points en decipoints default-point-size = 120 # 100 x 100 et 75 x 75 default-resolutions = 75,75,100,100 ______________________________________________________________ 7. Divers 7.1 Terminaux supportés On m'a dit que les procédures décrites dans ce document fonctionnaient (plus ou moins) pour les terminaux suivants : _NCD 19r, NCD 19c, NCD 15b_ et _NCD MCX_. 7.2 Références * Pages de manuel UNIX : _bootpd_(8), _tftpd_(8), _bootptab_(5), _xdm_(1x), _xfs_(1), _fsinfo_(1), _xset_(1), _inetd_(8), * HOWTOs : _Linux Ethernet HOWTO_, _Linux Net-3 (Networking) HOWTO_, * NCD Techtips Archive, * NCD Techtips Archive Mirror at CERN, * Depuis la sortie de la première version de ce _mini HOWTO_, j'ai découvert un document de NCD qui rend le mien presque inutile. Le NCDware Reference Manual couvre en détail presque tous les points de la configuration. * _NCDware System Administrator's Guide for UNIX Systems_, 7.3 Matériel utilisé pour la préparation de ce document * Terminal X : NCD modèle NCD19r avec écran monochrome 19 pouces 1280x1024, 8Mo de RAM. * Logiciel serveur X : NCDware V3.2.CV 19r_s * Machines-hôtes : IBM Cyrix 686 P150+ distribution Slackware (noyau Linux version 2.0.31), IBM Cyrix M2 200 MMX distribution Red Hat 5.0 (noyau version 2.0.32). * Carte réseau : carte Ethernet 10 base T (clone NE 2000) et répèteur multiport 8 voies. * Serveur de polices version 2, release 6300. 7.4 Remerciements Je voudrais remercier Michael de Lind van Wijngaarden, Jamal Hadi-Salim et Dwight Hodge pour l'aide apportée pour la préparation de ce document. 7.5 Problèmes restants * Est il possible (et raisonnable) de démarrer le serveur de polices par _inetd_ ? * Si la machine sur laquelle tourne le serveur de polices est arrêtée, puis redémarrée et le serveur de polices réactivé, il arrive que le terminal X n'arrive pas à accéder aux polices. Il faut redonner la liste des chemins d'accès des polices avec les menus de la console ou par xset. Pourquoi ? * Les procédures sont-elles les mêmes pour d'autres modèles de terminaux X ? * Quelle est la procédure pour démarrer le terminal X en utilisant NFS (Nework File System) ou RARP (Reverse Address Resolution Protocol)? * Les messages suivants apparaissent dans la fenêtre console du terminal X. Je suspecte qu'ils sont causés par des extensions _XFree86_ qui ne font pas partie du serveur X. Quelqu'un peut-il infirmer ou confirmer ? %XSERVER-I-NEWCLIENT, host "localhost" connected with blank authorization %XSERVER-W-NOEXTENSION, client attempted to use non-existent extension "BIG-REQ UESTS" %XSERVER-W-NOEXTENSION, client attempted to use non-existent extension "XKEYBOA RD" %XSERVER-W-NOEXTENSION, client attempted to use non-existent extension "XFree86 -Misc" * Verrons-nous un portage de Linux sur les terminaux X ? Cela semble improbable, mais Linux existe déjà sur d'autres plateformes improbables. 7.6 Contact Vous pouvez m'écrire à ian@permedia.ca pour tous commentaires, suggestions ou contributions.