<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>Artisan Numérique</title>
  <link rel="alternate" type="text/html" href="http://artisan.karma-lab.net/node/1314"/>
  <link rel="self" type="application/atom+xml" href="http://artisan.karma-lab.net/node/1314/atom/feed"/>
  <id>http://artisan.karma-lab.net/node/1314/atom/feed</id>
  <updated>2008-11-18T21:09:33+01:00</updated>
  <entry>
    <title>Coller deux machines ensemble avec synergy et SSH</title>
    <link rel="alternate" type="text/html" href="http://artisan.karma-lab.net/node/1314" />
    <id>http://artisan.karma-lab.net/node/1314</id>
    <published>2008-11-18T16:03:53+01:00</published>
    <updated>2008-11-18T21:09:33+01:00</updated>
    <author>
      <name>Ulhume</name>
    </author>
    <category term="X11" />
    <category term="OK" />
    <category term="Planet Libre" />
    <category term="Tutoriel" />
    <summary type="html"><![CDATA[<p>
   Cela fait maintenant longtemps que je bricole avec trois écrans. A l'origine il s'agissait "juste" de deux cartes vidéo collées dans la même bécane, puis ce fût deux machines différente histoire de "rentabiliser" la consommation électrique de mon serveur local. Aujourd'hui le serveur a disparu au sous-sol pour être remplacé par l'U810 sur sa station d'accueil. Dans tous les cas c'est la même problématique : deux bureaux différents qui doivent communiquer de manière suffisamment transparente pour donner l'illusions de former un seul et même espace. 
</p>
    ]]></summary>
    <content type="html"><![CDATA[<p>
   Cela fait maintenant longtemps que je bricole avec trois écrans. A l'origine il s'agissait "juste" de deux cartes vidéo collées dans la même bécane, puis ce fût deux machines différente histoire de "rentabiliser" la consommation électrique de mon serveur local. Aujourd'hui le serveur a disparu au sous-sol pour être remplacé par l'U810 sur sa station d'accueil. Dans tous les cas c'est la même problématique : deux bureaux différents qui doivent communiquer de manière suffisamment transparente pour donner l'illusions de former un seul et même espace. 
</p>
<!--break-->

	<a name='chapter_13'></a>
  <h2>Paramétrage de Synergy</h2>
	
<p>
  Avec SSH, <a class='external' target='_blank' href='http://synergy2.sourceforge.net/' >synergy</a> est la clef de voûte de ce petit bricolage. Pour ceux qui ne le connaissent pas encore, cet outil multi-plateforme permet de contrôler avec un même clavier et une même souris un ensemble de machine MacOS, Linux ou même Windows. En paramétrant simplement la disposition physique des écrans, il est ainsi possible de glisser la souris d'une machine à l'autre sans même s'en rendre compte. Les entrées clavier vont là où le pointeur de souris se trouve. L'architecture de synergie se compose donc d'un serveur qui est hébergé sur la machine à laquelle sont connectés physiquement clavier et souris, et d'autant de clients que nécessaires pour toutes les machines à relier au serveur. 
</p>
<p>
   Sous Mandriva, l'installation passe par un <kbd>urpmi synergy</kbd> sur chacune des machines (clients et serveur) ensuite, seul le serveur est a paramétrer, les clients se contentant d'être lancés en indiquant où le serveur se trouve sur le réseau.  
</p>
<p>
   Dans le cas qui nous intéresse, synergy sera donc paramétré pour placer l'écran de l'U810 à gauche des deux écrans de la machine de bureau. Et cela se fait très simplement en éditant un bête fichier texte sur le serveur, <kbd>/etc/synergy.conf</kbd>:
   
  <div class='code-block code-block-fragment'>
  <div class='container'>
  section: screens<br />
&nbsp; &nbsp;netbook:<br />
&nbsp; &nbsp;desktop:<br />
end<br />
section: links<br />
&nbsp; &nbsp;desktop:<br />
&nbsp; &nbsp; &nbsp;left = netbook<br />
&nbsp; &nbsp;netbook:<br />
&nbsp; &nbsp; &nbsp;right = desktop<br />
end
  </div>
  <div class='caption'>/etc/synergy.conf</div>
  </div>
</p>
<p>
  Là vous devinez comment tout cela va fonctionner. Grâce à ce fichier de configuration, j'ai déclaré que l'écran de l'U810 (netbook) était à la gauche de celui de mon PC, que celui du PC était à la droite du netbook. 
</p>

<p>
  Il suffit maintenant de lancer le serveur Synergy (synergys) sur le desktop par <kbd>synergys</kbd>. Le processus se met automatiquement en mode démon. De la même manière, sur le netbook, je lance cette fois le client par <kbd>synergyc desktop</kbd>, où <kbd>desktop</kbd> est le nom réseau de la machine serveur. Déjà vous devriez pouvoir passer avec votre souris d'une machine à l'autre en la faisant "taper" sur le bord gauche de l'écran du PC pour qu'elle passe comme par magie sur l'écran du netbook. Le clavier est alors utilisable à cet endroit. Et comble du fin, le presse-papier est aussi exporté !! Si vous copiez du texte d'un côté, vous pouvez le coller de l'autre. C'est pas beau ça ?
</p>

<p>
  Pour automatiser tout cela, il faut que les deux commandes soient lancées sur chaque machine à l'ouverture de session. Cela se fait très simplement en utilisant sous Gnome <kbd>Système/Préférences/Sessions/Programmes au démarrage</kbd> et en ajoutant les bonnes commande sur chacune des deux machines. 
</p>

<p>
  Pour aller encore un peu plus loin, il peut être utile que le netbook soit connecté au serveur synergy avant la session, de sorte à pouvoir permette de rentrer identifiant et mot de passe avec le clavier et la souris du serveur. 
</p>
<p>
 Pour ce faire, il suffit sur le netbook d'ajouter un fichier <kbd>/etc/X11/synergy.xsetup</kbd> :
 
  <div class='code-block code-block-fragment'>
  <div class='container'>
  <span class="co0"># to be sourced</span><br />
<span class="sy0">/</span>usr<span class="sy0">/</span>bin<span class="sy0">/</span><a target="blank" href="http://pwet.fr/man/linux/commandes/killall"><span class="kw2">killall</span></a> synergyc<br />
<a target="blank" href="http://pwet.fr/man/linux/commandes/sleep"><span class="kw2">sleep</span></a> <span class="nu0">1</span><br />
<span class="sy0">/</span>usr<span class="sy0">/</span>bin<span class="sy0">/</span>synergyc desktop
  </div>
  <div class='caption'>/etc/X11/synergy.xsetup</div>
  </div>
</p>

<p>
  Un petit coup de <kbd>chmod +x /etc/X11/synergy.xsetup</kbd> sur le museau et le client devrait se connecter au serveur dés l'apparition de l'invite de connexion. 
</p>



	<a name='chapter_14'></a>
  <h2>Lancement des applications</h2>
	 
<p>
   Nous avons maintenant lié nos deux écrans. cependant pour que ce soit réellement le même bureau il faut que l'on puisse sur le netbook afficher des applications qui en réalité s'exécutent sur le serveur. Pour cela il existe deux solutions, soit un <a class='external' target='_blank' href='http://freenx.berlios.de/' >freeNX</a> ou beaucoup plus simplement un SSH configuré pour faire du déport de port X11 (voir <a class='external' target='_blank' href='/node/82' >ici</a> pour plus d'info). Vu la proximité des deux machines, c'est la deuxième solution qui est adoptée, le réseau local supportant sans problème le débit imposé par la communication entre l'application et le serveur X11. Ainsi pour lancer par exemple <kbd>evolution</kbd>, il suffit juste sur le netbook d'ouvrir une session ssh, via un terminal, sur le serveur et de.. lancer evolution. 
</p>


	<a name='chapter_15'></a>
  <h2>Paramétrer l'ouverture de liens</h2>
	
<p>
 Maintenant, lorsque l'on clique sur un lien dans liferea, cela ne s'ouvre pas sur le firefox du desktop mais sur celui du netbook... En effet, FireFox utilise l'identifiant de l'écran (variable DISPLAY) pour savoir où ajouter son onglet. Or cette variable dans une session SSH n'est évidement pas le <kbd>:0.0</kbd> dans lequel FireFox tourne, mais plutôt un <kbd>localhost:11.0</kbd> lié au tunnel créé par SSH.
</p>
<p>
 La "Solution" est donc de se dire que si FireFox est toujours sur mon écran de droite, autrement dit <kbd>DISPLAY=:0</kbd>, il suffit de faire un petit script qui va systématique ouvrir les URL sur cet écran en exporter la valeur de DISPLAY avant d'appeler FireFox

  <div class='code-block code-block-fragment'>
  <div class='container'>
  <span class="co0">#! /bin/sh</span><br />
<br />
<span class="kw3">export</span> <span class="re2">DISPLAY=</span>:<span class="nu0">0</span><br />
<span class="sy0">/</span>usr<span class="sy0">/</span>bin<span class="sy0">/</span>firefox $<span class="nu0">1</span>
  </div>
  
  </div>
</p>
<p>
 Pour que Gnome utilise ce script, il ne reste plus qu'à lancer <kbd>Préférences/applications préférées</kbd> pour remplacer l'appel d'origine à FireFox par celui à notre script. Du coup toutes les applications Gnome ouvrent maintenant sur le bon firefox. 
</p>
<p>
 Il se peut que cela continue de coincer pour des raisons de sécurité. Pour régler cela, lancez en tant que root <kbd>gdmsetup</kbd> et dans l'onglet <kbd>sécurité</kbd>, cochez la case <kbd>Autorisé la connexion uniquement si l'utilisateur possède son répertoire personnel</kbd>. Au redémarrage de votre session sur la machine desktop, le problème devrait être réglé. 
</p>


	<a name='chapter_16'></a>
  <h2>Faire causer FireFox avec l'aggregateur de nouvelles</h2>
	
<p>
 Avec <kbd>liferea</kbd> est fournit un petit script, <kbd>/usr/bin/liferea-add-feed</kbd> qui fait normalement le boulot. Et pour l'ajouter à firefox, là aussi, la procédure c'est diablement simplifiée. Il suffit maintenant d'aller dans les préférences, onglet <kbd>Applications</kbd>, aller à <kbd>Flux WEB</kbd> et sélectionner <kbd>Autres...</kbd> puis le fameux script. 
<p>
<p>
  Maintenant cela marchera très bien si liferea est lancé directement sur le desktop, un peu moins s'il est affiché par le netbook. La raison en est que dans le second cas, le liferea lancé via ssh n'est pas connecté à <wp>dbus</kbd>. Pour que cela fonctionne, il faut renseigner la variable <kbd>DBUS_SESSION_BUS_ADDRESS</kbd> qui contient la référence au serveur DBUS principal. Et le « problème » lorsque nous nous connectons via SSH, cette fameuse variable n'existe pas et du coup les applications lancées dans le SSH ne peuvent communiquer avec celles lancées dans la session gnome qui elles, ont cette variable. 
</p>
<p>
	Pour régler cela, nous allons commencer par créer un fichier <kbd>/etc/X11/xinit.d/35export_dbus</kbd> en y mettant le contenu suivant :
 
  <div class='code-block code-block-fragment'>
  <div class='container'>
  # to be sourced<br />
<br />
echo DBUS_SESSION_BUS_ADDRESS=$DBUS_SESSION_BUS_ADDRESS &gt; ~/.ssh/environment
  </div>
  <div class='caption'>/etc/X11/xinit.d/35export_dbus</div>
  </div>
</p>
<p>
 L'astuce ici est donc de renseigner au lancement de la session, ce fichier <kbd>~/.ssh/environment</kbd> qui est utilisé par ssh pour nourrir l'environnement d'une nouvelle session. Mais pour que cela fonctionne, il faut modifier le fichier <kbd>/etc/ssh/sshd_config</kbd> pour ajouter la permission <kbd>PermitUserEnvironment yes</kbd> et redémarrer le serveur ssh. 
</p>
<p>
 Du coup, toute session SSH ouverte sur la machine <q>desktop</q> aura sa bonne variable DBUS et les applications pourront communiquer d'où qu'elles soient lancées. 
</p>


	<a name='chapter_17'></a>
  <h2>Lancer X sur le portable à partir de la machine de bureau</h2>
	
<p>
  Il n'est pas nécessaire, surtout si votre "écran externe" est une petite machine qui ne fait cela, de lancer toute l'artillerie Gnome. Vous pouvez très bien ne lancer que le serveur X11 avec dans <kbd>~/.xinitrc</kbd> le strict minimum comme un openbox, fbpanel, etc. 
</p>
<p> 
 Dans cette option, on aime bien l'idée de lancer ce serveur à la main à partir de la machine de bureau. Le seul "hic" c'est qu'un utilisateur ne peut "officiellement" pas lancer un serveur X, je donne ici le résultat pour que Google le mange :
 
  <div class='code-block code-block-traces'>
  <div class='container'>
  <div class='command'><span class='prompt'>gaston$</span>ssh machine_esclave "startx" &</div><div class='result'>xauth: creating new authority file /home/yoran/.serverauth.9780</div><div class='result'>&nbsp;</div><div class='result'>Authentication failed - cannot start X server.</div><div class='result'>Perhaps you do not have console ownership?</div><div class='command'><span class='prompt'>gaston$</span><span class='cursor'>&nbsp;</span></div>
  </div>
  
  </div>
</p>
<p>
 L'astuce cette fois est d'autoriser une telle chose en modifiant, sur la machine <q>esclave</q> le fichier <kbd>/etc/pam.d/xserver</kbd> comme suite :
 
  <div class='code-block code-block-fragment'>
  <div class='container'>
  #%PAM-1.0<br />
auth sufficient pam_rootok.so<br />
auth required pam_console.so<br />
#auth required pam_permit.so<br />
account required pam_permit.so
  </div>
  
  </div>
</p>
<p>
 Maintenant vous pouvez lancer, via ssh, votre serveur X à distance et le nouvel écran devrait prendre vie et vous devez pouvoir y aller avec votre souris. 
</p>



	<a name='chapter_18'></a>
  <h2>Conclusion</h2>
	
<p>
  J'avais prévenu c'est du bricolage, mais un bricolage que j'utilise quotidiennement depuis plus de deux ans et qui marche très bien0. Et avouez que c’est fascinant ce que X11 et un peu d’huile de ou de permettent de faire ! Je ne voudrais pas jouer les trolls provoquant mais je vois mal ce genre de montage fonctionner avec Windows (sans Cygwin <img src="http://artisan.karma-lab.net/sites/all/modules/contrib/smileys/packs/crystal/wink2.gif" title="Wink" alt="Wink" class="smiley-content"/>. 
</p>



    ]]></content>
  </entry>
</feed>
