Mini-HOWTO LBX
 Paul  D. Smith, [email protected], trad. : Xavier Glat-
 tard
 v1.04, 11 Decembre 1997, trad. Juin 1997

 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
 separes  par une connexion reseau lente, d'accelerer l'affichage et de
 reduire les temps de reponse.

 11..  IInnttrroodduuccttiioonn

 _L_o_w_-_B_a_n_d_w_i_d_t_h _X (LBX) prend en compte le fait que de nos jours tout le
 monde  ne travaille pas qu'a une ou deux connexions rapides du serveur
 sur lequel tournent ses applications.

 Le protocole X peut generer un trafic extraordinaire sur votre reseau,
 en  particulier  pour  des  choses  apparemment  simples telles que la
 creation de nouvelles fenetres. Quiconque aura essaye d'utiliser  X  a
 travers  une  connexion  modem  a  28,8 (ou meme mieux) vous le dira :
 creer de nouvelles fenetres X necessite une patience a toute  epreuve.

 Le  principe  est le suivant : LBX est un systeme de compression et de
 cache concu pour minimiser le trafic X genere entre deux systemes.

 22..  QQuueell eesstt llee ssttaattuutt ddee LLBBXX ??

 En tant que composant de la publication X11R6.3 du Consortium X datant
 de  decembre  1996,  LBX est une authentique extension du protocole X.
 Pour les utilisateurs de XFree86, cela correspond  a  XFree86  version
 3.3.

 33..  PPoouurrqquuooii uuttiilliisseerr LLBBXX ??

 Si  vous  utilisez  un  modem  pour vous connecter a un prestataire de
 service, et que vous executez des  applications  X  sur  des  machines
 distantes,  l'affichage  (variables  DISPLAYs)  etant dirige sur votre
 machine (et vice versa), alors LBX accelerera la connexion.  De  meme,
 si  vous redirigez l'affichage d'autres systemes a travers des reseaux
 etendus (d'autres pays, par  exemple)  ou  a  travers  des  connexions
 lentes, LBX peut vous etre utile.

 44..  PPoouurrqquuooii nnee ppaass uuttiilliisseerr LLBBXX ??

 LBX  est  inutile,  naturellement,  si  vous executer des applications
 localement, ou si vous n'utilisez pas X.

 De meme, si vous travaillez sur un reseau local rapide,  LBX  ne  vous
 sera  pas  d'une  grande  utilite. Certains disent : "si LBX reduit le
 trafic reseau, ne pourrait-on pas l'utiliser sur  des  reseaux  locaux
 rapides  ?"  On  pourrait,  si  le but est de reduire le trafic sur le
 reseau. Neanmoins, cela introduirait du cache et  de  la  compression,
 qui  consomment  des  ressources  a  chaque  extremites (de la memoire
 supplementaire pour le cache, et du temps CPU pour la  decompression).
 Si  votre  liaison  est  plutot performante, LBX causera sans doute un
 ralentissement global du reseau.

 55..  CCoommmmeenntt ffoonnccttiioonnnnee LLBBXX ??

 LBX fonctionne en introduisant un _s_e_r_v_e_u_r _p_r_o_x_y  du  cote  du  client,
 lequel  se charge du cache et de la compression. Le serveur X sait que
 le client utilise un serveur proxy, et decompresse en consequence.

 Voici un  exemple  de  configuration  classique  pour  des  clients  X
 distants.   Dans  la suite, LOCAL representera 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
 executee.

      ______________________________________________________________________
          DISTANT                               LOCAL
       +-----+                                             +-----+
       | APP |-\          Reseau            +-----------+  |     |\
       +-----+  \-------------------------->| SERVEUR X |=>|     ||
       +-----+  /     (Protocole X)         +-----------+  +-----+\
       | APP |-/                                          /_____//
       +-----+
      ______________________________________________________________________

 Lors  de  l'utilisation  de  LBX,  un  serveur  proxy  (lbxproxy)  est
 introduit  du  cote  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 requetes X et les
 transmet. Cela ressemble a ca :

      ______________________________________________________________________
           DISTANT                                     LOCAL
                                                                 +-----+
       +-----+  +-------+        Reseau           +-----------+  |     |\
       | APP |->| PROXY |------------------------>| SERVEUR X |=>|     ||
       +-----+  +-------+    (LBX/Protocole X)    +-----------+  +-----+\
       +-----+   /                                              /_____//
       | APP |--/
       +-----+
      ______________________________________________________________________

 Le detail des fonctions de cache et de  compression  de  LBX  sort  du
 cadre de ce document.

 66..  DDee qquuooii aaii--jjee bbeessooiinn ppoouurr uuttiilliisseerr LLBBXX ??

 Vous  avez  besoin sur votre systeme LOCAL d'un serveur X compile avec
 l'extension LBX. A moins que  vous  n'ayez  explicitement  demande  le
 contraire,  les  serveurs  X11R6.3  incluent automatiquement  LBX a la
 compilation. Par consequent, tous les serveurs  XFree86  3.3  incluent
 LBX par defaut.

 Vous  pouvez  utiliser  la commande xdpyinfo afin de verifier si votre
 serveur dispose de l'extension LBX : executez xdpyinfo et verifiez  la
 liste  qui  suit   "number  of extensions" (nombre d'extensions); vous
 devez voir "LBX" dans cette liste.

 Ensuite, vous avez besoin d'un  programme  lbxproxy  compile  pour  le
 systeme DISTANT. C'est le point le plus delicat. Si le systeme distant
 n'est pas du meme type que votre systeme local, le lbxproxy  de  votre
 systeme local ne sera pas bon, evidement.
 Malheureusement,  aucune  distribution  de  lbxproxy  n'a  jamais  ete
 publiee. Par consequent, vous devez soit (a) obtenir  et  compiler  la
 majeure partie, sinon la totalite, de X11R6.3 pour le systeme distant,
 soit (b) trouver quelque part un executable lbxproxy  precompile  pour
 votre  systeme.  Cette  derniere  solution  est  naturellement la plus
 simple.

 lbxproxy est constitue d'un unique fichier executable.  Aucun  fichier
 de configuration, de ressources, etc. ne lui est associe.

 77..  DDee qquuooii nn''aaii--jjee ppaass bbeessooiinn ppoouurr uuttiilliisseerr LLBBXX ??

 Le  systeme  DISTANT  nn''aa ppaass besoin d'un nouveau serveur X (dans tous
 les cas, le systeme DISTANT n'a besoin d'executer _a_u_c_u_n serveur X).

 L'application que vous voulez executer nn''aa ppaass besoin  d'etre  liee  a
 une  version  speciale de X, ou a une bibliotheque speciale; j'utilise
 regulierement des applications commerciales X11R5 a travers  LBX  sans
 aucun souci.

 Vous  nn''aavveezz ppaass besoin de droits d'acces "root" ou privilegies sur le
 systeme DISTANT; le processus  lbxproxy  utilise  vos  droits  d'acces
 normaux.  De  plus,  vous  pouvez  l'executer  depuis votre repertoire
 personnel  :  il  n'a  pas  besoin  d'etre  installe  a   un   endroit
 particulier.

 88..  CCoommmmeenntt jjee ddeemmaarrrree LLBBXX ??

 Bon,  nous  y  voila...  apres  tout,  rien  de bien complique jusqu'a
 present.  Remplacez dans la suite LOCAL et DISTANT respectivement  par
 les  noms  d'hote  de  votre  station locale et du systeme distant (ne
 melangez pas tout!).

 Sur LOCAL :

 1. Demarrez votre serveur X.

 2.  Donnez les droits d'acces  du  systeme  distant  aupres  de  votre
    serveur  X.  Avec  la  methode  de  la  liste  d'hotes, tapez xhost
    +DISTANT. Si vous  utilisez  xauth  cela  risque  de  ne  pas  etre
    suffisant; consultez le manuel _x_a_u_t_h_(_1_) pour plus d'informations.

    Vous  pourriez  consulter  efficacement le mini howto Remote X Apps
    <http://www.freenix.fr/linux/HOWTO/mini/Remote-X-Apps.html> si vous
    n'etes  pas  familier  avec  la  configuration  des  droits d'acces
    distants sous X.

 Sur DISTANT :

 1. Demarrez lbxproxy en precisant la redirection  vers  le  serveur  X
    LOCAL, comme cela :

        $ lbxproxy -display LOCAL :0 :1 &

 Cette commande indique a lbxproxy d'utiliser l'ecran ("display")
  :1  sur  le  systeme DISTANT; si ce systeme dispose deja de plus d'un
 ecran, vous pouvez choisir  :2, ou n'importe quoi d'autre.

 2.  Definissez votre variable  d'environnement  DISPLAY  afin  qu'elle
    pointe  vers l'ecran gere par lbxproxy, au lieu de l'ecran habituel
    :

        $ DISPLAY= :1
        $ export DISPLAY

 Ou, si vous utilisez csh ou un de ses clones :

        % setenv DISPLAY :1

 3.  Si vous utilisez xauth, vous aurez a verifier que  votre  "cookie"
    est  accessible  localement.  Consultez le mini howto Remote X Apps
    <http://www.freenix.fr/linux/HOWTO/mini/Remote-X-Apps.html>    pour
    plus d'informations a ce propos.

 4.  Demarrez vos applications X!

 Voila;  toute  application  demarree  vers  l'ecran  :1 utilisera LBX.
 Naturellement, il n'y a aucune raison pour que vous  ne  puissiez  pas
 egalement  demarrer  des  applis  X  vers  LOCAL  :0  et  les utiliser
 simultanement.

 99..  PPrroobblleemmeess

 Voici quelques problemes courants :

    QQ)) lbxproxy  se  termine  avec  l'erreur  "access  denied"  ("acces
       refuse").

    RR)) Cela  signifie que le systeme LOCAL n'accepte pas les connexions
       en   provenance   du   systeme   DISTANT   pour   des    raisons
       d'autorisation.    Consultez   le   mini  howto  Remote  X  Apps
       <http://www.freenix.fr/linux/HOWTO/mini/Remote-X-Apps.html> pour
       plus de details a ce sujet.

       En guise de test simple, essayez de lancer sur DISTANT une appli
       simple, comme xclock, en l'affichant sur le systeme local,  sans
       utiliser lbxproxy :

           $ xclock -display LOCAL :0

    Si  cela ne marche pas, le probleme vient de xhost, ou d'une simple
    anomalie de X, pas de LBX.
 1100..  DDooccuummeennttaattiioonn

 La seule documentation fournie avec une distribution  X  standard  est
 probablement la page de manuel de _l_b_x_p_r_o_x_y_(_1_).

 Si  vous  pouvez  consulter  l'arborescence  des sources de X, de tres
 interessantes informations sont disponibles la :

 +o  xc/doc/specs/Xext/lbx.mif (Framemaker MIF)

 +o  xc/doc/hardcopy/Xext/lbx.PS.Z (Postscript compresse)

 +o  xc/doc/hardcopy/Xext/lbxTOC.html (HTML)

 Une discussion plus precise a propos des algorithmes specifiques a LBX
 est disponible la :

 +o  xc/doc/specs/Xext/lbxalg.mif (Framemaker MIF)

 +o  xc/doc/specs/Xext/lbxalg.PS.Z (Postscript compresse)

 Si  vous  n'avez  pas  acces a l'arborescence des sources de X11, vous
 pouvez obtenir ces fichiers depuis le site FTP du  Consortium  X  <ftp
 ://ftp.x.org/pub/R6.3/xc/doc/>.

 1111..  AAlltteerrnnaattiivveess

 Si,  pour  quelque raison, vous n'aimez pas lbxproxy : vous n'etes pas
 satisfait des performances, ou bien ca ne marche  pas  pour  vous,  ou
 vous  ne  voulez  pas  vous casser la tete a creer un lbxproxy pour le
 systeme 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 connait d'autres?)

 1111..11..  ddxxppcc -- DDiiffffeerreennttiiaall XX PPrroottooccooll CCoommpprreessssoorr

 +o  Auteur initial : Brian Pane <[email protected]>

 +o  Actuel responsable : Zachary Vonler <[email protected]>

 dxpc   <http://ccwf.cc.utexas.edu/~zvonler/dxpc/>   (Differential    X
 Protocol   Compressor,   Compresseur   Differentiel  de  protocole  X)
 fonctionne pour l'essentiel de la meme  maniere  que  LBX.  Cependant,
 afin  d'eviter  d'avoir a implementer une extension X et a modifier le
 code du serveur X, dxpc utilise ddeeuuxx proxys : le premier s'execute sur
 le  systeme  DISTANT,  comme lbxproxy, et l'autre s'execute sur l'hote
 LOCAL.

 Le proxy de l'hote DISTANT intervient dans la communication entre  les
 clients  X  et le proxy de l'hote LOCAL, tandis que le proxy de l'hote
 LOCAL intervient dans la communication entre le serveur X et le  proxy
 de l'hote DISTANT.

 Ainsi,  a  la  fois  pour  les  clients  X  et pour le serveur X, cela
 ressemble a une connexion X normale.

 1111..11..11..  AAvvaannttaaggeess

 +o  Comme il s'agit d'une  application  completement  independante  qui
    n'utilise  aucune  particularite  de  X,  elle  est  plus  simple a
    compiler et a installer.

 +o  Elle est maintenue separement, aussi vous n'avez pas a attendre  la
    publication  par  l'OSF  de  nouvelles  versions de X pour profiter
    d'ameliorations ou de corrections.

 +o  Elle fournie des informations et des statistiques  plus  nombreuses
    et plus completes que lbxproxy.

 1111..11..22..  IInnccoonnvveenniieennttss

 +o  Ce  n'est  pas  un composant standard de X; vous devez l'obtenir et
    l'installer separement.

 +o  dxpc est legerement plus complexe a configurer, puisqu'un proxy est
    necessaire sur LOCAL, en plus du proxy DISTANT.

 1111..11..33..  OOuu oobbtteenniirr ddxxppcc??

 Le   code   source   de   dxpc   est   disponible   a  ftp.x.org  <ftp
 ://ftp.x.org/contrib/utilities/>.

 Une page web sur dxpc donne beaucoup d'informations  interessantes,  y
 compris  des  liens  vers la liste de diffusion dxpc, un acces au code
 source,  et  un  certain   nombre   d'executables   precompiles   pour
 differentes plates-formes :

 <http://ccwf.cc.utexas.edu/~zvonler/dxpc/>

 1111..22..  SSsshh ((SSeeccuurree SShheellll))

 Ken      Chase      <[email protected]>      precise     que     ssh
 <http://www.cs.hut.fi/ssh/> peut etre  utilise  pour  la  compression.
 Bien  que  sa  principale  fonction  soit  de  securiser, il compresse
 egalement les donnees qu'il envoie.

 Ainsi, si vous utilisez X a travers une connexion ssh, vous obtiendrez
 automatiquement un certain taux de compression.

 1111..33..  LLeeqquueell cchhooiissiirr ??

 Je  ne  sais pas. LBX et dxpc apportent certainement tous les deux une
 meilleure compression que  ssh. Bien sur, ssh a pour lui l'avantage de
 la  securisation. Et bien sur, il n'y a aucune raison pour que vous ne
 puissiez pas utiliser a la fois ssh et  l'un  des  deux  autres,  afin
 d'obtenir une bonne compression et une securisation.

 Il  ne  devrait pas etre tres difficile de realiser un test comparatif
 de ces differentes 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.