Selon les tags présents sur cette page, celle-ci n'a pas été vérifiée pour une des versions LTS supportées d'Ubuntu.
Cette page est considérée comme vétuste et ne contient plus d'informations utiles.
Apportez votre aide…

Ceci est une ancienne révision du document !



Comment créer un terminal X ou recycler une vieille machine ? Serveur et client XDMCP

Motivation

Vous venez d'acquérir une bête de combat avec le processeur dernier cri et une carte graphique d'enfer capable à elle seule de faire fondre les dernières glaces du Groenland, avec un nombre de Giga de RAM dépassant le Google et des capacités de stockage (notez que pour ici il n'est pas nécessaire d'avoir la dernière bête de compet')… Vous aimeriez que les ressources de cet ordinateur ne soient pas sous-exploitées. Vous avez dans vos placards de vieux ordis et aimeriez les recycler. Cette page est alors faite pour vous!

Terminal X?

Le but de cette page est de permettre à une machine, généralement obsolète, d'utiliser les ressources (processeur, carte graphique, mémoire vive, disques, périphériques en tous genres) ainsi que la configuration (utilisateurs, programmes, données) d'une autre machine, généralement plus récente, au travers d'un réseau (ethernet/wifi). La machine obsolète, appelons-la le client ou encore le vieil ordi, affichera l'écran de login (kdm ou gdm) fourni par le serveur, le nouvel ordi. Vous pourrez ainsi vous loguer sous un utilisateur existant sur le serveur. Tout se passera comme si vous travailliez sur le serveur sauf que l'affichage se fait sur l'écran du client. Les programmes seront chargés dans la RAM du serveur, l'affichage sera calculé, compressé par le serveur, transmis au travers du réseau, puis décompressé par la carte graphique du client. Voilà pourquoi une configuration légère suffit pour le client.

Voir une alternative : XVNC - Un Terminal Serveur X par Vnc

Utilisation

Sur le vieil ordi vous pourrez utiliser vos applications de bureautique, web, mail, chat, regarder des videos, écouter de la musique, retoucher des images avec GIMP, … tout aussi vite que si vous étiez sur l'ordi rapide. Pratique pour une utilisation privée, pour les écoles, salle informatique. Même au bureau. En fonction du type d'applications utilisées, un serveur peut supporter une dizaine de clients. N'oubliez pas qu'en général le processeur d'un ordinateur de bureau est sous exploité (il est occupé en moyenne à 10%).

Alternatives

La solution proposée sur cette page nécessite qu'une distribution linux soit installée sur le client, il faut donc que cette machine possède un disque dur. Il existe une autre manière de recycler de vieilles machines et ce même si le client ne possède pas de disque dur. Il s'agit de LTSP (Linux Terminal Server Project). Néanmoins, il me semble que cette solution soit plus lourde à mettre en place (gestion du dhcp, de tftpboot, de nfs, des paquets, … en ce qui concerne le serveur et netboot pour le client).

Vocabulaire & Conventions

  • nouvel ordi: le serveur.
  • serveur: l'ordinateur qui partagera son serveur X sur lequel le client se connectera.
  • vieil ordi: le client.
  • client: l'ordinateur qui permettra d'afficher le serveur X du serveur (nouvel ordi).
  • XDMCP: X Display Manager Control Protocol, protocole permettant à une machine d'utiliser le X d'une autre machine par l'intermédiaire d'un réseau.
  • BACKSPACE: touche correction du clavier ←
  • Le masque de sous-réseau est 255.255.255.0
  • Le serveur a comme adresse IP 192.168.1.2
  • Le client a comme adresse IP 192.168.1.3

Un réseau Ethernet (TCP/IP ou IP) entre les deux machines est nécessaire, soit une des trois possibilités suivantes :

  • Un câble croisé pour relier les 2 ordinateurs directement
  • Un hub ou mieux un switch (ou switch-hub).
  • Un router Internet avec plusieurs portes

Suivant la méthode exposée ici, les communications entre les 2 ordinateurs ne sont pas cryptées et donc un quidam pourrait écouter les communications entre les deux ordinateurs.

Option 1 : La vitesse maximale et la plus grande sécurité seront atteintes en consacrant une carte Ethernet du serveur au réseau de terminaux X et une à la connexion Internet. Ainsi, le réseau Ethernet deviendra une sorte de câble VGA.

Option 2 : créer un tunnel de communications avec SSH. (expliqué par la suite)

Serveur

  • Côté processeur, carte graphique: à vous de voir, cela dépend de vos exigences.
  • Pour la RAM: il vous faut (1+1/2)*(valeur minimum) pour la distribution considérée. Au moment de rédiger cette page (janvier 2007) il vous faudra donc (1+1/2)*256Mo = 384Mo de RAM. Si vous désirez connecter plusieurs clients (disons n clients) au serveur il faudra … (1+n/2)*256Mo de RAM.
  • Carte réseau 10/100Mbps/Giga

Client

  • un Pentium 166 devrait suffire
  • 32Mo de RAM
  • disque de 3Go (cela dépend de la distribution linux que vous installerez)
  • carte graphique avec 2Mo de VRAM
  • Carte réseau 10/100Mbps/Giga
  • un écran, un clavier, une souris bien entendu

Une Ubuntu ou Kubuntu normale conviendra (pas la version serveur sinon il n'y aura pas de X).

Méthode graphique

Ubuntu

Sous Gnome donc, allez dans le menu Système ⇒ Administration ⇒ Configuration de l'écran de connexion, puis activez le XDMCP.

Pour Feisty, c'est le menu Fenêtre de connexion. - onglet Distante : identique à la locale. Puis - bouton Configurer XDMCP Ensuite (à adapter/corriger car n'arrivant pas à connecter l'utilisateur "administrateur" malgré le fait de cocher les options requises), allez dans le menu Système ⇒ Administration ⇒ Utilisateurs et groupes, ajouter de sorte qu'il y ait au moins un second utilisateur (autre que l'administrateur), sur le compte duquel se fera la connexion. Enfin redémarrer le pc (je ne suis pas certain que Alt-Ctrl-Backspace suffise, ou bien il faut une latence ?). Une fois ceci fait, passez directement ci-dessous à la section Connexion du client au Serveur, sous-section Méthode graphique. (Sautez la partie firewall, ne vous préoccupez pas des adresses ip, etc.)

Kubuntu

Pas de méthode graphique connue, voyez la méthode par la console, ce n'est pas compliqué.

Méthode par la console

Ubuntu

Lucid Lynx

Dans une console, en administrateur :

sudo gedit /etc/gdm/gdm.schemas

Rechercher l'entrée

xdmcp/Enable

et remplacer la variable

<default>false</default>

par

<default>true</default>
Karmic Koala

Dans une console, en administrateur :

sudo gedit /etc/gdm/custom.conf

A la fin du fichier, ajoutez :

[xdmcp]
Enable=true

Relancez gdm ou redémarrez l'ordinateur et c'est bon.

Autre

Dans une console et avec un utilisateur ayant les droits sudo adéquats

gksu gedit /etc/X11/gdm/gdm.conf

ou selon la version: par exemple sur intrepid c'est

gksu gedit /etc/gdm/gdm.conf

Recherchez la section [Xdmcp] (fin du fichier), mettez la variable Enable à true, cette partie du fichier devrait ressembler à ceci

[xdmcp]
# Distributions: Ship with this off.  It is never a safe thing to leave out on
# (...)
# the security of XDMCP.
Enable=true
Il se peut que les modifications de votre gdm.conf ne soit pas prise en compte, essayer dans se cas de modifier gdm.conf-custom

A complèter: comment controler l'accès par xdmcp (cf. section ci-dessous avec Xaccess)?

Kubuntu

Dans une console et avec un utilisateur ayant les droits sudo adéquats

kdesu kate /etc/kde3/kdm/kdmrc

Recherchez la section [Xdmcp] (fin du fichier), mettez la variable Enable à true, cette partie du fichier devrait ressembler à ceci

(...)
[Xdmcp]
Enable=true
Willing=/etc/kde3/kdm/Xwilling
Xaccess=/etc/kde3/kdm/Xaccess
Port=177

Ensuite éditez le fichier /etc/kde3/kdm/Xaccess

kdesu kate /etc/kde3/kdm/Xaccess

Ajoutez-y simplement l'adresse ip ou le hostname du client

192.168.1.3

Si vous voulez que tous les ordis de votre réseau puisse y accèder, ajoutez

192.168.1.*

Si vous désirez faire connaître aux autres ordis de votre réseau qu'ils peuvent se connecter au serveur par XDMCP, ajoutez

192.168.1.* CHOOSER BROADCAST

Sauvez le fichier et relancez maintenant le serveur X. Soit en vous déloguant de votre session graphique puis en appuyant sur CTRL-ALT-BACKSPACE. Soit dans une console (fermez vos programmes avant):

sudo /etc/init.d/kdm restart
Remplacer la partie kde3 par kde4 fonctionne également

Firewall

Exemple de commande iptables (dans un script gérant iptables)

  • Coté Serveur

Décommentez la ligne suivante pour que des clients puissent se connecter à l'ordinateur par XDMCP)

#iptables -A INPUT -p udp --dport 177 -j ACCEPT''
  • Coté Client

Décommentez la ligne suivante pour que l'ordinateur puisse se connecter par XDMCP à une machine distante)

#iptables -A INPUT -p tcp --dport 6001 -j ACCEPT''

à complèter

Il vous faut installer une distribution linux possèdant un serveur X. Selon les ressources du client, vous vous orienterez vers l'une ou l'autre distribution:

  • Ubuntu/Kubuntu: votre distribution préférée, facile à installer et à maintenir. Vous ne serez pas dépaysé. Optez pour une version LTS (Long Term Support): stable et supportée pendant longtemps. Rappelez-vous qu'il existe une version light pour les machines disposant de moins de 192Mo de RAM. Pourquoi pas une Xubuntu aussi.
  • Zenwalk: anciennement MiniSlack (PII, RAM 128 Mo, DD 2 Go)
  • Desktop Light Linux: DeLi linux (486, RAM 16 MB, DD jusqu'a 400MB)
  • ThinStation: particulièrement adapté, orienté client léger (thin client). ( x86, RAM 8 - 16 - 32 MB, kernel 2.4.x, Xfree86 4.3/3.3.6)

Si vous désirez réutiliser vos vieux mac G3, G4, G5 et les transformer en terminaux, optez pour (k)ubuntu ou Zenwalk. Vous pourrez vous connecter sans problème sur un serveur i386, i686, k7… bien évidemment. Cela vous évitera de devoir trouver des binaires pour les G3, G4, G5 (par exemple à ma connaissance il n'existe pas de version linux de Matlab ou de Mathematica pour les mac, évidemment il s'agit de logiciels propriétaires … honte à moi).

Par contre si vous désirez utiliser en parallèle la toute belle interface de Mac OS X et celle d'(k)ubuntu, pas de problèmes, jetez un oeil à la section Client sous Mac OS X.

Pour cette section, placez-vous devant le client.

A la demande

Pour vous connecter manuellement au nouvel ordi.

Méthode graphique

Pour Feisty : au moment où il affiche la demande de login, NE RIEN METTRE et prendre le menu option en bas à gauche. "connexion distante via XDMCP".

Le ou les serveurs apparaissent alors dans une fenêtre. Sélectionner celui choisi puis se connecter avec le compte du second utilisateur créé sur le serveur. (Ceci est requis tant qu'une session est ouverte sous le login de l'administrateur. Si vous fermez la session administrateur du serveur pour vous retrouver à la fenêtre de login, vous pourrez vous connecter en tant qu'administrateur sur le client) Aucun paramètrage supplémentaire n'est requis pour fonctionner et on est connecté. Ce qui suit doit, je pense, concerner des versions antérieures.

Sur l'écran de login (gdm, kdm ou xdm), cliquez sur Menu, choisissez Remote connection ou Connexion à distance. Ajoutez l'adresse IP du serveur 192.168.1.2, connectez-vous :) Si sur le serveur vous avez indiqué CHOOSER BROADCAST dans le fichier Xaccess alors, normalement, vous devriez voir dans cette fenêtre le nom/adresse IP du serveur.

Important : Depuis Karmic, GDM ne permet plus de lancer de sessions distantes xdmcp. IL existe un rapport de bug sur Launchpad à ce sujet. N'hésitez pas à indiquer que vous etes touchés par cette regression à cette adresse :Le rapport de bug est sur Launchpad. Indiquez que vous etes affectés par ce bug : plus il y a de personnes touchées, plus vite l'option sera ré-intégrée. : https://bugs.launchpad.net/gdm/+bug/408417 Une solution peut etre de remplacer GDM par KDM, mais ceci necessite l'installation de beaucoup de paquets supplémentaires

Pour Lucid, la connexion est possible par le menu "Terminal Server Client" mais

- elle ne se fait plus au login, mais après lancement de Lucid;

- elle nécessite l'installation préalable du paquet xnest sur le terminal pour dégriser l'option xdmcp;

- elle requiert une connexion par adresse ip (à corriger si nécessaire : je n'ai pas testé avec le nom du server)

- il ne semble plus y avoir de système de découverte automatique comme dans gdm du voisinage disponible pour connexion.

Un message d'erreur survient suite à des déconnexions intempestives. Si il est fait mention "Could not init font path… cyrillic", ajouter le paquet xfonts-cyrillic. Pour les autres erreurs, à complèter.

Par la console

Fermez une éventuelle session graphique. Appuyez sur CTRL-ALT-F1, loguez-vous avec le compte d'installation puis

sudo /etc/init.d/kdm stop # si vous utilisez gdm (ubuntu) tapez sudo /etc/init.d/gdm stop
X -query 192.168.1.2

:) Si vous désirez, sur la même machine (la vieille) avoir 2 écrans de connexions, l'une locale, l'autre distante (sur l'ordi rapide), tapez simplement dans une console (tjs sur le vieil ordi)

X -query 192.168.1.2 :1

Un écran de login devrait alors apparaître sur CTRL-ALT-F8, pour revenir à votre session locale, rendez-vous sur CTRL-ALT-F7.

NB: a partir d'ubuntu karmic, cela peut etre CTRL-ALT-F9 en raison d'un terminal read-only sur CTRL-ALT-F8.

Si vous avez une erreur du type

Fatal server error:
XDMCP fatal error: Manager unwilling Host unwilling

alors il faut vérifier le fichier Xaccess sur le serveur et s'assurer que l'adresse IP du client y figure.

Rajouter "-once" à la commande "X -query 192.168.1.2 :1" permet de quitter la session et retourner au tty en évitant le respawn par défaut de X

A chaque démarrage

Sur le client. Je suppose qu'il s'agit d'une ubuntu/kubuntu
Testez d'abord que le X -query … fonctionne, dans une console (CTRL-ALT-F1) exécutez

sudo /etc/init.d/kdm stop   #si gdm: sudo /etc/init.d/gdm stop
X -query 192.168.1.2

Créons un script. J'utilise vi comme éditeur de texte, remplacez vi dans les lignes de code suivantes selon vos préférences (nano, emacs, kate, gedit …):

sudo vi /usr/bin/myxdmcp

Ecrivez-y

#!/bin/sh
/usr/X11R6/bin/X -query 192.168.1.2 $@

Autorisons l'exécution de ce script

sudo chmod +x /usr/bin/myxdmcp

Faisons en sorte que ce script se lance lors d'un démarrage normal (non recovery) du vieil ordi. Si vous êtes sous kubuntu (ou si vous utilisez kdm comme gestionnaire de login), exécutez ces lignes

#kubuntu kdm
sudo rm -f /etc/rc2.d/S13kdm
sudo ln -s /usr/bin/myxdmcp /etc/init.d/xdmcp
sudo ln -s /etc/init.d/xdmcp /etc/rc2.d/S13xdmcp

si vous utilisez ubuntu (ou si gdm est votre gestionnaire de login):

#ubuntu gdm
sudo rm -f /etc/rc2.d/S13gdm
sudo ln -s /usr/bin/myxdmcp /etc/init.d/xdmcp
sudo ln -s /etc/init.d/xdmcp /etc/rc2.d/S13xdmcp

Redémarrez le vieil ordi et profitez :)

Pour revenir en arrière

Si vous voulez annuler ces dernières opérations et supprimer le lancement du X distant à chaque démarrage:

sudo rm -f /etc/rc2.d/S13xdmcp

Puis si kubuntu:

sudo ln -s /etc/init.d/kdm /etc/rc2.d/S13kdm

si ubuntu:

sudo ln -s /etc/init.d/gdm /etc/rc2.d/S13gdm

Respawn du serveur X (edgy sur le client)

Ceci fonctionne pour Edgy, je ne sais pas comment cela fonctionne sur les autres distrib linux.
Dans un environnement de production ou si les utilisateurs ne peuvent/ne doivent pas pouvoir relancer X en ligne de commande voici comment faire en sorte que le serveur X se lance s'il crash (par CTRL-ALT-BACKSPACE par exemple).

Après avoir suivi les instructions de la section A chaque démarrage, dans une console

sudo vi /etc/event.d/xdmcp

Ecrivez-y

# xdmcp
#
# This service maintains a X by xdmcp from the point the system is
# started until it is shut down again.

start on runlevel-2
#start on runlevel-3
#start on runlevel-4
#start on runlevel-5

stop on shutdown

respawn /usr/bin/myxdmcp

Redémarrez et testez avec des CTRL-ALT-BACKSPACE, le X distant devrait à chaque ("reboot du serveur?") se relancer.

Note : en essayant cette procédure sur un client Gutsy, pour que ça fonctionne, j'ai dû modifier le
respawn /usr/bin/myxdmcp

en

respawn
exec /usr/bin/myxdmcp

Le symptôme était un "unknown stanza" à propos de cette ligne de code dans mon /var/log/syslog. De plus la procédure "respawn du serveur X" est nécessaire au démarrage, la section A chaque démarrage ne suffisait pas dans mon cas. — trapangle Le 03/05/2008, à 10:56

Revenir en arrière

sudo rm -f /etc/event.d/xdmcp

Là ça se complique car il faudrait tunneliser une connexion UDP en plus d'une connexion TCP.

A priori c'est impossible à ce jour car il est impossible de tunnelliser une connexion UDP via SSH1 ou SSH2

Plus simple et communications aussi chiffrées.

Ce qui suit est tout à fait théorique et n'a pas été testé. D'ailleurs si vous pouviez donner un coup de main … faites signe sur le forum (cf. lien en haut de la page).

Sur le serveur

Installez Zebedee (il faut configurer ce serveur pour qu'il n'accepte que des connexions de la part du client, … à étudier)

sudo apt-get install zebedee

puis lancez le serveur Zebedee (-s) avec udp activé (-U) (sans doute le faire en sudo)

zebedee -s -U

Sur le client

Installez aussi Zebedee (cf. ci-dessus). Créez les tunnels (à faire peut-être en sudo):

zebedee -U xdmcp:192.168.1.2:xdmcp
zebedee x11:192.168.1.2:x11

Pour le dernier tunnel (x11), vous pouvez utiliser SSH, regardez la section ci-dessus. Lancez maintenant X

X -query localhost

Si vous placez le X sur :1 alors en ce qui concerne le 2e tunnel, utilisez plutôt

zebedee x11-1:192.168.1.2:x11-1

Attention, sur les distributions recentes, il est conseille d'utiliser pulseaudio en remplacement a ESD.

Sur le client. D'abord installer esd

sudo apt-get update
sudo apt-get install esound libesd0 libesd-alsa0

Ensuite avant de lancer X -query … lancez (sur une console CTRL-ALT-F1)

sudo esd -tcp -public

puis

X -query 192.168.1.2

Si ça ne fonctionne pas installez peut-être (non testé)

sudo apt-get install alsaplayer-esd

Ici vous conservez votre beau système Mac OS X, et à la demande, vous vous connecterez sur le serveur. Si vous désirez supprimer Mac OS X et transformer votre mac en linux box, rendez-vous ci-dessus à la section Installation du client.

  • Installez X11, à partir des CD/DVD de Mac OS X ou du site Apple (X11)
  • Lancez X11
  • La première fois, allez dans le menu X11, Préférences
  • Cochez la case "Permettre le plein écran"
  • Fermez
  • Ouvrer le terminal
  • Dans le terminal qui s'ouvre, executez la commande
/usr/X11R6/bin/X -query 192.168.1.2

Si ça ne fonctionne pas esseyez la commande suivante :

/usr/X11R6/bin/X :1 -query 192.168.1.2

Pour quitter le mode pleine écran tapez la combinaison de touche [alt]-[cmd]-[a].

Pour le son, regardez à la section Son de cette page, pour installer ESD, utilisez Fink.

Réglez les problème de clavier

Pour fixer les problèmes de clavier (non-sens du texte brouillé, touche shift ne fonctionne pas)

1. Connectez-vous à votre boîte de Ubuntu (U-Box) en passant par SSH: ssh -X <u-box-ip>

2. Générez vos clés carte

xmodmap -pke > ~/.xmodmaprc 

3. Déconnectez-vous de votre session SSH

4. Mac OS X sur votre machine (O-Box) ouvrir le terminal et le tapez

/usr/X11R6/bin/X -query <u-box-ip> 

5. Vous verrez Ubuntu login arriver. Connectez-vous comme d'habitude. Une invite vous demandera si vous voulez charger le fichier. Xmodmaprc. Ajouter le dossier à la case de gauche et cliquez sur OK. Vos clés devrait maintenant fonctionner normalement. L'exception de la touche Shift.

6. Sur la U-Box exécutez la commande

gedit ~/.xmodmaprc

7. Au début de l'ajouter ce fichier texte

clear shift
clear lock
clear control
clear mod1
clear mod2
clear mod3
clear mod4
clear mod5

8. À la fin du fichier ajouter ce texte

add shift = Shift_L Shift_R
add lock = Caps_Lock
add control = Control_L Control_R
add mod1 = Alt_L
add mod2 = Num_Lock
add mod3 = Mode_switch
add mod4 = Meta_L
add mod5 = Scroll_Lock

9. Enregistrez le fichier 10. Déconnectez-vous d'Ubuntu et de fermer la session X. 11. Exécutez

 /usr/X11R6/bin/X -query <u-box-ip> 

Voilà ça devrait fonctionner :).

A complèter (en attendant: http://helpful.knobs-dials.com/index.php/Remote_X_windows)

On peut aussi utiliser cygwin pour avoir un serveur X (http://www.cygwin.com/)

XMing est aussi une bonne solution permettant de travailler en mode fenêtre, plus leger que cygwin http://www.straightrunning.com/XmingNotes/

  • faire des screenshots pour les méthodes graphiques
  • utiliser update-rc.d -f kdm/gdm remove plutôt qu'un barbare rm /etc/rc2.d/kdm …
  • complèter les "à complèter" ;)

À compléter…


Contributeurs: Vincent Boucher.

Cette page se base sur la discussion Un vieil ordi rapide comme l'éclair ! développée dans le forum http://forum.ubuntu-fr.org section Trucs et Astuces. N'hésitez pas à passer sur ce fil de discussion en cas de problème.

  • tutoriel/comment_creer_un_terminal_x_ou_recycler_une_vieille_machine.1315482976.txt.gz
  • Dernière modification: Le 15/12/2011, 15:21
  • (modification externe)