Mini-HOWTO LBX <author>Paul D. Smith, <tt><htmlurl url="mailto:psmith@baynetworks.com" name="psmith@baynetworks.com"></tt>, trad. : <htmlurl url="mailto:xglattard@aol.com" name="Xavier Glattard"> <date>v1.04, 11 Décembre 1997, trad. Juin 1997 <abstract> LBX (Low Bandwidth X, X Faible Bande-passante) est une extension du serveur X qui effectue une compression du protocole X. En d'autres termes, elle permet, dans le cas d'applications X et d'un serveur X séparés par une connexion réseau lente, d'accélérer l'affichage et de réduire les temps de réponse. </abstract> <toc> <sect>Introduction <p> <em/Low-Bandwidth X/ (LBX) prend en compte le fait que de nos jours tout le monde ne travaille pas qu'à une ou deux connexions rapides du serveur sur lequel tournent ses applications. Le protocole X peut générer un trafic extraordinaire sur votre réseau, en particulier pour des choses apparemment simples telles que la création de nouvelles fenêtres. Quiconque aura essayé d'utiliser X à travers une connexion modem à 28,8 (ou même mieux) vous le dira : créer de nouvelles fenêtres X nécessite une patience à toute épreuve. Le principe est le suivant : LBX est un système de compression et de cache conçu pour minimiser le trafic X généré entre deux systèmes. <sect> Quel est le statut de LBX ? <p> En tant que composant de la publication X11R6.3 du Consortium X datant de décembre 1996, LBX est une authentique extension du protocole X. Pour les utilisateurs de XFree86, cela correspond à XFree86 version 3.3. <sect> Pourquoi utiliser LBX ? <p> Si vous utilisez un modem pour vous connecter à un prestataire de service, et que vous exécutez des applications X sur des machines distantes, l'affichage (variables DISPLAYs) étant dirigé sur votre machine (et vice versa), alors LBX accélérera la connexion. De même, si vous redirigez l'affichage d'autres systèmes à travers des réseaux étendus (d'autres pays, par exemple) ou à travers des connexions lentes, LBX peut vous être utile. <sect> Pourquoi ne pas utiliser LBX ? <p> LBX est inutile, naturellement, si vous exécuter des applications localement, ou si vous n'utilisez pas X. De même, si vous travaillez sur un réseau local rapide, LBX ne vous sera pas d'une grande utilité. Certains disent : "si LBX réduit le trafic réseau, ne pourrait-on pas l'utiliser sur des réseaux locaux rapides ?" On pourrait, si le but est de réduire le trafic sur le réseau. Néanmoins, cela introduirait du cache et de la compression, qui consomment des ressources à chaque extrémités (de la mémoire supplémentaire pour le cache, et du temps CPU pour la décompression). Si votre liaison est plutôt performante, LBX causera sans doute un ralentissement global du réseau. <sect> Comment fonctionne LBX ? <p> LBX fonctionne en introduisant un <em/serveur proxy/ du côté du client, lequel se charge du cache et de la compression. Le serveur X sait que le client utilise un serveur proxy, et décompresse en conséquence. Voici un exemple de configuration classique pour des clients X distants. Dans la suite, LOCAL représentera toujours la station qui se trouve en face de vous, et dont vous regardez le moniteur, et DISTANT sera la station distante, sur laquelle votre application est exécutée. <tscreen><code> DISTANT LOCAL +-----+ +-----+ | APP |-\ Réseau +-----------+ | |\ +-----+ \-------------------------->| SERVEUR X |=>| || +-----+ / (Protocole X) +-----------+ +-----+\ | APP |-/ /_____// +-----+ </code></tscreen> Lors de l'utilisation de LBX, un serveur proxy (<tt/lbxproxy/) est introduit du côté distant, et les applications communiquent avec ce processus et non plus directement avec le serveur LOCAL. Ce processus se charge alors du cache et de la compression des requêtes X et les transmet. Cela ressemble à ça : <tscreen><code> DISTANT LOCAL +-----+ +-----+ +-------+ Réseau +-----------+ | |\ | APP |->| PROXY |------------------------>| SERVEUR X |=>| || +-----+ +-------+ (LBX/Protocole X) +-----------+ +-----+\ +-----+ / /_____// | APP |--/ +-----+ </code></tscreen> Le détail des fonctions de cache et de compression de LBX sort du cadre de ce document. <sect> De quoi ai-je besoin pour utiliser LBX ? <p> Vous avez besoin sur votre système LOCAL d'un serveur X compilé avec l'extension LBX. A moins que vous n'ayez explicitement demandé le contraire, les serveurs X11R6.3 incluent automatiquement LBX à la compilation. Par conséquent, tous les serveurs XFree86 3.3 incluent LBX par défaut. Vous pouvez utiliser la commande <tt/xdpyinfo/ afin de vérifier si votre serveur dispose de l'extension LBX : exécutez <tt/xdpyinfo/ et vérifiez la liste qui suit "number of extensions" (nombre d'extensions); vous devez voir "LBX" dans cette liste. Ensuite, vous avez besoin d'un programme <tt/lbxproxy/ compilé pour le système DISTANT. C'est le point le plus délicat. Si le système distant n'est pas du même type que votre système local, le <tt/lbxproxy/ de votre système local ne sera pas bon, évidement. Malheureusement, aucune distribution de <tt/lbxproxy/ n'a jamais été publiée. Par conséquent, vous devez soit (a) obtenir et compiler la majeure partie, sinon la totalité, de X11R6.3 pour le système distant, soit (b) trouver quelque part un exécutable <tt/lbxproxy/ précompilé pour votre système. Cette dernière solution est naturellement la plus simple. <tt/lbxproxy/ est constitué d'un unique fichier exécutable. Aucun fichier de configuration, de ressources, etc. ne lui est associé. <sect> De quoi n'ai-je pas besoin pour utiliser LBX ? <p> Le système DISTANT <bf/n'a pas/ besoin d'un nouveau serveur X (dans tous les cas, le système DISTANT n'a besoin d'exécuter <em/aucun/ serveur X). L'application que vous voulez exécuter <bf/n'a pas/ besoin d'être liée à une version spéciale de X, ou à une bibliothèque spéciale; j'utilise régulièrement des applications commerciales X11R5 à travers LBX sans aucun souci. Vous <bf/n'avez pas/ besoin de droits d'accès "root" ou privilégiés sur le système DISTANT; le processus <tt/lbxproxy/ utilise vos droits d'accès normaux. De plus, vous pouvez l'exécuter depuis votre répertoire personnel : il n'a pas besoin d'être installé à un endroit particulier. <sect> Comment je démarre LBX ? <p> Bon, nous y voilà... après tout, rien de bien compliqué jusqu'à présent. Remplacez dans la suite LOCAL et DISTANT respectivement par les noms d'hôte de votre station locale et du système distant (ne mélangez pas tout!). Sur LOCAL : <enum> <item> Démarrez votre serveur X. <item> Donnez les droits d'accès du système distant auprès de votre serveur X. Avec la méthode de la liste d'hôtes, tapez <tt/xhost +DISTANT/. Si vous utilisez <tt/xauth/ cela risque de ne pas être suffisant; consultez le manuel <em/xauth(1)/ pour plus d'informations. Vous pourriez consulter efficacement le mini howto <url url="http://www.freenix.fr/linux/HOWTO/mini/Remote-X-Apps.html" name="Remote X Apps"> si vous n'êtes pas familier avec la configuration des droits d'accès distants sous X. </enum> Sur DISTANT : <enum> <item> Démarrez <tt/lbxproxy/ en précisant la redirection vers le serveur X LOCAL, comme cela : <tscreen><verb> $ lbxproxy -display LOCAL :0 :1 &ero; </verb></tscreen> Cette commande indique à <tt/lbxproxy/ d'utiliser l'écran ("display") <tt/ :1/ sur le système DISTANT; si ce système dispose déjà de plus d'un écran, vous pouvez choisir <tt/ :2/, ou n'importe quoi d'autre. <item> Définissez votre variable d'environnement DISPLAY afin qu'elle pointe vers l'écran géré par <tt/lbxproxy/, au lieu de l'écran habituel : <tscreen><verb> $ DISPLAY= :1 $ export DISPLAY </verb></tscreen> Ou, si vous utilisez csh ou un de ses clones : <tscreen><verb> % setenv DISPLAY :1 </verb></tscreen> <item> Si vous utilisez <tt/xauth/, vous aurez à vérifier que votre "cookie" est accessible localement. Consultez le mini howto <url url="http://www.freenix.fr/linux/HOWTO/mini/Remote-X-Apps.html" name="Remote X Apps"> pour plus d'informations à ce propos. <item> Démarrez vos applications X! </enum> Voilà; toute application démarrée vers l'écran <tt/ :1/ utilisera LBX. Naturellement, il n'y a aucune raison pour que vous ne puissiez pas également démarrer des applis X vers <tt/LOCAL :0/ et les utiliser simultanément. <sect>Problèmes <p> Voici quelques problèmes courants : <descrip> <tag/Q)/ <tt/lbxproxy/ se termine avec l'erreur "access denied" ("accès refusé"). <tag/R)/ Cela signifie que le système LOCAL n'accepte pas les connexions en provenance du système DISTANT pour des raisons d'autorisation. Consultez le mini howto <url url="http://www.freenix.fr/linux/HOWTO/mini/Remote-X-Apps.html" name="Remote X Apps"> pour plus de détails à ce sujet. En guise de test simple, essayez de lancer sur DISTANT une appli simple, comme <tt/xclock/, en l'affichant sur le système local, sans utiliser <tt/lbxproxy/ : <tscreen><verb> $ xclock -display LOCAL :0 </verb></tscreen> Si cela ne marche pas, le problème vient de <tt/xhost/, ou d'une simple anomalie de X, pas de LBX. </descrip> <sect>Documentation <p> La seule documentation fournie avec une distribution X standard est probablement la page de manuel de <em/lbxproxy(1)/. Si vous pouvez consulter l'arborescence des sources de X, de très intéressantes informations sont disponibles là : <itemize> <item><tt>xc/doc/specs/Xext/lbx.mif</tt> (Framemaker MIF) <item><tt>xc/doc/hardcopy/Xext/lbx.PS.Z</tt> (Postscript compressé) <item><tt>xc/doc/hardcopy/Xext/lbxTOC.html</tt> (HTML) </itemize> Une discussion plus précise à propos des algorithmes spécifiques à LBX est disponible là : <itemize> <item><tt>xc/doc/specs/Xext/lbxalg.mif</tt> (Framemaker MIF) <item><tt>xc/doc/specs/Xext/lbxalg.PS.Z</tt> (Postscript compressé) </itemize> Si vous n'avez pas accès à l'arborescence des sources de X11, vous pouvez obtenir ces fichiers depuis <url url="ftp ://ftp.x.org/pub/R6.3/xc/doc/" name="le site FTP du Consortium X">. <sect>Alternatives <p> Si, pour quelque raison, vous n'aimez pas <tt/lbxproxy/ : vous n'êtes pas satisfait des performances, ou bien ça ne marche pas pour vous, ou vous ne voulez pas vous casser la tête à créer un lbxproxy pour le système distant, ou encore vous avez tout simplement envie d'essayer d'autres solutions, alors il existe au moins un autre kit de compression du protocole X (quelqu'un en connaît d'autres?) <sect1>dxpc - Differential X Protocol Compressor <p> <itemize> <item>Auteur initial : <htmlurl url="mailto:brianp@cnet.com" name="Brian Pane <brianp@cnet.com>"> <item>Actuel responsable : <htmlurl url="mailto:lightborn@mail.utexas.edu" name="Zachary Vonler <lightborn@mail.utexas.edu>"> </itemize> <tt><url url="http://ccwf.cc.utexas.edu/~zvonler/dxpc/" name="dxpc"></tt> (Differential X Protocol Compressor, Compresseur Différentiel de protocole X) fonctionne pour l'essentiel de la même manière que LBX. Cependant, afin d'éviter d'avoir à implémenter une extension X et à modifier le code du serveur X, <tt/dxpc/ utilise <bf/deux/ proxys : le premier s'exécute sur le système DISTANT, comme <tt/lbxproxy/, et l'autre s'exécute sur l'hôte LOCAL. Le proxy de l'hôte DISTANT intervient dans la communication entre les clients X et le proxy de l'hôte LOCAL, tandis que le proxy de l'hôte LOCAL intervient dans la communication entre le serveur X et le proxy de l'hôte DISTANT. Ainsi, à la fois pour les clients X et pour le serveur X, cela ressemble à une connexion X normale. <sect2>Avantages <p> <itemize> <item> Comme il s'agit d'une application complètement indépendante qui n'utilise aucune particularité de X, elle est plus simple à compiler et à installer. <item> Elle est maintenue séparément, aussi vous n'avez pas à attendre la publication par l'OSF de nouvelles versions de X pour profiter d'améliorations ou de corrections. <item> Elle fournie des informations et des statistiques plus nombreuses et plus complètes que <tt/lbxproxy/. </itemize> <sect2>Inconvénients <p> <itemize> <item> Ce n'est pas un composant standard de X; vous devez l'obtenir et l'installer séparément. <item> dxpc est légèrement plus complexe à configurer, puisqu'un proxy est nécessaire sur LOCAL, en plus du proxy DISTANT. </itemize> <sect2>Où obtenir dxpc? <p> Le code source de dxpc est disponible à <url url="ftp ://ftp.x.org/contrib/utilities/" name="ftp.x.org">. Une page web sur dxpc donne beaucoup d'informations intéressantes, y compris des liens vers la liste de diffusion dxpc, un accès au code source, et un certain nombre d'exécutables précompilés pour différentes plates-formes : <url url="http://ccwf.cc.utexas.edu/~zvonler/dxpc/"> <sect1>Ssh (Secure Shell) <p> <htmlurl url="mailto:lbxhowto@sizone.org" name="Ken Chase <lbxhowto@sizone.org>"> précise que <tt><url url="http://www.cs.hut.fi/ssh/" name="ssh"></tt> peut être utilisé pour la compression. Bien que sa principale fonction soit de sécuriser, il compresse également les données qu'il envoie. Ainsi, si vous utilisez X à travers une connexion <tt/ssh/, vous obtiendrez automatiquement un certain taux de compression. <sect1>Lequel choisir ? <p> Je ne sais pas. LBX et <tt/dxpc/ apportent certainement tous les deux une meilleure compression que <tt/ssh/. Bien sûr, <tt/ssh/ a pour lui l'avantage de la sécurisation. Et bien sûr, il n'y a aucune raison pour que vous ne puissiez pas utiliser à la fois <tt/ssh/ et l'un des deux autres, afin d'obtenir une bonne compression et une sécurisation. Il ne devrait pas être très difficile de réaliser un test comparatif de ces différentes solutions, afin de disposer de mesures statistiques et subjectives des performances. Mais je ne l'ai pas fait, et je ne connais personne qui l'ait fait. </article>