<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet title="XSL formatting" type="text/xsl" href="http://planet.ubuntu-fr.org/feed/rss2/xslt" ?><rss version="2.0"
  xmlns:dc="http://purl.org/dc/elements/1.1/"
  xmlns:wfw="http://wellformedweb.org/CommentAPI/"
  xmlns:content="http://purl.org/rss/1.0/modules/content/">
<channel>
  <title>Planet Ubuntu Francophone - Python</title>
  <link>http://planet.ubuntu-fr.org/</link>
  <description></description>
  <language>fr</language>
  <pubDate>Tue, 07 Oct 2008 14:27:55 +0200</pubDate>
  <copyright></copyright>
  <docs>http://blogs.law.harvard.edu/tech/rss</docs>
  <generator>Dotclear</generator>
  
    
  <item>
    <title>Script pour GNU/Linux : lancer un logiciel X (graphique) avec un utilisateur n'ayant pas le droit</title>
    <link>http://achraf.cherti.name/blog/2008/08/31/gnu-linux-script-xauth-merge-extract-python-xorg-x11-lancer-programme-logiciel-x-graphique-avec-un-utilisateur-sans-droit/</link>
    <guid isPermaLink="false">urn:md5:c6b797062fed2717c6d6d83e131a437f</guid>
    <pubDate>Sun, 31 Aug 2008 14:51:43 +0200</pubDate>
    <dc:creator>Asher256</dc:creator>
        <category>PUF</category>
        <category>Accueil</category><category>Linux</category><category>Planet-libre</category><category>Planet-ubuntu</category><category>Programmation</category><category>Python</category><category>Script</category>    
    <description>    &lt;p&gt;Il vous est probablement déjà arrivé, sous &lt;acronym title=&quot;GNU is Not UNIX&quot;&gt;GNU&lt;/acronym&gt;/Linux, d'avoir besoin de lancer un de vos programmes ayant une interface graphique, comme Firefox, ou un programme louche que vous venez de télécharger, avec un autre utilisateur, sous votre session X actuelle, sans pour autant en ouvrir une autre.&lt;/p&gt;
&lt;p&gt;Il y a plusieurs façons de faire cela. Par exemple se connecter avec ssh en localhost, avec l'option -X ou -Y, ou utiliser xhost. Le souci, c'est que le premier est un peu lent (par exemple, pour lancer un jeu vidéo). Quand au deuxième, il n'est pas terrible du côté de la sécurité (ah les souvenirs... Polluer les displays des autres &lt;img src=&quot;http://achraf.cherti.name/blog/wp-includes/images/smilies/icon_razz.gif&quot; alt=&quot;:-P&quot; class=&quot;wp-smiley&quot; /&gt; ).&lt;/p&gt;
&lt;p&gt;Une des solutions les plus intéressantes est d'exporter votre clé avec xauth, pour l'importer ensuite dans l'utilisateur qui vous intéresse ! Comme il faut entrer deux ou trois commandes pour faire cela manuellement, j'ai développé le programme &lt;em&gt;sendxauth.py&lt;/em&gt;, permettant d'automatiser cela grâce à cette commande simple à mémoriser.&lt;/p&gt;
&lt;h2&gt;Un petit exemple pour clarifier les choses&lt;/h2&gt;
&lt;p&gt;Si mon explication n'a pas été claire, laisser moi vous donner un petit exemple.&lt;/p&gt;
&lt;p&gt;Supposons que vous avez un programme louche sous la main, que vous devez tester à tout prix. Comme il risque de faire ce qu'il veut dans le répertoire de votre utilisateur principal, par exemple vous voler vos informations confidentielles (les fichiers de configuration de votre navigateur web, qui contiennent peut-être vos mots de passes, ou vos courriels personnels ou confidentiels archivés), il peut-être intéressant de lancer ce programme avec un utilisateur limité. Donc, au lieu de le lancer avec votre utilisateur principal, vous allez utiliser l'utilisateur hyper limité « cobaye », qui n'a le droit de rien faire dans votre système, à part toucher à ses fichiers.&lt;/p&gt;
&lt;p&gt;Le souci c'est que, si vous vous loguez dans votre utilisateur hyper limité :&lt;/p&gt;
&lt;div&gt;&lt;span&gt;su&lt;/span&gt; -l cobaye&lt;/div&gt;
&lt;p&gt;Et que vous lancez un programme graphique comme xterm (toujours en tant que « cobaye ») :&lt;/p&gt;
&lt;div&gt;xterm&lt;/div&gt;
&lt;p&gt;Vous aurez l'erreur :&lt;/p&gt;
&lt;div&gt;xterm Xt error: Can't open display:&lt;br /&gt;
xterm: &amp;nbsp;DISPLAY is not set&lt;/div&gt;
&lt;p&gt;C'est un peu normal car l'utilisateur n'a le droit de rien faire dans votre display (sécurité).&lt;/p&gt;
&lt;p&gt;Pour lui donner ce droit, vous devez utiliser sendxauth.py (le script de ce tutoriel, voir plus bas) qui va s'occuper de tout faire à note place :&lt;/p&gt;
&lt;div&gt;sendxauth.py cobaye&lt;/div&gt;
&lt;p&gt;Une fois que vous vous reloguerez sur « cobaye » :&lt;/p&gt;
&lt;div&gt;&lt;span&gt;su&lt;/span&gt; -l cobaye&lt;/div&gt;
&lt;p&gt;Et que vous aurez déclaré les deux variables recommandées par sendxauth.py :&lt;/p&gt;
&lt;div&gt;&lt;span&gt;export&lt;/span&gt; &lt;span&gt;DISPLAY=&lt;/span&gt;&lt;span&gt;&quot;:0.0&quot;&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;export&lt;/span&gt; &lt;span&gt;XAUTHORITY=&lt;/span&gt;&lt;span&gt;&quot;/home/cobaye/.Xauthority&quot;&lt;/span&gt;&lt;/div&gt;
&lt;p&gt;xterm se lancera sans aucun souci, en tant que « cobaye » !&lt;/p&gt;
&lt;h2&gt;Télécharger le script&lt;/h2&gt;
&lt;p&gt;Vous pouvez &lt;a title=&quot;sendxauth.py : envoyer votre clé xauth à un autre utilisateur&quot; href=&quot;http://achraf.cherti.name/blog/files/mes_programmes/sendxauth.py&quot;&gt;télécharger le script sendxauth.py&lt;/a&gt; ou le copier coller depuis :&lt;/p&gt;
&lt;div&gt;&lt;span&gt;#!/usr/bin/env python&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;# -*- coding: utf-8 -*-&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;#&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;# Copyright (c) 2008, Achraf cherti (aka Asher256)&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;#&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;# Contact : achraf at cherti dot name&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;# Website : http://achraf.cherti.name/&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;#&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;# This program is free software; you can redistribute it and/or modify&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;# it under the terms of the &lt;acronym title=&quot;GNU is Not UNIX&quot;&gt;GNU&lt;/acronym&gt; General Public License as published by&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;# the Free Software Foundation; either version 2 of the License, or&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;# (at your option) any later version.&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;#&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;# This program is distributed in the hope that it will be useful,&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;# but WITHOUT ANY WARRANTY; without even the implied warranty of&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. &amp;nbsp;See the&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;# &lt;acronym title=&quot;GNU is Not UNIX&quot;&gt;GNU&lt;/acronym&gt; General Public License for more details.&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;#&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;# You should have received a copy of the &lt;acronym title=&quot;GNU is Not UNIX&quot;&gt;GNU&lt;/acronym&gt; General Public License&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;# along with This program; if not, write to the Free Software&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA &amp;nbsp;02110-1301 &amp;nbsp;USA&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;#&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;span&gt;&quot;Send xauth key to different users.&quot;&lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;import&lt;/span&gt; &lt;span&gt;sys&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;import&lt;/span&gt; &lt;span&gt;os&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;import&lt;/span&gt; &lt;span&gt;re&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;import&lt;/span&gt; &lt;span&gt;pwd&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;from&lt;/span&gt; &lt;span&gt;getopt&lt;/span&gt; &lt;span&gt;import&lt;/span&gt; gnu_getopt, GetoptError&lt;/p&gt;
&lt;p&gt;VERSION = &lt;span&gt;'0.1'&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;SOURCE_USER = &lt;span&gt;''&lt;/span&gt;&lt;br /&gt;
DESTINATION_USER = &lt;span&gt;''&lt;/span&gt;&lt;br /&gt;
DISPLAY = &lt;span&gt;':0.0'&lt;/span&gt;&lt;br /&gt;
VERBOSE = &lt;span&gt;False&lt;/span&gt;&lt;br /&gt;
DEV_NULL = &lt;span&gt;' &amp;gt;/dev/null 2&amp;gt;&amp;amp;1'&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;def&lt;/span&gt; vprint&lt;span&gt;&amp;#40;&lt;/span&gt;&lt;span&gt;string&lt;/span&gt;&lt;span&gt;&amp;#41;&lt;/span&gt;:&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;span&gt;&quot;Print 'string' if --verbose is defined.&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &quot;&lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span&gt;if&lt;/span&gt; VERBOSE != &lt;span&gt;False&lt;/span&gt;:&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span&gt;print&lt;/span&gt; &lt;span&gt;string&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;def&lt;/span&gt; check_environment&lt;span&gt;&amp;#40;&lt;/span&gt;&lt;span&gt;&amp;#41;&lt;/span&gt;:&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;span&gt;&quot;Check if all required environment variables are available.&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &quot;&lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; display = &lt;span&gt;os&lt;/span&gt;.&lt;span&gt;getenv&lt;/span&gt;&lt;span&gt;&amp;#40;&lt;/span&gt;&lt;span&gt;'DISPLAY'&lt;/span&gt;&lt;span&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span&gt;if&lt;/span&gt; display == &lt;span&gt;None&lt;/span&gt;:&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span&gt;print&lt;/span&gt; &lt;span&gt;'DISPLAY environment variable is not declared.'&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span&gt;sys&lt;/span&gt;.&lt;span&gt;exit&lt;/span&gt;&lt;span&gt;&amp;#40;&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span&gt;else&lt;/span&gt;:&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span&gt;globals&lt;/span&gt;&lt;span&gt;&amp;#40;&lt;/span&gt;&lt;span&gt;&amp;#41;&lt;/span&gt;&lt;span&gt;&amp;#91;&lt;/span&gt;&lt;span&gt;&quot;DISPLAY&quot;&lt;/span&gt;&lt;span&gt;&amp;#93;&lt;/span&gt; = display &lt;/p&gt;
&lt;p&gt;&lt;span&gt;def&lt;/span&gt; user_exists&lt;span&gt;&amp;#40;&lt;/span&gt;&lt;span&gt;user&lt;/span&gt;&lt;span&gt;&amp;#41;&lt;/span&gt;:&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;span&gt;&quot;Return True if the user exists.&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &quot;&lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span&gt;try&lt;/span&gt;:&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span&gt;pwd&lt;/span&gt;.&lt;span&gt;getpwnam&lt;/span&gt;&lt;span&gt;&amp;#40;&lt;/span&gt;&lt;span&gt;user&lt;/span&gt;&lt;span&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span&gt;except&lt;/span&gt; &lt;span&gt;KeyError&lt;/span&gt;:&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span&gt;return&lt;/span&gt; &lt;span&gt;False&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span&gt;else&lt;/span&gt;:&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span&gt;return&lt;/span&gt; &lt;span&gt;True&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;def&lt;/span&gt; handle_arguments&lt;span&gt;&amp;#40;&lt;/span&gt;&lt;span&gt;&amp;#41;&lt;/span&gt;:&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;span&gt;&quot;Handle options in the arguments (argv).&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &quot;&lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span&gt;try&lt;/span&gt;:&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; args = &lt;span&gt;sys&lt;/span&gt;.&lt;span&gt;argv&lt;/span&gt;&lt;span&gt;&amp;#91;&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;:&lt;span&gt;&amp;#93;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; optlist = gnu_getopt&lt;span&gt;&amp;#40;&lt;/span&gt;args, &lt;span&gt;'vh'&lt;/span&gt;, &lt;span&gt;&amp;#91;&lt;/span&gt;&lt;span&gt;'help'&lt;/span&gt;, &lt;span&gt;'verbose'&lt;/span&gt;&lt;span&gt;&amp;#93;&lt;/span&gt;&lt;span&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span&gt;except&lt;/span&gt; GetoptError:&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span&gt;print&lt;/span&gt; &lt;span&gt;'Error when parsing arguments.'&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span&gt;print&lt;/span&gt; &lt;span&gt;&quot;--help for more informations.&quot;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span&gt;sys&lt;/span&gt;.&lt;span&gt;exit&lt;/span&gt;&lt;span&gt;&amp;#40;&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;&amp;#41;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &lt;span&gt;if&lt;/span&gt; &lt;span&gt;len&lt;/span&gt;&lt;span&gt;&amp;#40;&lt;/span&gt;&lt;span&gt;sys&lt;/span&gt;.&lt;span&gt;argv&lt;/span&gt;&lt;span&gt;&amp;#41;&lt;/span&gt; &amp;lt; &lt;span&gt;2&lt;/span&gt;:&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span&gt;print&lt;/span&gt; &lt;span&gt;'What&lt;span&gt;\'&lt;/span&gt;s the destination user ?'&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span&gt;print&lt;/span&gt; &lt;span&gt;&quot;--help for more informations.&quot;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span&gt;sys&lt;/span&gt;.&lt;span&gt;exit&lt;/span&gt;&lt;span&gt;&amp;#40;&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;&amp;#41;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &lt;span&gt;for&lt;/span&gt; &lt;span&gt;user&lt;/span&gt; &lt;span&gt;in&lt;/span&gt; optlist&lt;span&gt;&amp;#91;&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;&amp;#93;&lt;/span&gt;:&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span&gt;if&lt;/span&gt; &lt;span&gt;not&lt;/span&gt; user_exists&lt;span&gt;&amp;#40;&lt;/span&gt;&lt;span&gt;user&lt;/span&gt;&lt;span&gt;&amp;#41;&lt;/span&gt;:&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span&gt;print&lt;/span&gt; &lt;span&gt;&quot;The user '%s' doesn't exists.&quot;&lt;/span&gt; % &lt;span&gt;user&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span&gt;sys&lt;/span&gt;.&lt;span&gt;exit&lt;/span&gt;&lt;span&gt;&amp;#40;&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span&gt;else&lt;/span&gt;:&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span&gt;globals&lt;/span&gt;&lt;span&gt;&amp;#40;&lt;/span&gt;&lt;span&gt;&amp;#41;&lt;/span&gt;&lt;span&gt;&amp;#91;&lt;/span&gt;&lt;span&gt;&quot;DESTINATION_USER&quot;&lt;/span&gt;&lt;span&gt;&amp;#93;&lt;/span&gt; = &lt;span&gt;user&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span&gt;break&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &lt;span&gt;for&lt;/span&gt; option, value &lt;span&gt;in&lt;/span&gt; optlist&lt;span&gt;&amp;#91;&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;&amp;#93;&lt;/span&gt;:&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span&gt;if&lt;/span&gt; option &lt;span&gt;in&lt;/span&gt; &lt;span&gt;&amp;#91;&lt;/span&gt;&lt;span&gt;'-v'&lt;/span&gt;, &lt;span&gt;'--verbose'&lt;/span&gt;&lt;span&gt;&amp;#93;&lt;/span&gt;:&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span&gt;globals&lt;/span&gt;&lt;span&gt;&amp;#40;&lt;/span&gt;&lt;span&gt;&amp;#41;&lt;/span&gt;&lt;span&gt;&amp;#91;&lt;/span&gt;&lt;span&gt;'VERBOSE'&lt;/span&gt;&lt;span&gt;&amp;#93;&lt;/span&gt; = &lt;span&gt;True&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span&gt;globals&lt;/span&gt;&lt;span&gt;&amp;#40;&lt;/span&gt;&lt;span&gt;&amp;#41;&lt;/span&gt;&lt;span&gt;&amp;#91;&lt;/span&gt;&lt;span&gt;'DEV_NULL'&lt;/span&gt;&lt;span&gt;&amp;#93;&lt;/span&gt; = &lt;span&gt;''&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span&gt;elif&lt;/span&gt; option &lt;span&gt;in&lt;/span&gt; &lt;span&gt;&amp;#91;&lt;/span&gt;&lt;span&gt;'-h'&lt;/span&gt;, &lt;span&gt;'--help'&lt;/span&gt;&lt;span&gt;&amp;#93;&lt;/span&gt;:&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span&gt;print&lt;/span&gt; __doc__&lt;span&gt;&amp;#91;&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;:&lt;span&gt;-2&lt;/span&gt;&lt;span&gt;&amp;#93;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span&gt;print&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span&gt;print&lt;/span&gt; &lt;span&gt;'Usage: %s [OPTIONS] destination_user '&lt;/span&gt; \&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; % &lt;span&gt;os&lt;/span&gt;.&lt;span&gt;path&lt;/span&gt;.&lt;span&gt;basename&lt;/span&gt;&lt;span&gt;&amp;#40;&lt;/span&gt;&lt;span&gt;sys&lt;/span&gt;.&lt;span&gt;argv&lt;/span&gt;&lt;span&gt;&amp;#91;&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;&amp;#93;&lt;/span&gt;&lt;span&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span&gt;print&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span&gt;print&lt;/span&gt; &lt;span&gt;&quot;OPTIONS :&quot;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span&gt;print&lt;/span&gt; &lt;span&gt;&quot; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;-h, --help &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Show this help&quot;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span&gt;print&lt;/span&gt; &lt;span&gt;&quot; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;-v, --verbose &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Verbose mode&quot;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span&gt;print&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span&gt;sys&lt;/span&gt;.&lt;span&gt;exit&lt;/span&gt;&lt;span&gt;&amp;#40;&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;&amp;#41;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;def&lt;/span&gt; commands_required&lt;span&gt;&amp;#40;&lt;/span&gt;*cmd_list&lt;span&gt;&amp;#41;&lt;/span&gt;:&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;span&gt;&quot;This function tests if all programs in&lt;br /&gt;
&amp;nbsp; &amp;nbsp; the arguments are available in the environment&lt;br /&gt;
&amp;nbsp; &amp;nbsp; variable 'PATH'.&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &quot;&lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; path = &lt;span&gt;os&lt;/span&gt;.&lt;span&gt;getenv&lt;/span&gt;&lt;span&gt;&amp;#40;&lt;/span&gt;&lt;span&gt;'PATH'&lt;/span&gt;&lt;span&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span&gt;if&lt;/span&gt; path != &lt;span&gt;None&lt;/span&gt;:&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; path_list = path.&lt;span&gt;split&lt;/span&gt;&lt;span&gt;&amp;#40;&lt;/span&gt;&lt;span&gt;os&lt;/span&gt;.&lt;span&gt;pathsep&lt;/span&gt;&lt;span&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span&gt;else&lt;/span&gt;:&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span&gt;print&lt;/span&gt; &lt;span&gt;&quot;The environment variable PATH is not defined.&quot;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span&gt;sys&lt;/span&gt;.&lt;span&gt;exit&lt;/span&gt;&lt;span&gt;&amp;#40;&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;&amp;#41;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &lt;span&gt;for&lt;/span&gt; command &lt;span&gt;in&lt;/span&gt; cmd_list:&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; error = &lt;span&gt;True&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span&gt;for&lt;/span&gt; path &lt;span&gt;in&lt;/span&gt; path_list:&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; command_path = &lt;span&gt;os&lt;/span&gt;.&lt;span&gt;path&lt;/span&gt;.&lt;span&gt;join&lt;/span&gt;&lt;span&gt;&amp;#40;&lt;/span&gt;path, command&lt;span&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span&gt;if&lt;/span&gt; &lt;span&gt;os&lt;/span&gt;.&lt;span&gt;access&lt;/span&gt;&lt;span&gt;&amp;#40;&lt;/span&gt;command_path, &lt;span&gt;os&lt;/span&gt;.&lt;span&gt;X_OK&lt;/span&gt;&lt;span&gt;&amp;#41;&lt;/span&gt;:&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; error = &lt;span&gt;False&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span&gt;break&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span&gt;if&lt;/span&gt; error:&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span&gt;print&lt;/span&gt; &lt;span&gt;'The command &lt;span&gt;\'&lt;/span&gt;%s&lt;span&gt;\'&lt;/span&gt; is not found.'&lt;/span&gt; % command&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span&gt;sys&lt;/span&gt;.&lt;span&gt;exit&lt;/span&gt;&lt;span&gt;&amp;#40;&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;&amp;#41;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;def&lt;/span&gt; su_command_generator&lt;span&gt;&amp;#40;&lt;/span&gt;command, &lt;span&gt;user&lt;/span&gt;=&lt;span&gt;''&lt;/span&gt;&lt;span&gt;&amp;#41;&lt;/span&gt;:&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;span&gt;&quot;Convert a command to : su -c 'command' user and return that.&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &quot;&lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; command = &lt;span&gt;re&lt;/span&gt;.&lt;span&gt;sub&lt;/span&gt;&lt;span&gt;&amp;#40;&lt;/span&gt;r&lt;span&gt;&quot;(['&lt;span&gt;\\&lt;/span&gt;])&quot;&lt;/span&gt;, r&lt;span&gt;&quot;&lt;span&gt;\\&lt;/span&gt;&lt;span&gt;\1&lt;/span&gt;&quot;&lt;/span&gt;, command&lt;span&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; command = &lt;span&gt;'su -c &lt;span&gt;\'&lt;/span&gt;'&lt;/span&gt; + command + &lt;span&gt;'&lt;span&gt;\'&lt;/span&gt;'&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span&gt;if&lt;/span&gt; &lt;span&gt;user&lt;/span&gt; != &lt;span&gt;''&lt;/span&gt;:&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; command += &lt;span&gt;' '&lt;/span&gt; + &lt;span&gt;user&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span&gt;return&lt;/span&gt; command&lt;/p&gt;
&lt;p&gt;&lt;span&gt;def&lt;/span&gt; send_xauth&lt;span&gt;&amp;#40;&lt;/span&gt;destination_user, source_user=&lt;span&gt;''&lt;/span&gt;&lt;span&gt;&amp;#41;&lt;/span&gt;:&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;span&gt;&quot;Send the authentication to the destination user&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; If source_user is '', the source user is the actual user (automatically&lt;br /&gt;
&amp;nbsp; &amp;nbsp; detected).&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &quot;&lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span&gt;if&lt;/span&gt; source_user != &lt;span&gt;''&lt;/span&gt;:&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span&gt;sys&lt;/span&gt;.&lt;span&gt;stdout&lt;/span&gt;.&lt;span&gt;write&lt;/span&gt;&lt;span&gt;&amp;#40;&lt;/span&gt;source_user + &lt;span&gt;'&lt;span&gt;\'&lt;/span&gt;s '&lt;/span&gt;&lt;span&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span&gt;print&lt;/span&gt; &lt;span&gt;'xauth key will be sent to'&lt;/span&gt;, destination_user + &lt;span&gt;'...'&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span&gt;print&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; auth_tmpfile = &lt;span&gt;'/tmp/sendxauth'&lt;/span&gt; + &lt;span&gt;str&lt;/span&gt;&lt;span&gt;&amp;#40;&lt;/span&gt;&lt;span&gt;os&lt;/span&gt;.&lt;span&gt;getpid&lt;/span&gt;&lt;span&gt;&amp;#40;&lt;/span&gt;&lt;span&gt;&amp;#41;&lt;/span&gt;&lt;span&gt;&amp;#41;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &lt;span&gt;try&lt;/span&gt;:&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span&gt;# extract&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; command = &lt;span&gt;'xauth extract '&lt;/span&gt; + auth_tmpfile + &lt;span&gt;' '&lt;/span&gt; + DISPLAY&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span&gt;if&lt;/span&gt; source_user != &lt;span&gt;''&lt;/span&gt;:&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span&gt;sys&lt;/span&gt;.&lt;span&gt;stdout&lt;/span&gt;.&lt;span&gt;write&lt;/span&gt;&lt;span&gt;&amp;#40;&lt;/span&gt;&lt;span&gt;'You must enter '&lt;/span&gt; + source_user + &lt;span&gt;' password : '&lt;/span&gt;&lt;span&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; command = su_command_generator&lt;span&gt;&amp;#40;&lt;/span&gt;command&lt;span&gt;&amp;#41;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; vprint&lt;span&gt;&amp;#40;&lt;/span&gt;command&lt;span&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; result = &lt;span&gt;os&lt;/span&gt;.&lt;span&gt;system&lt;/span&gt;&lt;span&gt;&amp;#40;&lt;/span&gt;command + DEV_NULL&lt;span&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span&gt;if&lt;/span&gt; source_user != &lt;span&gt;''&lt;/span&gt;:&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span&gt;print&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span&gt;if&lt;/span&gt; result != &lt;span&gt;0&lt;/span&gt;:&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span&gt;print&lt;/span&gt; &lt;span&gt;'Errors when extracting xauth key.'&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span&gt;sys&lt;/span&gt;.&lt;span&gt;exit&lt;/span&gt;&lt;span&gt;&amp;#40;&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;&amp;#41;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span&gt;# chmod auth key&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span&gt;os&lt;/span&gt;.&lt;span&gt;chmod&lt;/span&gt;&lt;span&gt;&amp;#40;&lt;/span&gt;auth_tmpfile, &lt;span&gt;0777&lt;/span&gt;&lt;span&gt;&amp;#41;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span&gt;# merge&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span&gt;sys&lt;/span&gt;.&lt;span&gt;stderr&lt;/span&gt;.&lt;span&gt;write&lt;/span&gt;&lt;span&gt;&amp;#40;&lt;/span&gt;&lt;span&gt;'You must enter '&lt;/span&gt; + destination_user + &lt;span&gt;' password : '&lt;/span&gt;&lt;span&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; destination_home = &lt;span&gt;pwd&lt;/span&gt;.&lt;span&gt;getpwnam&lt;/span&gt;&lt;span&gt;&amp;#40;&lt;/span&gt;destination_user&lt;span&gt;&amp;#41;&lt;/span&gt;&lt;span&gt;&amp;#91;&lt;/span&gt;&lt;span&gt;5&lt;/span&gt;&lt;span&gt;&amp;#93;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; authfile = &lt;span&gt;os&lt;/span&gt;.&lt;span&gt;path&lt;/span&gt;.&lt;span&gt;join&lt;/span&gt;&lt;span&gt;&amp;#40;&lt;/span&gt;destination_home, &lt;span&gt;'.Xauthority'&lt;/span&gt;&lt;span&gt;&amp;#41;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span&gt;# masquer les ' et \ dans authfile&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; command = su_command_generator&lt;span&gt;&amp;#40;&lt;/span&gt;&lt;span&gt;'xauth merge '&lt;/span&gt; + auth_tmpfile,&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;destination_user&lt;span&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; command = &lt;span&gt;'XAUTHORITY=&lt;span&gt;\'&lt;/span&gt;'&lt;/span&gt; + authfile + &lt;span&gt;'&lt;span&gt;\'&lt;/span&gt; '&lt;/span&gt; &amp;nbsp;+ command&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; vprint&lt;span&gt;&amp;#40;&lt;/span&gt;command&lt;span&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; result = &lt;span&gt;os&lt;/span&gt;.&lt;span&gt;system&lt;/span&gt;&lt;span&gt;&amp;#40;&lt;/span&gt;command + DEV_NULL&lt;span&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span&gt;if&lt;/span&gt; DEV_NULL != &lt;span&gt;''&lt;/span&gt;:&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span&gt;print&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span&gt;if&lt;/span&gt; result != &lt;span&gt;0&lt;/span&gt;:&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span&gt;print&lt;/span&gt; &lt;span&gt;'Error when merging xauth key by '&lt;/span&gt; + destination_user + &lt;span&gt;'.'&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span&gt;sys&lt;/span&gt;.&lt;span&gt;exit&lt;/span&gt;&lt;span&gt;&amp;#40;&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span&gt;else&lt;/span&gt;:&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span&gt;print&lt;/span&gt; &lt;span&gt;&quot;xauthority is sent to %s !&quot;&lt;/span&gt; % destination_user&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span&gt;print&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span&gt;print&lt;/span&gt; &lt;span&gt;&quot;You maybe must declare these shell variables before &quot;&lt;/span&gt; + \&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span&gt;&quot;running a graphical program :&quot;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span&gt;print&lt;/span&gt; &lt;span&gt;&quot;export DISPLAY=&lt;span&gt;\&quot;&lt;/span&gt;%s&lt;span&gt;\&quot;&lt;/span&gt;&quot;&lt;/span&gt; % DISPLAY&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span&gt;print&lt;/span&gt; &lt;span&gt;&quot;export XAUTHORITY=&lt;span&gt;\&quot;&lt;/span&gt;%s/.Xauthority&lt;span&gt;\&quot;&lt;/span&gt;&quot;&lt;/span&gt; % \&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span&gt;pwd&lt;/span&gt;.&lt;span&gt;getpwnam&lt;/span&gt;&lt;span&gt;&amp;#40;&lt;/span&gt;destination_user&lt;span&gt;&amp;#41;&lt;/span&gt;&lt;span&gt;&amp;#91;&lt;/span&gt;&lt;span&gt;5&lt;/span&gt;&lt;span&gt;&amp;#93;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span&gt;finally&lt;/span&gt;:&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span&gt;try&lt;/span&gt;:&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span&gt;os&lt;/span&gt;.&lt;span&gt;remove&lt;/span&gt;&lt;span&gt;&amp;#40;&lt;/span&gt;auth_tmpfile&lt;span&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span&gt;except&lt;/span&gt; &lt;span&gt;OSError&lt;/span&gt;:&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span&gt;print&lt;/span&gt; &lt;span&gt;'Warning: Cannot remove '&lt;/span&gt; + auth_tmpfile + &lt;span&gt;'...'&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span&gt;else&lt;/span&gt;:&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; vprint&lt;span&gt;&amp;#40;&lt;/span&gt;&lt;span&gt;'Notice: '&lt;/span&gt; + auth_tmpfile + &lt;span&gt;' deleted ;)'&lt;/span&gt;&lt;span&gt;&amp;#41;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;if&lt;/span&gt; __name__ == &lt;span&gt;'__main__'&lt;/span&gt;:&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span&gt;try&lt;/span&gt;:&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; commands_required&lt;span&gt;&amp;#40;&lt;/span&gt;&lt;span&gt;'xauth'&lt;/span&gt;, &lt;span&gt;'su'&lt;/span&gt;&lt;span&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; check_environment&lt;span&gt;&amp;#40;&lt;/span&gt;&lt;span&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; handle_arguments&lt;span&gt;&amp;#40;&lt;/span&gt;&lt;span&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; send_xauth&lt;span&gt;&amp;#40;&lt;/span&gt;DESTINATION_USER, SOURCE_USER&lt;span&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span&gt;except&lt;/span&gt; &lt;span&gt;KeyboardInterrupt&lt;/span&gt;:&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span&gt;print&lt;/span&gt; &lt;span&gt;&quot;Interrupted.&quot;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;# vim:ai:et:sw=4:ts=4:sts=4:tw=78:fenc=utf-8&lt;/span&gt;&lt;/div&gt;</description>
    
    
    
      </item>
    
  <item>
    <title>Introduction à PyGTK</title>
    <link>http://u-classroom.net/post/2008/01/28/Introduction-a-PyGTK</link>
    <guid isPermaLink="false">urn:md5:5b1b3ff33251d7afc7598b12b232a8f6</guid>
    <pubDate>Mon, 28 Jan 2008 11:32:00 +0100</pubDate>
    <dc:creator>u-classroom</dc:creator>
        <category>PUF</category>
        <category>Accueil</category><category>Gtk</category><category>Planet</category><category>Python</category>    
    <description>    &lt;p&gt;On continue avec python pour la prochaine session de la classroom, en abordant l'utilisation du framework GTK.&lt;/p&gt;

&lt;p&gt;L'introduction à PyGTK se passera le &lt;b&gt;lundi 04 février&lt;/b&gt; à &lt;b&gt;20h00&lt;/b&gt; (heure métropolitaine, 19H00 UTC), sur le canal &lt;b&gt;#u-classroom&lt;/b&gt; de Freenode.&lt;/p&gt;

&lt;p&gt;Mieux vaut avoir fréquenté python pour suivre cette session. Si vous n'étiez pas là aux cours précédents, vous pouvez vous rattraper en jetant un oeil &lt;a href=&quot;http://u-classroom.net/cours/&quot;&gt;aux cours 'papier'&lt;/a&gt;. N'hésitez pas à venir nous rendre visite sur le chan avant la session si vous avez des questions.&lt;/p&gt;

&lt;p&gt;Pour éviter d'oublier la session, inscrivez-vous à la mailing liste &lt;a href=&quot;http://effraie.org/mailman/listinfo/classroom-annonces &quot;&gt;u-classroom annonces&lt;/a&gt;, un message de rappel sera envoyé &lt;img src=&quot;/themes/default/smilies/wink.png&quot; alt=&quot;;)&quot; class=&quot;smiley&quot; /&gt;&lt;/p&gt;

&lt;p&gt;A lundi !&lt;/a&gt;</description>
    
    
    
      </item>
    
  <item>
    <title>Le retour du Python</title>
    <link>http://u-classroom.net/post/2008/01/04/Le-retour-du-Python</link>
    <guid isPermaLink="false">urn:md5:617ff04edc9626be5e7fe1a6f0987e3e</guid>
    <pubDate>Fri, 04 Jan 2008 18:50:00 +0100</pubDate>
    <dc:creator>u-classroom</dc:creator>
        <category>PUF</category>
        <category>Accueil</category><category>Planet</category><category>Python</category>    
    <description>    &lt;p&gt;C'est parti pour une nouvelle session classroom sur Python ! On abordera cette fois ci la programmation orientée objet, ce qui nous permettra de découvrir pygtk lors de la session suivante.&lt;/p&gt;
&lt;p&gt;Ca se passera le 21 Janvier à 20H00 (heure métropolitaine, 19H00 UTC) sur le canal irc #ubuntu-fr-classroom (réseau freenode).&lt;/p&gt;</description>
    
    
    
      </item>
    
  <item>
    <title>Democracy Player beta devient Miro 1.0</title>
    <link>http://blog.racoon97.net/democracy-player-beta-devient-miro-10/</link>
    <guid isPermaLink="false">urn:md5:0e2e6f8a85b2059ffa7a01c5cd9bb856</guid>
    <pubDate>Wed, 14 Nov 2007 19:31:39 +0100</pubDate>
    <dc:creator>racoon97</dc:creator>
        <category>PUF</category>
        <category>Accueil</category><category>Dailymotion</category><category>Inspiron 1501</category><category>Itunes</category><category>Miro</category><category>Python</category><category>Tv</category><category>Vidéo</category><category>Vlc</category><category>Youtube</category>    
    <description>    &lt;p&gt;&lt;a href=&quot;http://www.getmiro.com&quot; target=&quot;_blank&quot; title=&quot;Le site officiel de Miro.&quot;&gt;&lt;img src=&quot;http://blog.racoon97.net:81/wp-content/uploads/2007/11/miro-ubuntu-logo.png&quot; alt=&quot;Logo Miro-Ubuntu&quot; align=&quot;left&quot; height=&quot;72&quot; hspace=&quot;5&quot; vspace=&quot;2&quot; width=&quot;200&quot; /&gt;&lt;/a&gt;L&amp;#8217;excellent logiciel mutiplateforme &lt;em&gt;Democracy Player&lt;/em&gt; basé sur le non moins excellent &lt;em&gt;VLC&lt;/em&gt; change de nom et s&amp;#8217;appelle désormais &lt;em&gt;&lt;strong&gt;Miro&lt;/strong&gt;&lt;/em&gt;. Rappelons rapidement les fonctionnalités de ce logiciel &lt;em&gt;Open Sourc&lt;/em&gt;e qui possède une  interface conviviale,  agréable à l&amp;#8217;Å“il et qui rapelle un peu l&amp;#8217;environnement &lt;em&gt;Itunes&lt;/em&gt; d&amp;#8217;&lt;em&gt;Apple&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Miro est un lecteur de flux dédié à la vidéo qui permet, en plus de s&amp;#8217;abonner à des chaines de WebTV,  de télécharger les émissions automatiquement si vous le souhaitez, même en votre absence. Son autre intéret est de pouvoir rechercher, télécharger sur votre disque les vidéos (souvent en Flash) directement sur les sites qui en regorgent, comme &lt;em&gt;Youtube&lt;/em&gt;, &lt;em&gt;Yahoo! Video&lt;/em&gt;, Google Video et pleins d&amp;#8217;autres encore et même ce fichu &lt;em&gt;Dailymotion &lt;/em&gt;qui ne permet pas l&amp;#8217;affichage en plein avec Firefox&lt;em&gt;. &lt;/em&gt;Une fonction très sympathique de &lt;em&gt;Miro&lt;/em&gt; est de permettre la création et le partage de fichiers &lt;em&gt;bitorrent&lt;/em&gt; via le réseau &lt;em&gt;P2P&lt;/em&gt; du même nom, ce qui permet d&amp;#8217;optimiser la qualité des téléchargements.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Installation&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Comme tout nouveau logiciel, l&amp;#8217;installation via les dépots officiels n&amp;#8217;est pas encore possible. Nous devrons donc utiliser des dépôts externes.&lt;/p&gt;
&lt;p&gt;Il vous suffit d&amp;#8217;éditer votre fichier de sources de logiciels :&lt;/p&gt;
&lt;pre&gt;sudo gedit /etc/apt/sources.list&lt;/pre&gt;
&lt;p&gt;Puis, &lt;strong&gt;en fonction de votre version d&amp;#8217;Ubuntu&lt;/strong&gt; de rajouter cette unique ligne :&lt;/p&gt;
&lt;p&gt;Ubuntu&lt;strong&gt; Gutsy &lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;deb http://ftp.osuosl.org/pub/pculture.org/miro/linux/repositories/ubuntu gutsy/&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Ubuntu &lt;strong&gt;Feisty&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;deb http://ftp.osuosl.org/pub/pculture.org/miro/linux/repositories/ubuntu feisty/&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;em&gt;Astuce : Faites un &lt;strong&gt;triple clic&lt;/strong&gt; sur la ligne pour là sélectionner.&lt;/em&gt;&lt;br /&gt;
Sauvegardez votre fichier puis toujours dans une console, entrez :&lt;/p&gt;
&lt;pre&gt;sudo apt-get update &amp;amp;&amp;amp; sudo apt-get install miro&lt;/pre&gt;
&lt;pre&gt;&lt;/pre&gt;
&lt;p&gt;Il ne vous reste plus qu&amp;#8217;à lancer l&amp;#8217;application soit :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;en tapant &lt;strong&gt;miro&lt;/strong&gt;  à partir d&amp;#8217;une console (voir addendum en fin d&amp;#8217;article)&lt;/li&gt;
&lt;li&gt;en passant par le menu &lt;strong&gt;Applications &amp;gt; Son et Vidéo &amp;gt; Miro&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;ou de créer un lanceur d&amp;#8217;application personnalisé, sur votre tableau de bord par exemple.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Bien que cette version ne semble pas encore entièrement francisée, le logiciel semble suffisament intuitif pour se passer d&amp;#8217;une lecture de la  documentation (&lt;a href=&quot;http://www.getmiro.com/screencasts/&quot; title=&quot;Les tutos en vidéo&quot;&gt;disponible ici en vidéo&lt;/a&gt;).&lt;/p&gt;
&lt;p align=&quot;center&quot;&gt; &lt;a href=&quot;http://blog.racoon97.net/democracy-player-beta-devient-miro-10/javascript:void(0)&quot; title=&quot;Miro 1.0 - Recherche&quot;&gt; 			 &lt;/a&gt;&lt;a href=&quot;http://blog.racoon97.net:81/wp-content/uploads/2007/11/miro1-01.png&quot; title=&quot;Miro 1.0 - Recherche&quot;&gt;&lt;img src=&quot;http://blog.racoon97.net:81/wp-content/uploads/2007/11/miro1-01.thumbnail.png&quot; alt=&quot;Miro 1.0 - Recherche&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p align=&quot;center&quot;&gt;Une interface de recherche sobre et intuitive.&lt;/p&gt;
&lt;p align=&quot;center&quot;&gt; &lt;a href=&quot;http://blog.racoon97.net:81/wp-content/uploads/2007/11/miro1-02.png&quot; title=&quot;Miro - Téléchargement&quot;&gt;&lt;img src=&quot;http://blog.racoon97.net:81/wp-content/uploads/2007/11/miro1-02.thumbnail.png&quot; alt=&quot;Miro - Téléchargement&quot; /&gt;&lt;/a&gt;&lt;a href=&quot;http://blog.racoon97.net/democracy-player-beta-devient-miro-10/javascript:void(0)&quot; title=&quot;Miro - Téléchargement&quot;&gt; &lt;/a&gt;&lt;/p&gt;
&lt;p align=&quot;center&quot;&gt;Abonnez-vous et téléchargez de nouvelles vidéos, même si vous êtes absent.&lt;/p&gt;
&lt;p align=&quot;center&quot;&gt;&lt;a href=&quot;http://blog.racoon97.net:81/wp-content/uploads/2007/11/miro1-03.png&quot; title=&quot;Miro - ChaÃ®nes&quot;&gt;&lt;img src=&quot;http://blog.racoon97.net:81/wp-content/uploads/2007/11/miro1-03.thumbnail.png&quot; alt=&quot;Miro - ChaÃ®nes&quot; /&gt;&lt;/a&gt;&lt;a href=&quot;http://blog.racoon97.net/democracy-player-beta-devient-miro-10/javascript:void(0)&quot; title=&quot;Miro - ChaÃ®nes&quot;&gt; &lt;/a&gt;&lt;/p&gt;
&lt;p align=&quot;center&quot;&gt;Des chaÃ®nes à la pelle.&lt;/p&gt;
&lt;p align=&quot;center&quot;&gt; &lt;a href=&quot;http://blog.racoon97.net:81/wp-content/uploads/2007/11/miro1-04.png&quot; title=&quot;Miro - Local&quot;&gt;&lt;img src=&quot;http://blog.racoon97.net:81/wp-content/uploads/2007/11/miro1-04.thumbnail.png&quot; alt=&quot;Miro - Local&quot; /&gt;&lt;/a&gt;&lt;a href=&quot;http://blog.racoon97.net/democracy-player-beta-devient-miro-10/javascript:void(0)&quot; title=&quot;Miro - Local&quot;&gt; &lt;/a&gt;&lt;/p&gt;
&lt;p align=&quot;center&quot;&gt; La lecture des fichiers locaux est bien entendu possible en utilisant les &lt;em&gt;listes de lecture&lt;/em&gt;.&lt;/p&gt;
&lt;p align=&quot;center&quot;&gt;&lt;a href=&quot;http://blog.racoon97.net:81/wp-content/uploads/2007/11/miro1-05.png&quot; title=&quot;Miro - Préférences&quot;&gt;&lt;img src=&quot;http://blog.racoon97.net:81/wp-content/uploads/2007/11/miro1-05.thumbnail.png&quot; alt=&quot;Miro - Préférences&quot; /&gt;&lt;/a&gt;&lt;a href=&quot;http://blog.racoon97.net/democracy-player-beta-devient-miro-10/javascript:void(0)&quot; title=&quot;Miro - Préférences&quot;&gt; &lt;/a&gt;&lt;/p&gt;
&lt;p align=&quot;center&quot;&gt;Un petit passage obligatoire par le menu &lt;em&gt;Options&lt;/em&gt;.&lt;/p&gt;
&lt;p align=&quot;left&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p align=&quot;left&quot;&gt;Si vous trouvez des chaÃ®nes interressantes n&amp;#8217;hésitez pas à les partager au travers de vos commentaires.&lt;/p&gt;
&lt;p align=&quot;left&quot;&gt;&lt;strong&gt; Addendum&lt;/strong&gt; : sur certaines machines comme sur mon &lt;em&gt;Inspiron 1501&lt;/em&gt; par exemple qui est connecté en &lt;em&gt;WiFi&lt;/em&gt;, il se peut que &lt;em&gt;Miro&lt;/em&gt; ne se lance pas. Pour le vérifier, ne passez pas par le menu pour lancer le programme mais plutôt par la console. Les erreurs ressembleront probablement à cette ligne :&lt;/p&gt;
&lt;p align=&quot;left&quot;&gt;&lt;code&gt;/var/lib/python-support/python2.5/miro/gtcache.py&lt;/code&gt;&lt;/p&gt;
&lt;p align=&quot;left&quot;&gt;Il vous suffit de taper ceci dans un terminal&lt;/p&gt;
&lt;pre&gt;sudo ifconfig lo up&lt;/pre&gt;
&lt;p align=&quot;left&quot;&gt; puis de relancer &lt;em&gt;Miro&lt;/em&gt;. C&amp;#8217;est un bug connu et répertorié &lt;a href=&quot;http://www.getmiro.com/forum/comments.php?DiscussionID=243&quot; title=&quot;Bug Miro Python sous Ubuntu&quot; target=&quot;_blank&quot;&gt;ici&lt;/a&gt;.&lt;/p&gt;</description>
    
    
    
      </item>
    
  <item>
    <title>Python Classroom - 2ème épisode</title>
    <link>http://u-classroom.net/post/2007/10/20/Python-Classroom-2eme-episode</link>
    <guid isPermaLink="false">urn:md5:eaac041729f2a0f3d8f1fcfcb8a9e3ec</guid>
    <pubDate>Sat, 20 Oct 2007 08:25:00 +0200</pubDate>
    <dc:creator>u-classroom</dc:creator>
        <category>PUF</category>
        <category>Accueil</category><category>Planet</category><category>Python</category>    
    <description>    &lt;p&gt;Les 2 heures sont vites passées lors de la dernière session sur Python... et beaucoup de questions sont restées en suspens.&lt;/p&gt;

&lt;p&gt;La prochaine session classroom sur Python sera en partie consacrée à répondre aux interrogations levées lors de la précédente session, en entrant un peu plus dans le détail sur les sujets déjà abordés. On verra aussi quelques nouveautés bien sûr !&lt;/p&gt;

&lt;p&gt;Ca se passera sur le canal irc &lt;em&gt;#ubuntu-fr-classroom&lt;/em&gt; du réseau freenode, &lt;b&gt;mardi 23 octobre&lt;/b&gt; à &lt;b&gt;20H&lt;/b&gt; heure française (métroplitaine, 18H00 UTC).&lt;/p&gt;

&lt;p&gt;Le résumé de la première session &lt;a href=&quot;http://doc.ubuntu-fr.org/projets/ecole/python/1&quot;&gt;est en ligne&lt;/a&gt;. N'hésitez pas à embarquer vos questions avec vous mardi, ou à passer sur le chan d'ici là !&lt;/p&gt;</description>
    
    
    
      </item>
    
  <item>
    <title>Pjaiku, microbloggez depuis Ubuntu</title>
    <link>http://www.szdavid.com/wordpress/2007/10/18/pjaiku-microbloggez-depuis-ubuntu/</link>
    <guid isPermaLink="false">urn:md5:fcc702966547ae98e73c2a0624b4300c</guid>
    <pubDate>Wed, 17 Oct 2007 22:10:08 +0200</pubDate>
    <dc:creator>szdavid</dc:creator>
        <category>PUF</category>
        <category>Accueil</category><category>Gnome</category><category>Informatique</category><category>Internet</category><category>Jaiku</category><category>Python</category><category>Twitter</category>    
    <description>    &lt;p&gt;Bonsoir,&lt;/p&gt;
&lt;p&gt;vous &lt;a href=&quot;http://www.szdavid.com/wordpress/2007/07/17/gtwitter-gazouillez-depuis-gnome/&quot;&gt;twittez déjà depuis Gnome&lt;/a&gt; ? Vous pouvez à présent jaikusez (comment dit-on ?) !&lt;/p&gt;
&lt;p&gt;Pour cela, &lt;a href=&quot;http://h.ordia.com.ar/blog/pjaiku.php&quot;&gt;Pjaiku&lt;/a&gt; a été développé en Python.&lt;br /&gt;
Pour l&amp;#8217;installer, vous avez besoin de python (installé par défaut) et deux autres dépendances que vous pourrez récupérer ainsi :&lt;br /&gt;
&lt;code&gt;sudo apt-get install python-qt4 python-simplejson&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Le logiciel n&amp;#8217;est pas exceptionnel pour l&amp;#8217;instant, il n&amp;#8217;en est qu&amp;#8217;à ses balbutiements mais c&amp;#8217;est très prometteur !&lt;/p&gt;
&lt;p&gt;Au programme des possibilités :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Envoi de jaikus&lt;/li&gt;
&lt;li&gt;Mise-à-jour de votre emplacement&lt;/li&gt;
&lt;li&gt;Récupération des contacts et avatars&lt;/li&gt;
&lt;li&gt;Envois sur les &lt;em&gt;channels&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;Vues différentes : contacts, flux public, vue globale&lt;/li&gt;
&lt;li&gt;Mise-à-jour automatique et notifications&lt;/li&gt;
&lt;li&gt;Intégration avec Kopete&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;center&gt;&lt;a href=&quot;http://www.szdavid.com/wordpress/2007/10/18/pjaiku-microbloggez-depuis-ubuntu/capture-decran-de-pjaiku/&quot; rel=&quot;attachment wp-att-1200&quot; title=&quot;Capture d’écran de Pjaiku&quot;&gt;&lt;img src=&quot;http://www.szdavid.com/wordpress/wp-content/uploads/2007/08/pjaiku021.thumbnail.png&quot; alt=&quot;Capture d’écran de Pjaiku&quot; /&gt;&lt;/a&gt;&lt;/center&gt;&lt;/p&gt;
&lt;p&gt;Une fois que vous aurez téléchargé la dernière version sur le site, décompressez la&lt;br /&gt;
&lt;code&gt;tar -xvzf pjaiku_021.tar.gz&lt;/code&gt;&lt;br /&gt;
puis lancez le programme :&lt;br /&gt;
&lt;code&gt;python pjaiku/pjaiku.py&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;N&amp;#8217;hésitez pas à me laisser vos adresses Jaiku et Twitter dans les commentaires ! Les miens sont &lt;a href=&quot;http://szdavid.jaiku.com&quot;&gt;ici&lt;/a&gt; et &lt;a href=&quot;http://www.twitter.com/szdavid&quot;&gt;là&lt;/a&gt;&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
&lt;h3&gt;Articles similaires&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;http://www.szdavid.com/wordpress/2007/07/17/gtwitter-gazouillez-depuis-gnome/&quot; title=&quot;Gtwitter, gazouillez depuis Gnome&quot;&gt;Gtwitter, gazouillez depuis Gnome&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://www.szdavid.com/wordpress/2007/09/24/jaiku-sous-symbian/&quot; title=&quot;Jaiku sous Symbian&quot;&gt;Jaiku sous Symbian&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://www.szdavid.com/wordpress/2007/02/09/memotoo-sur-evolution/&quot; title=&quot;Memotoo sur Evolution&quot;&gt;Memotoo sur Evolution&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://www.szdavid.com/wordpress/2006/11/19/marre-de-taper-votre-mot-de-passe-dans-nm-applet/&quot; title=&quot;Marre de taper votre mot de passe dans nm-applet ?&quot;&gt;Marre de taper votre mot de passe dans nm-applet ?&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://www.szdavid.com/wordpress/2006/07/23/bloglines-notifier-sous-gnome/&quot; title=&quot;Bloglines Notifier sous Gnome&quot;&gt;Bloglines Notifier sous Gnome&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;</description>
    
    
    
      </item>
    
  <item>
    <title>Sessions Python</title>
    <link>http://u-classroom.net/post/2007/10/11/Sessions-Python</link>
    <guid isPermaLink="false">urn:md5:aa4a80f34149dd40492bb46459d04ea9</guid>
    <pubDate>Thu, 11 Oct 2007 19:55:00 +0200</pubDate>
    <dc:creator>gpocentek</dc:creator>
        <category>PUF</category>
        <category>Accueil</category><category>Planet</category><category>Python</category>    
    <description>    &lt;p&gt;Une nouvelle session de la classroom est prévue ce &lt;b&gt;mardi 16 octobre 2007&lt;/b&gt; à &lt;b&gt;20h&lt;/b&gt; (heure parisienne).&lt;/p&gt;

&lt;p&gt;On y abordera le langage &lt;a href=&quot;http://python.org&quot;&gt;python&lt;/a&gt; (les débutants en programmation sont les bienvenus), et d'autres sessions viendront compléter ce premier cours par la suite.&lt;/p&gt;

&lt;p&gt;A mardi !&lt;/p&gt;

&lt;p&gt;Edit : ça se passe sur le canal &lt;em&gt;#ubuntu-fr-classroom&lt;/em&gt; sur le réseau irc freenode (merci à KiKouN pour le rappel &lt;img src=&quot;/themes/default/smilies/wink.png&quot; alt=&quot;;)&quot; class=&quot;smiley&quot; /&gt; )&lt;/p&gt;</description>
    
    
    
      </item>
    
</channel>
</rss>
