Sous Windows, il est très simple de creer un reseau de type « poste a poste »: chaque utilisateur utilise ses propres programmes sur son ordinateur et peut partager des fichiers avec les autres.
Un tel réseau souffre de plusieurs problèmes:
- Chaque ordinateur doit être suffisamment puissant pour faire tourner les applications
- Les applications doivent etre licenciées et installées sur chaque ordinateur
- Chaque utilisateur est limité par la puissance de l’ordinateur sur lequel il travaille.
En utilisant des ordinateurs sous Linux, plusieurs utilisateurs peuvent travailler sur un même ordinateur à partir de « terminaux légers ». On utilisera le déportage d’affichage de X-Window.
Ce document se base sur un article de Yves Bailly (http://www.kafka-fr.net), « Installez un Terminal X pour bebe » (fr) paru dans LM 52 de Juillet-Aout 2003.
Même s’il est possible de créer des terminaux sans disque dur qui téléchargeront directement les logiciels sur le serveur, nous allons installer un minimum d’applications sur les clients pour réduire la charge réseau.
Yves Bailly conseille de conserver une vieille distribution linux pour ces vieux terminaux, car les distributions récentes ne fournissent plus les drivers pour les vieilles cartes graphiques.
2. Le matériel et les logiciels
2.1. Matériel nécessaire
Les ordinateurs des utilisateurs (les « clients » ou les « terminaux ») peuvent être très modestes, puisque l’ordinateur central (le « serveur ») fera la plupart du travail.
Yves Bailly utilise les ordinateurs suivants:
Cient:
- Processeur 486 DX2-66
- 16Mo de mémoire (24Mo pour éviter de creer un fichier de swap sur le disque dur)
- 200Mo de disque dur
- une carte video S3 Vision 64 avec 1 Mo de mémoire
- un écran 15″ pour afficher du 800×600
- une carte réseau de 10Mbps
- Distribution Linux Slackware 9 (X-Window 3.3.6)
Serveur:
- Processeur Pentium II 350Mhz
- 256 Mo de mémoire
- une carte réseau de 10Mbps
- Distribution Linux Debian SID
et il affirme que les applications tel que Mozilla ou OpenOffice.org sont parfaitement utilisables!!
On trouvera des ordinateurs beaucoup plus puissants aujourd’hui, donc aucun problème de performance ne sont à prévoir.
En utilisant des logiciels libres et gratuits aucun problème du point de vue légal.
Note: Chaque terminal léger augmente la charge de travail du serveur. Réserver au moins 32Mo de mémoire par client. Prévoir un espace disque suffisant sur le serveur pour que chaque utilisateur puisse stocker ses données.
2.2. Logiciels
Il n’y a aucune limitation pour les logiciels. Chaque utilisateur peut utiliser les logiciels qu’il souhaite, mais les applications devront être installées sur l’ordinateur central (le « serveur »).
Par exemple, si on souhaite créer un terminal pour un enfant, Yves Bailly conseille TuxPaint (programme de dessin simplifié), GCompris, TuxType. On pourra voir du côté du projet Debian-Edu pour des programmes d’éducation.
3. Configuration de l’ordinateur central
Il faudra modifier quelques fichiers de configuration pour que les utilisateurs puissent travailler sur le serveur mais que l’affichage soit déporté sur le terminal.
Cet article traitera de X-Window et KDE. Même si KDE nécessite X-Window, le gestionnaire de connexion standard kdm (KDE desktop manager) utilise ses propres fichiers de configuration (situés dans /etc/kde3/kdm).
Sous X-Window, le gestionnaire de connexion est xdm (X-Window desktop manager) et les fichiers de configuration sont situés sous /etc/X11/xdm.
Note: Les noms des fichiers de configuration sont identiques, mais sont sensibles à la casse (kdm n’est pas équivalent à KDM ou Kdm!)
L’interface graphique X-Window est basée elle aussi sur un modèle client-serveur, donc on trouvera un serveur et un client X sur chaque ordinateur. Dans une configuration standard, le serveur et le client sont situés sur la même machine, mais rien n’interdit au client de se connecter à d’autres serveurs X situés sur d’autres machines. C’est cette configuration qui est expliquée dans la suite. Ceci n’est qu’un modèle simplifié du réel mode de fonctionnement de X-Window.
3.1. Modifier la configuration du réseau: fichier Xservers sur l’ordinateur central
Le fichier Xservers (situé à /etc/X11/xdm/Xservers ou /etc/kde3/kdm/Xservers selon le gestionnaire de connexion choisi) contient la liste des serveurs X qui tournent sur la machine (en général un seul) et la liste des terminaux qui lui sont raccordés.
Par défaut, le fichier de configuration devrait contenir une ligne telle que:
:0 local@tty1 /etc/X11/X -dpi 75 -no-listen tcp vt7
C’est cette ligne de commande qui démarre le serveur X (et l’interface graphique) sur la machine.
3.1.1 Accepter les connexions des clients
L’option -no-listen tcp indique au serveur X qu’il ne doit pas répondre aux sollicitations d’autres serveurs du réseau.
Or comme nous voulons que l’ordinateur central accepte les connexion des clients, nous allons devoir modifier le fichier de configuration XXservers de l’ordinateur serveur pour avoir:
:0 local@tty1 /etc/X11/X -dpi 75 vt7
Conseil: faire une copie de la ligne (Utiliser les commandes yy puis p sous l’éditeur vi), et commenter la ligne originale en ajoutant un préfixe # en début de ligne
3.1.2 Reconnaître les clients
3.1.2.1 DNS
En général, chaque client du réseau a un nom qui est unique. Un serveur DNS (Domain server name) indique la correspondance entre l’adresse IP et le nom de l’ordinateur. Pour un petit réseau, on peut se passer d’un serveur DNS en utilisant le fichier /etc/hosts
Par exemple, si le client porte le nom tx01, et que son adresse sur le réseau est 192.168.2.101, on insèrera la ligne suivante dans le fichier /etc/hosts du serveur:
192.168.2.101 tx01
La modification sur chacun des ordinateurs n’est pas obligatoire, car il est peu probable que les terminal communiquent entre eux (toutes les donnees sont sur l’ordinateur central).
3.1.2.2 Inscription du terminal dans l’ordinateur central
Le serveur accepte les connections et il connait le nom du terminal que nous voulons lui connecter. Il ne reste donc qu’à inscrire le terminal comme client pour le serveur X.
Insérer la ligne suivante dans le fichier Xservers
tx01:0 foreign
Au final, le fichier Xservers (dans /etc/X11/xdm si vous utilisez xdm, ou /etc/kde3/kdm pour kdm) doit contenir les deux lignes suivantes:
#Ligne originale: le serveur n’accepte pas de connexions de l’extérieur
#:0 local@tty1 /etc/X11/X -dpi 75 -no-listen tcp vt7
:0 local@tty1 /etc/X11/X -dpi 75 vt7
tx01:0 foreign
On peut insérer d’autres terminaux en insérant les noms dans le fichier /etc/hosts et une ligne du type tx02:0 foreign dans le fichier Xservers.
3.2. Autoriser les clients à se connecter au serveur X
On utilisera le fichier Xaccess pour définir les terminaux autorisés à se connecter (On peut vouloir interdire aux clients de se connecter durant un certain temps, le temps d’une mise à jour sur l’ordinateur central par exemple).
#*
#* CHOOSER BROADCAST
Le # en début de ligne indique que ces deux options sont ignorées, et traitées comme des commentaires.
Si on veut autoriser tous les clients à se connecter, il suffit d’effacer le # de la première ligne:
#Tous les clients listés dans Xservers sont autorisés à se connecter
*
#* CHOOSER BROADCAST
La ligne
* CHOOSER BROADCAST
est utilisée dans une configuration à plusieurs serveurs. Voir la partie 6 pour plus de détails.
Définir une liste de clients autorisés à se connecter:
On laisse la ligne * (tous les clients) en commentaire et on ajoute une ligne par client l’autorisant ou non à se connecter.
#*
#Le client tx01 est autorisé à se connecter
tx01
#Tous les ordinateurs du domaine MyDomain.net sont autorisés à se connecter
*.MyDomain.net
#Le client MyServerB n’est PAS autorisé à se connecter
!MyServerB
3.3. Autoriser les clients à se connecter au gestionnaire de connexions (XDM, KDM…)
3.3.1 XDM
On utilisera ici le fichier
/etc/X11/xdm/xdm-config
et on commentera la ligne
DisplayManager.requestPort: 0 !XDM ne répond pas aux requêtes
On aura ainsi:
!XDM répond maintenant aux requêtes
!DisplayManager.requestPort: 0
3.3.2 KDM
On utilisera ici le fichier
/etc/kde3/kdm/kdmrc
[Xdmcp]
Enable=false #KDM ne répond pas aux requêtes
[Xdmcp]
#KDM répond maintenant aux requêtes
Enable=true
Veiller à relancer le serveur X sur l’ordinateur central pour que les changements soient pris en compte (se délogger et [CTRL]+[ALT]+[Backspace] pour relancer le serveur X)
4. Configuration du terminal
4.1. Système d’exploitation
Dans une telle configuration, le terminal ne contient que le minimum: un système d’exploitation Linux avec un système X-Window minimal (seul le serveur X et les polices). On peut ajouter le paquet SSH pour que l’administrateur puisse se connecter à distance sur la machine.
4.2. Limiter le nombre de terminaux textes
Par défaut, six terminaux textes sont créés sur un système Linux (accessible par CTRL+ALT+[1..6]).
Afin de limiter la charge sur le système, on peut limiter ce nombre à une ou deux.
Dans le fichier /etc/inittab, on trouve six lignes du type
c1:1235:respawn:/sbin/agetty 38400 tty1 linux
Commentez les 4 dernières lignes en ajoutant un # en début de ligne.
4.3. Configuration de X-Window sur le terminal
La configuration de X-Window se fait par l’utilitaire de configuration xf86config.
Il est vivement conseillé d’avoir le maximum de détails techniques sur le matériel du terminal: puce utilisée par la carte graphique, résolutions supportées par l’écran, ses fréquences horizontales et verticales…
En cas de doute, commencer par la résolution VGA (640×480) que supporte tous les moniteurs, puis pousser les résolutions.
Une résolution de 800×600 en 16 bits (65536 couleurs) est un minimum, le 1024×860 restant plus confortable.
Pour tester les réglages, lancer X-Window avec la commande
# X
Note: Les commande sont sensibles à la casse -> Taper X en majuscule!
Si tout se passe bien, l’écran devrait afficher un fond moiré et le curseur de la souris devrait être un gros X.
Quitter le serveur avec [CTRL]+[ALT]+[Backspace].
4.4. Configuration du réseau
Dans la configuration du serveur, nous avons défini que le terminal avait pour nom tx01 et 192.168.2.101 comme adresse IP.
Pour la distribution Slackware, Yves Bailly indique qu’il faut indiquer le nom de l’ordinateur dans le fichier /etc/HOSTNAME et mettre en place le réseau dans le script /etc/rc.d/rc.inet1. Ces manipulations sont spécifiques à chaque distribution linux, donc consulter la documentation.
C’est tout! On indiquera l’adresse IP du serveur lors de la connexion.
5. Connexion du terminal au serveur
Le serveur s’appele MyServerA et a l’adresse IP 192.168.2.100
Il peut être intéressant d’insérer une correspondance entre le nom du serveur et son adresse IP dans le fichier /etc/hosts
192.168.2.100 MyServerA
Ainsi, on pourra utiliser MyServerA plutôt que son adresse IP.
Le terminal se connectera au serveur avec la commande
# X -ac -query 192.168.2.100
La commande suivante devrait fonctionner aussi le fichier /etc/hosts contient le nom du serveur:
# X -ac -query MyServerA
L’option -ac permet au serveur X de l’ordinateur central de répondre au terminal (ici aussi, les requêtes extérieures sont refusées par défaut)
L’option -query [Serveur] indique que la connexion doit se faire sur le serveur indiqué en paramètre (192.168.2.100 ou MyServerA dans notre exemple)
Si tout se passe bien, l’écran de connexion de l’ordinateur central devrait s’afficher.
A partir de ce moment, l’utilisateur travaille du terminal comme s’il se trouvait sur le serveur!
Exécuter la connexion au démarrage du terminal:
Là aussi, la commande à éxécuter dépend de la distribution Linux utilisée sur le terminal, donc lire la documentation!
Pour Slackware, Yves Bailly indique d’insérer la ligne suivante dans le fichier /etc/inittab:
tx:3:respawn:/usr/X11R6/binX -ac -query 192.168.2.100
(le runlevel par défaut est ici 3, ce qui n’est pas le cas dans toutes les distributions!)
6. Configuration multi serveurs
Le terminal peut se connecter à plusieurs ordinateurs centraux. Le choix du serveur se fera à la connexion.
Pour chaque serveur, il faut refaire les étapes décrites dans la partie 3: autoriser la connexion des terminaux sur l’ordinateur central, inscrire les terminaux…
Pour le point 3.2 (« Autoriser les clients à se connecter au serveur X »), on utilisera la ligne
* CHOOSER BROADCAST
X-Window fera alors une recherche des serveurs X disponibles sur le réseau.
Comme il est probable que la liste d’ordinateurs centraux n’évolue que rarement, on peut définir une liste de serveurs
#2 serveurs sont disponibles: MyServerA et MyServerB
* CHOOSER MyServerA MyServerB
On peut faire cette manipulation sur chacun des serveurs, mais il est plus simple de demander au premier serveur la liste des serveurs sur le réseau.
Le terminal se connectera alors avec la commande
# X -ac -indirect 192.168.2.100
La commande suivante devrait fonctionner aussi le fichier /etc/hosts contient le nom du serveur:
# X -ac -indirect MyServerA
On obtiendra alors une liste des serveurs (« ordinateurs centraux ») sur lequel le terminal est capable de se connecter.
Note: la fenêtre de choix du serveur indique des informations sur la charge de l’ordinateur (une charge inférieure à 1 indique que le serveur a encore beaucoup de ressources) et le nombre d’utilisateurs connectés. Ces données sont fournies par le programme Xwilling qu’on trouve dans /etc/X11/xdm (xdm), ou /etc/kde3/kdm (kdm).
6. Autres solutions
Même si elle paraît compliquée, cette solution permet de monter un réseau local assez rapidement, par exemple pour une école (chaque élève se connecte sur un ordinateur central).
6.1 FreeNX
Le protocole X-Window charge le réseau, donc pas très adapté à une utilisation d’un ordinateur à distance (le haut débit n’est pas disponible partout). Il existe aujourd’hui une solution de compression qui semble très efficace. Son nom (provisoire?) est freeNX (http://developer.berlios.de/projects/freenx/).
freeNX est basé sur les librairies de la société NoMachine (http://www.nomachine.com/), placée sous GPL. Cette solution est réputée très rapide, et prétend avoir une solution utilisable sur une connexion par un simple modem! Pour plus de détails, voir cette présentation (http://wiki.kde.org/tiki-index.php?page=NX%2FFreeNX+integration+into+KDE). Vous pouvez tester FreeNX avec le live-cd Knoppix (http://www.knoppix-fr.org/).
Liens:
Voir le journal LinuxFr: http://linuxfr.org/~BruceLeNain/17414.html: Journal
http://www.k-ribou.com/pub/article55.html (fr): FreeNX, Installation et configuration sous Debian
6.2 LTSP – Linux Terminal Server Project
LTSP (http://www.ltsp.org/) est un projet qui vise à créer un package Debian qui permettra d’utiliser de vieux ordinateurs comme terminaux à un serveur linux.
6.3 SkoleLinux (Debian Edu)
SkoleLinux (http://www.skolelinux.org/fr/) est une distribution Linux basée sur Debian destinée aux écoles.
7. References
http://www.iia.fr/IMG/pdf/clients-legers.pdf: Presentation technique « Client
leger sous Linux »
Mots-clefs : Articles, Techniques