<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet title="XSL formatting" type="text/xsl" href="http://www.schnouki.net/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/"
  xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
  <title>Sous les étoiles... - Tag - linux</title>
  <link>http://www.schnouki.net/</link>
  <atom:link href="http://www.schnouki.net/feed/tag/linux/rss2" rel="self" type="application/rss+xml"/>
  <description></description>
  <language>fr</language>
  <pubDate>Sat, 16 Aug 2008 00:56:08 +0200</pubDate>
  <copyright></copyright>
  <docs>http://blogs.law.harvard.edu/tech/rss</docs>
  <generator>Dotclear</generator>
  
    
  <item>
    <title>How to make Skype work with PulseAudio on 64 bits Linux systems</title>
    <link>http://www.schnouki.net/post/2008/08/16/How-to-make-Skype-work-with-PulseAudio-on-64-bits-Linux-systems</link>
    <guid isPermaLink="false">urn:md5:8862f9b1138506a6b217a9b23b25c0e3</guid>
    <pubDate>Sat, 16 Aug 2008 02:45:00 +0200</pubDate>
    <dc:creator>Schnouki</dc:creator>
        <category>Geek inside</category>
        <category>geek</category><category>hack</category><category>linux</category><category>pulseaudio</category><category>skype</category>    
    <description>&lt;p&gt;Some people like to hurt themselves: their computers run Linux, they have a 64 bits system, they use PulseAudio to have more fun with their sound cards, and they use Skype to call their geeky friends.&lt;/p&gt;    &lt;p&gt;That's what I do. My laptop has an Athlon64 CPU, runs ArchLinux, and I'm a PulseAudio addict (exporting display &lt;em&gt;and&lt;/em&gt; sound through the network when connecting to my remote PC with SSH is just awesome). And since my girlfriend will soon go and spend one semester in a university in Sweden, I need to have Skype working so I can call her without ruining myself. &lt;sup&gt;[&lt;a href=&quot;http://www.schnouki.net/post/2008/08/16/#pnote-48-1&quot; id=&quot;rev-pnote-48-1&quot;&gt;1&lt;/a&gt;]&lt;/sup&gt;&lt;/p&gt;


&lt;p&gt;The problem is that the Linux version of Skype is designed to use Alsa only. This shouldn't be a problem since there is an Alsa plugin to use PulseAudio as a backend: with this library (in its 32 bits version), everything &lt;em&gt;should&lt;/em&gt; work properly. Except...&lt;/p&gt;


&lt;p&gt;Except that Skype developers are some kind of morons who didn't realize that everybody isn't using the very same system as them. You can't change the directory where Skype will look for the Alsa libs: it will search for them in &lt;code&gt;/usr/lib/alsa-lib&lt;/code&gt; and that's all. No chance to change it using the environment variable &lt;code&gt;ALSA_LIBS&lt;/code&gt;. And therefore this 32 bits executable tries to load the 64 bits libraries in &lt;code&gt;/usr/lib/alsa-lib&lt;/code&gt; instead of the nice 32 bits libraries in &lt;code&gt;/opt/lib32/usr/lib/alsa-lib&lt;/code&gt;.&lt;/p&gt;


&lt;p&gt;One solution to this problem would be to set up a 32 bits chroot and launch Skype from there. But this is quite complicated for the end-user &lt;sup&gt;[&lt;a href=&quot;http://www.schnouki.net/post/2008/08/16/#pnote-48-2&quot; id=&quot;rev-pnote-48-2&quot;&gt;2&lt;/a&gt;]&lt;/sup&gt; and it isn't really comfortable to chroot and then to launch Skype (what if I want it to start when I log on KDE?).&lt;/p&gt;


&lt;p&gt;Another solution would be to disassemble the executable, change the hard-coded path, and assemble it again. Hehe, just kidding, I'm not a great SM fan &lt;img src=&quot;/themes/schnouki/smilies/smile.png&quot; alt=&quot;:)&quot; class=&quot;smiley&quot; /&gt;&lt;/p&gt;


&lt;p&gt;A last solution is to do some clever hacking including library preloading. This is, of course, the solution I have chosen.&lt;/p&gt;


&lt;p&gt;Library preloading allows one to &quot;replace&quot; any libc function with your own one, without having to recompile the entire libc (glibc is just &lt;em&gt;huge&lt;/em&gt;). It works by loading the libraries specified in the environment variable &lt;code&gt;LD_PRELOAD&lt;/code&gt; against an app before loading any other libraries (such as the ones you can see when running &lt;code&gt;ldd my_app&lt;/code&gt;), and it can therefore replace just &lt;em&gt;any&lt;/em&gt; system call. Since it uses a simple environment variable, you can use it to modify a single app too: just run it with &lt;code&gt;LD_PRELOAD=./mylib.so myapp&lt;/code&gt; and you're done!&lt;/p&gt;


&lt;p&gt;This is interesting in our case because Skype use the standard dlopen() system call to load the Alsa libraries. When it tries to open the 64 bit libraries, you can see on the console the following messages:&lt;/p&gt;
&lt;pre class=&quot;cpp&quot;&gt;&lt;span style=&quot;color: #ff0000; font-style: italic;&quot;&gt;/*
Copyright (c) 2008, Schnouki &amp;lt;schnouki _at_ schnouki _dot_ net&amp;gt;
&amp;nbsp;
Permission to use, copy, modify, and/or distribute this software for any
purpose with or without fee is hereby granted, provided that the above
copyright notice and this permission notice appear in all copies.
&amp;nbsp;
THE SOFTWARE IS PROVIDED &amp;quot;AS IS&amp;quot; AND THE AUTHOR DISCLAIMS ALL WARRANTIES
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/&lt;/span&gt;
&amp;nbsp;
&lt;span style=&quot;color: #339900;&quot;&gt;#include &amp;lt;string&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #339900;&quot;&gt;#include &amp;lt;iostream&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #339900;&quot;&gt;#include &amp;lt;dlfcn.h&amp;gt;&lt;/span&gt;
&amp;nbsp;
&lt;span style=&quot;color: #666666;&quot;&gt;// Thanks to Stephen Done!&lt;/span&gt;
&lt;span style=&quot;color: #666666;&quot;&gt;// http://sources.redhat.com/ml/libc-alpha/2001-05/msg00321.html&lt;/span&gt;
&amp;nbsp;
&lt;span style=&quot;color: #339900;&quot;&gt;#if defined(RTLD_NEXT)&lt;/span&gt;
&lt;span style=&quot;color: #339900;&quot;&gt;#define REAL_LIBC RTLD_NEXT&lt;/span&gt;
&lt;span style=&quot;color: #339900;&quot;&gt;#else&lt;/span&gt;
&lt;span style=&quot;color: #339900;&quot;&gt;#define REAL_LIBC ((void *) -1L)&lt;/span&gt;
&lt;span style=&quot;color: #339900;&quot;&gt;#endif&lt;/span&gt;
&amp;nbsp;
&lt;span style=&quot;color: #0000ff;&quot;&gt;void&lt;/span&gt;&lt;span style=&quot;color: #000040;&quot;&gt;*&lt;/span&gt; dlopen&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;char&lt;/span&gt; &lt;span style=&quot;color: #000040;&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;file&lt;/span&gt;, &lt;span style=&quot;color: #0000ff;&quot;&gt;int&lt;/span&gt; mode&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#41;&lt;/span&gt;
&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#123;&lt;/span&gt;
	&lt;span style=&quot;color: #666666;&quot;&gt;// Pointer to the original dlopen()&lt;/span&gt;
	&lt;span style=&quot;color: #0000ff;&quot;&gt;static&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;void&lt;/span&gt;&lt;span style=&quot;color: #000040;&quot;&gt;*&lt;/span&gt; &lt;span style=&quot;color: #008000;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #000040;&quot;&gt;*&lt;/span&gt;o_dlopen&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #008000;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;char&lt;/span&gt; &lt;span style=&quot;color: #000040;&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;file&lt;/span&gt;, &lt;span style=&quot;color: #0000ff;&quot;&gt;int&lt;/span&gt; mode&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #000080;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;NULL&lt;/span&gt;;
&amp;nbsp;
	&lt;span style=&quot;color: #666666;&quot;&gt;// string-ified file name&lt;/span&gt;
	std&lt;span style=&quot;color: #008080;&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color: #00eeff;&quot;&gt;string&lt;/span&gt; filename &lt;span style=&quot;color: #000080;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;file&lt;/span&gt;;
&amp;nbsp;
	&lt;span style=&quot;color: #666666;&quot;&gt;// Get the original dlopen()&lt;/span&gt;
	&lt;span style=&quot;color: #0000ff;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #008000;&quot;&gt;&amp;#40;&lt;/span&gt;o_dlopen &lt;span style=&quot;color: #000080;&quot;&gt;==&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;NULL&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #008000;&quot;&gt;&amp;#123;&lt;/span&gt;
		o_dlopen &lt;span style=&quot;color: #000080;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #008000;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;void&lt;/span&gt;&lt;span style=&quot;color: #000040;&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #000040;&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;char&lt;/span&gt; &lt;span style=&quot;color: #000040;&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;file&lt;/span&gt;, &lt;span style=&quot;color: #0000ff;&quot;&gt;int&lt;/span&gt; mode&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#41;&lt;/span&gt; dlsym&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#40;&lt;/span&gt;REAL_LIBC, &lt;span style=&quot;color: #FF0000;&quot;&gt;&amp;quot;dlopen&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#41;&lt;/span&gt;;
		&lt;span style=&quot;color: #0000ff;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #008000;&quot;&gt;&amp;#40;&lt;/span&gt;o_dlopen &lt;span style=&quot;color: #000080;&quot;&gt;==&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;NULL&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #008000;&quot;&gt;&amp;#123;&lt;/span&gt;
			std&lt;span style=&quot;color: #008080;&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color: #0000dd;&quot;&gt;cerr&lt;/span&gt; &lt;span style=&quot;color: #000080;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #FF0000;&quot;&gt;&amp;quot;libskypepulse: can't get a pointer to the original dlopen()&amp;quot;&lt;/span&gt; &lt;span style=&quot;color: #000080;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; std&lt;span style=&quot;color: #008080;&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color: #00eeff;&quot;&gt;endl&lt;/span&gt;;
			&lt;span style=&quot;color: #0000ff;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;NULL&lt;/span&gt;;
		&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#125;&lt;/span&gt;
	&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#125;&lt;/span&gt;
&amp;nbsp;
	&lt;span style=&quot;color: #666666;&quot;&gt;// Do we need to do something?&lt;/span&gt;
	&lt;span style=&quot;color: #0000ff;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #008000;&quot;&gt;&amp;#40;&lt;/span&gt;filename.&lt;span style=&quot;color: #00eeff;&quot;&gt;find&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #FF0000;&quot;&gt;&amp;quot;/usr/lib/alsa-lib/&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #000080;&quot;&gt;==&lt;/span&gt; &lt;span style=&quot;color: #0000dd;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #008000;&quot;&gt;&amp;#123;&lt;/span&gt;
		filename &lt;span style=&quot;color: #000080;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #FF0000;&quot;&gt;&amp;quot;/opt/lib32&amp;quot;&lt;/span&gt; &lt;span style=&quot;color: #000040;&quot;&gt;+&lt;/span&gt; filename;
		&lt;span style=&quot;color: #0000ff;&quot;&gt;return&lt;/span&gt; o_dlopen&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#40;&lt;/span&gt;filename.&lt;span style=&quot;color: #00eeff;&quot;&gt;c_str&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#41;&lt;/span&gt;, mode&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#41;&lt;/span&gt;;
	&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#125;&lt;/span&gt;
	&lt;span style=&quot;color: #0000ff;&quot;&gt;else&lt;/span&gt; &lt;span style=&quot;color: #008000;&quot;&gt;&amp;#123;&lt;/span&gt;
		&lt;span style=&quot;color: #0000ff;&quot;&gt;return&lt;/span&gt; o_dlopen&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;file&lt;/span&gt;, mode&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#41;&lt;/span&gt;;
	&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#125;&lt;/span&gt;
&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;So, if we just &quot;patch&quot; &lt;code&gt;dlopen()&lt;/code&gt; so that Skype loads the libs in&lt;code&gt; /opt/lib32/usr/lib/alsa-lib&lt;/code&gt; instead of the ones in &lt;code&gt;/usr/lib/alsa-lib&lt;/code&gt;, it should be able to load the libs properly and then to use PulseAudio. Well, let's do it!&lt;/p&gt;


&lt;p&gt;The code is actually pretty simple. We get a pointer to the &quot;original&quot; &lt;code&gt;dlopen()&lt;/code&gt; from glibc and we test if the provided file name begins with &lt;code&gt;/usr/lib/alsa-lib&lt;/code&gt;. If so we add &lt;code&gt;/opt/lib32&lt;/code&gt; at the beginning of this path, otherwise we don't touch it. And then we call the &quot;original&quot; &lt;code&gt;dlopen()&lt;/code&gt; with this new file name.&lt;/p&gt;


&lt;p&gt;This code was inspired by a piece of code I found thanks to Google; many thanks to its original author. I just adapted it to this situation and moved to C++ because I didn't want to do nasty &lt;code&gt;char*&lt;/code&gt; hacks when the class string is so easy to use.&lt;/p&gt;


&lt;p&gt;To use it: &lt;strong&gt;in a 32 bits environment&lt;/strong&gt; &lt;sup&gt;[&lt;a href=&quot;http://www.schnouki.net/post/2008/08/16/#pnote-48-3&quot; id=&quot;rev-pnote-48-3&quot;&gt;3&lt;/a&gt;]&lt;/sup&gt;, run &lt;code&gt;g++ -fPIC -shared -o libskypepulse.so libskypepulse.cpp&lt;/code&gt;. Then run Skype with the following command: &lt;code&gt;LD_PRELOAD=./libskypepulse.so skype&lt;/code&gt;. Open &lt;code&gt;pavucontrol&lt;/code&gt; and test Skype (for example calling the Echo test): Skype should appear in the playback streams list. If it does, congratulations! your Skype is now PulseAudio-ready; if it doesn't, check the messages in the console and only blame yourself &lt;img src=&quot;/themes/schnouki/smilies/wink.png&quot; alt=&quot;;)&quot; class=&quot;smiley&quot; /&gt;&lt;/p&gt;


&lt;p&gt;If you don't have access to a 32 bits environment or if you don't want to compile it yourself, my compiled library (as well as its source code) is available (included at the end of this post). I also made a little launcher (don't forget to adjust the library path), and ArchLinux users may use the package I put on the AUR (bin32-skype-pulse) which will install everything (all the needed 32 bits libraries) properly &lt;sup&gt;[&lt;a href=&quot;http://www.schnouki.net/post/2008/08/16/#pnote-48-4&quot; id=&quot;rev-pnote-48-4&quot;&gt;4&lt;/a&gt;]&lt;/sup&gt;.&lt;/p&gt;


&lt;p&gt;After you installed this library, you should modify your PulseAudio config: in &lt;code&gt;/etc/pulseaudio/daemon.conf&lt;/code&gt;, add the following lines:&lt;/p&gt;
&lt;pre&gt;
; For Skype, thanks to http://ubuntuforums.org/showthread.php?t=789578&amp;amp;highlight=skype+Pulse
default-fragments = 8
default-fragment-size-msec = 5
&lt;/pre&gt;

&lt;p&gt;This will improve the sound quality quite dramatically.&lt;/p&gt;


&lt;p&gt;Voilà, that's enough for now. Please leave a comment if this post helped you or if you had any problem with the library &lt;img src=&quot;/themes/schnouki/smilies/smile.png&quot; alt=&quot;:)&quot; class=&quot;smiley&quot; /&gt;&lt;/p&gt;
&lt;div class=&quot;footnotes&quot;&gt;&lt;h4&gt;Notes&lt;/h4&gt;
&lt;p&gt;[&lt;a href=&quot;http://www.schnouki.net/post/2008/08/16/#rev-pnote-48-1&quot; id=&quot;pnote-48-1&quot;&gt;1&lt;/a&gt;] I know we could use Ekiga or any other SIP clients, but I don't want to deal with messy SIP configurations, NAT traversal, settings on both Windows and Linux, etc., when Skype is so easy to set up...&lt;/p&gt;
&lt;p&gt;[&lt;a href=&quot;http://www.schnouki.net/post/2008/08/16/#rev-pnote-48-2&quot; id=&quot;pnote-48-2&quot;&gt;2&lt;/a&gt;] Yeah, I care about others &lt;img src=&quot;/themes/schnouki/smilies/smile.png&quot; alt=&quot;:)&quot; class=&quot;smiley&quot; /&gt;&lt;/p&gt;
&lt;p&gt;[&lt;a href=&quot;http://www.schnouki.net/post/2008/08/16/#rev-pnote-48-3&quot; id=&quot;pnote-48-3&quot;&gt;3&lt;/a&gt;] A 32 bits chroot or another computer...&lt;/p&gt;
&lt;p&gt;[&lt;a href=&quot;http://www.schnouki.net/post/2008/08/16/#rev-pnote-48-4&quot; id=&quot;pnote-48-4&quot;&gt;4&lt;/a&gt;] And to install packages from AUR, yaourt is your friend!&lt;/p&gt;&lt;/div&gt;
</description>
    
          <enclosure url="http://www.schnouki.net/public/dev/skype-pulse/libskypepulse.cpp"
      length="1698" type="text/plain" />
          <enclosure url="http://www.schnouki.net/public/dev/skype-pulse/libskypepulse.so"
      length="5936" type="text/plain" />
    
    
          <comments>http://www.schnouki.net/post/2008/08/16/How-to-make-Skype-work-with-PulseAudio-on-64-bits-Linux-systems#comment-form</comments>
      <wfw:comment>http://www.schnouki.net/post/2008/08/16/How-to-make-Skype-work-with-PulseAudio-on-64-bits-Linux-systems#comment-form</wfw:comment>
      <wfw:commentRss>http://www.schnouki.net/feed/rss2/comments/48</wfw:commentRss>
      </item>
    
  <item>
    <title>X11 et sudo</title>
    <link>http://www.schnouki.net/post/2007/04/09/X11-et-sudo</link>
    <guid isPermaLink="false">urn:md5:ac8ae58ff3a024d7e3ffb86eac5a6a01</guid>
    <pubDate>Mon, 09 Apr 2007 11:46:00 +0200</pubDate>
    <dc:creator>Schnouki</dc:creator>
        <category>Geek inside</category>
        <category>linux</category>    
    <description>&lt;p&gt;Quand on est fan de &lt;code&gt;sudo&lt;/code&gt;, c'est parfois assez pénible de ne pas pouvoir lancer d'application graphique avec. Il existe pourtant une solution simple pour y remédier.&lt;/p&gt;    &lt;p&gt;Le problème de &lt;code&gt;sudo&lt;/code&gt; est que, dans sa configuration «&amp;nbsp;classique », il ne conserve pas les variables d'environnement nécessaires au bon fonctionnement des applications X11 lors du changement d'utilisateur. Pour y remédier, il y a deux solutions&amp;nbsp;:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;utiliser &lt;code&gt;sux&lt;/code&gt; (disponible dans Portage&amp;nbsp;: &lt;code&gt;x11-misc/sux&lt;/code&gt;), un petit programme qui fonctionne comme &lt;code&gt;su&lt;/code&gt;, mais en transférant les données nécessaires. Ça marche, mais ça ouvre un shell (ce dont on n'a pas toujours envie) et ça demande toujours un mot de passe root (il n'est évidemment pas possible de l'utiliser avec &lt;code&gt;sudo&lt;/code&gt;...). Et il semble poser des problèmes pour afficher les caractères UTF-8, ce qui est plutôt gênant.&lt;/li&gt;
&lt;li&gt;bien configurer &lt;code&gt;sudo&lt;/code&gt;&amp;nbsp;: c'est possible, et heureusement pour les fans d'Ubuntu &lt;img src=&quot;/themes/schnouki/smilies/smile.png&quot; alt=&quot;:-)&quot; class=&quot;smiley&quot; /&gt; &lt;sup&gt;[&lt;a href=&quot;http://www.schnouki.net/post/2007/04/09/#pnote-25-1&quot; id=&quot;rev-pnote-25-1&quot;&gt;1&lt;/a&gt;]&lt;/sup&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;On va donc modifier le fichier &lt;code&gt;/etc/sudoers&lt;/code&gt;. Évidemment, il n'est pas question de le modifier «&amp;nbsp;à la main&amp;nbsp;» : pour des raisons de sécurité, mieux vaut utiliser &lt;code&gt;visudo&lt;/code&gt;.&lt;/p&gt;


&lt;p&gt;Une fois l'éditeur de texte lancé, il faut spécifier quelles variables il faut transférer et pour quels utilisateurs. Ces variables, ce sont &lt;code&gt;$DISPLAY&lt;/code&gt; et &lt;code&gt;$XAUTHORITY&lt;/code&gt;. Pour les utilisateurs, dans mon cas il s'agit du groupe &lt;code&gt;wheel&lt;/code&gt;&amp;nbsp;; certains préféreront spécifier des utilisateurs séparément&amp;nbsp;: c'est leur choix &lt;img src=&quot;/themes/schnouki/smilies/smile.png&quot; alt=&quot;:-)&quot; class=&quot;smiley&quot; /&gt;&lt;/p&gt;


&lt;p&gt;Voilà donc les lignes que j'ai dû ajouter à mon fichier &lt;code&gt;sudoers&lt;/code&gt;&amp;nbsp;:&lt;/p&gt;
&lt;pre&gt;
# Faire marcher X11 avec sudo
Defaults:%wheel env_reset
Defaults:%wheel env_keep += DISPLAY
Defaults:%wheel env_keep += XAUTHORITY
&lt;/pre&gt;


&lt;p&gt;Chez certaines personnes, il semble qu'il est nécessaire de se déconnecter entièrement (jusqu'à redémarrer le serveur X) pour que la modification prenne effet&amp;nbsp;; chez moi ce n'a pas été le cas, j'ai juste eu besoin de quitter &lt;code&gt;visudo&lt;/code&gt; &lt;img src=&quot;/themes/schnouki/smilies/smile.png&quot; alt=&quot;:-)&quot; class=&quot;smiley&quot; /&gt;&lt;/p&gt;


&lt;p&gt;Il suffit ensuite de tester si ça marche, par exemple avec &lt;code&gt;sudo gedit /etc/make.conf&lt;/code&gt;.&lt;/p&gt;


&lt;p&gt;Un grand merci à &lt;a href=&quot;http://thomas.tanreisoftware.com/?p=58&quot; hreflang=&quot;en&quot;&gt;Thomas Wisniewski&lt;/a&gt; pour l'info.&lt;/p&gt;
&lt;div class=&quot;footnotes&quot;&gt;&lt;h4&gt;Notes&lt;/h4&gt;
&lt;p&gt;[&lt;a href=&quot;http://www.schnouki.net/post/2007/04/09/#rev-pnote-25-1&quot; id=&quot;pnote-25-1&quot;&gt;1&lt;/a&gt;] eh oui, les docs d'&lt;a href=&quot;http://www.ubuntu-fr.org/&quot; hreflang=&quot;fr&quot;&gt;Ubuntu&lt;/a&gt; utilisent abondamment les &lt;code&gt;sudo&lt;/code&gt; avec des logiciels comme &lt;code&gt;gedit&lt;/code&gt;... Preuve que c'est possible !&lt;/p&gt;&lt;/div&gt;
</description>
    
    
    
          <comments>http://www.schnouki.net/post/2007/04/09/X11-et-sudo#comment-form</comments>
      <wfw:comment>http://www.schnouki.net/post/2007/04/09/X11-et-sudo#comment-form</wfw:comment>
      <wfw:commentRss>http://www.schnouki.net/feed/rss2/comments/25</wfw:commentRss>
      </item>
    
  <item>
    <title>La Fonera : réseau privé en WPA et Linux</title>
    <link>http://www.schnouki.net/post/2007/02/19/La-Fonera-%3A-reseau-prive-en-WPA-et-Linux</link>
    <guid isPermaLink="false">urn:md5:e7cb2230a8964bc90f7483391acb796c</guid>
    <pubDate>Mon, 19 Feb 2007 10:20:00 +0100</pubDate>
    <dc:creator>Schnouki</dc:creator>
        <category>Geek inside</category>
        <category>fon</category><category>linux</category><category>wifi</category>    
    <description>    &lt;p&gt;Dans ses réglages d'usine, le routeur &lt;em&gt;La Fonera&lt;/em&gt; propose un réseau privé avec cryptage WPA dont le &lt;a href=&quot;http://fr.wikipedia.org/wiki/SSID&quot; hreflang=&quot;fr&quot;&gt;SSID&lt;/a&gt; est &lt;em&gt;MyPlace&lt;/em&gt;. La clef de cryptage est basée sur le numéro de série indiqué sur l'étiquette en-dessous du routeur&amp;nbsp;:
&lt;img src=&quot;http://www.schnouki.net/public/fonera/Fonera-back.jpg&quot; alt=&quot;Étiquette sous la Fonera&quot; style=&quot;display:block; margin:0 auto;&quot; /&gt;&lt;/p&gt;


&lt;p&gt;Nous allons voir comment configurer son ordinateur sous Linux (de préférence Gentoo, bien sûr ;-)) pour pouvoir accéder à Internet en passant par ce réseau.&lt;/p&gt;


&lt;h2&gt;Configuration du système&lt;/h2&gt;

&lt;h3&gt;Installation de wpa_supplicant&lt;/h3&gt;

&lt;p&gt;wpa_supplicant est le programme qui permet de gérer le WPA sous Linux. Il permet aussi de gérer les connexion WEP ou même sans cryptage, d'ailleurs... C'est un outil très puissant mais assez complexe à configurer&amp;nbsp;; pour le moment nous allons nous contenter de l'installer.&lt;/p&gt;


&lt;p&gt;Sous Gentoo, un simple &lt;code&gt;emerge wpa_supplicant&lt;/code&gt; suffit.&lt;/p&gt;


&lt;p&gt;Si vous avez une carte utilisant le driver &lt;code&gt;madwifi&lt;/code&gt;, il faut ajouter le useflag correspondant&amp;nbsp;: &lt;code&gt;echo net-wireless/wpa_supplicant madwifi &amp;gt;&amp;gt; /etc/portage/package.use&lt;/code&gt;, puis un &lt;code&gt;emerge wpa_supplicant&lt;/code&gt; devrait suffire.&lt;/p&gt;


&lt;h3&gt;Configuration des interfaces réseau&lt;/h3&gt;

&lt;p&gt;Une fois que wpa_supplicant est installé, il faut indiquer à Gentoo de l'utiliser. Pour cela, modifiez avec votre éditeur de texte préféré le fichier &lt;code&gt;/etc/conf.d/net&lt;/code&gt; et ajoutez-y les lignes suivantes&amp;nbsp;:&lt;/p&gt;
&lt;pre&gt;
modules=( &amp;quot;wpa_supplicant&amp;quot; )
wpa_supplicant_wlan0=&amp;quot;-Dwext -iwlan0&amp;quot;
wpa_timeout_wlan0=10
config_wlan0=( &amp;quot;dhcp&amp;quot; )
&lt;/pre&gt;


&lt;p&gt;Il y aura éventuellement quelques détails à modifier selon votre configuration&amp;nbsp;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;selon le driver, il faudra peut-être remplacer &lt;code&gt;wext&lt;/code&gt; par autre chose (&lt;code&gt;madwifi&lt;/code&gt;, &lt;code&gt;atmel&lt;/code&gt;, &lt;code&gt;ipw&lt;/code&gt;, &lt;code&gt;broadcom&lt;/code&gt;...). Normalement &lt;code&gt;wext&lt;/code&gt; est le nom générique et devrait fonctionner avec à peu près tout&amp;nbsp;; si ce n'est pas le cas, consultez la documentation&amp;nbsp;: &lt;code&gt;man wpa_supplicant&lt;/code&gt;. Petit détail cependant&amp;nbsp;: même si vous utiliser un pilote &lt;code&gt;ndiswrapper&lt;/code&gt;, laissez &lt;code&gt;-Dwext&lt;/code&gt;&amp;nbsp;; l'option &lt;code&gt;-Dndiswrapper&lt;/code&gt; est obsolète et ne fonctionne plus.&lt;/li&gt;
&lt;li&gt;selon le nom de votre interface réseau&amp;nbsp;: chez moi c'est &lt;code&gt;wlan0&lt;/code&gt;, chez vous c'est peut-être &lt;code&gt;eth1&lt;/code&gt; ou &lt;code&gt;ath0&lt;/code&gt;... Si c'est le cas pensez à le changer.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Sauvegardez ensuite ce fichier et relancez votre interface réseau avec &lt;code&gt;/etc/init.d/net.wlan0 restart&lt;/code&gt;.&lt;/p&gt;


&lt;h2&gt;Configuration de wpa_supplicant&lt;/h2&gt;

&lt;p&gt;Il faut maintenant configurer wpa_supplicant lui-même. La tâche peut parfois être assez ardue, alors on va y aller doucement.&lt;/p&gt;


&lt;h3&gt;Configuration de base&lt;/h3&gt;

&lt;p&gt;Le fichier de configuration de wpa_supplicant est &lt;code&gt;/etc/wpa_supplicant/wpa_supplicant.conf&lt;/code&gt;. Lancez votre éditeur de texte préféré et ouvrez-le.&lt;/p&gt;


&lt;p&gt;Il faut commencer par la configuration générale, celle qui est commune à tous les réseaux que vous allez utiliser avec wpa_supplicant. C'est en fait la partie la plus simple &lt;img src=&quot;/themes/schnouki/smilies/wink.png&quot; alt=&quot;;-)&quot; class=&quot;smiley&quot; /&gt;&lt;/p&gt;


&lt;p&gt;Chez moi, ça donne ça&amp;nbsp;:&lt;/p&gt;
&lt;pre&gt;
# Nécessaire pour pouvoir utiliser des interfaces comme wpa_gui ou wpa_cli
ctrl_interface=/var/run/wpa_supplicant
# ...pour autoriser les utilisateurs dans le groupe wheel à les utiliser
ctrl_interface_group=wheel
# Autoriser les interfaces à modifier le fichier de configuration
#update_config=1
# Mode de connexion au point d'accès
ap_scan=2
# Réauthentification rapide pour le mode EAP
# (commentée car ne marche pas à Supélec...)
#fast_reauth=1
&lt;/pre&gt;


&lt;p&gt;Si vous avez besoin de documentation plus précise, vous en trouverez dans le dossier &lt;code&gt;/usr/share/doc/wpa_supplicant-0.5.7&lt;/code&gt;.&lt;/p&gt;


&lt;h3&gt;Calcul de la clef PSK&lt;/h3&gt;

&lt;p&gt;La &lt;em&gt;Fonera&lt;/em&gt; utilise un cryptage WPA avec une clef de type PSK (&lt;em&gt;Pre-Shared Key&lt;/em&gt;). Cette clef de 256 bits est calculée à partir d'un mot de passe (&lt;em&gt;passphrase&lt;/em&gt; pour être exact) et du SSID du réseau&amp;nbsp;; ainsi, deux SSID ayant le même mot de passe n'auront pas la même clef PSK.&lt;/p&gt;


&lt;p&gt;Pour calculer cette clef PSK, on va utiliser un outil fourni avec wpa_supplicant et qui s'appelle wpa_passphrase. Son utilisation est simplissime&amp;nbsp;: &lt;code&gt;wpa_passphrase &amp;lt;SSID&amp;gt; &amp;lt;mot de passe&amp;gt;&lt;/code&gt;&lt;/p&gt;


&lt;p&gt;En supposant que le mot de passe (indiqué en-dessous de la &lt;em&gt;Fonera&lt;/em&gt; je vous le rappelle) est 123456789 pour le SSID &lt;em&gt;MyPlace&lt;/em&gt;, cela nous donne&amp;nbsp;:&lt;/p&gt;
&lt;pre&gt;
$ wpa_passphrase MyPlace 123456789
network={
        ssid=&amp;quot;MyPlace&amp;quot;
        #psk=&amp;quot;123456789&amp;quot;
        psk=2af518af5ce090638477fcb1623cf9b32fdf56151b612fcd879518d193b6cc14
}
&lt;/pre&gt;


&lt;p&gt;Notez la ligne en &quot;psk=2af...&quot; quelque part (vive les copier/coller...), elle nous servira bientôt.&lt;/p&gt;


&lt;h3&gt;Configuration du réseau&lt;/h3&gt;

&lt;p&gt;On va ensuite ajouter un bloc qui décrit le réseau auquel on veut se connecter.&lt;/p&gt;
&lt;pre&gt;
network={
        ssid=&amp;quot;MyPlace&amp;quot;
        proto=WPA
        key_mgmt=WPA-PSK
        pairwise=TKIP
        psk=2af518af5ce090638477fcb1623cf9b32fdf56151b612fcd879518d193b6cc14
        priority=1
}
&lt;/pre&gt;


&lt;p&gt;En gros, là-dedans, on indique à wpa_supplicant le SSID (&lt;em&gt;MyPlace&lt;/em&gt;), le protocole (&lt;em&gt;WPA&lt;/em&gt;, c'est-à-dire WPA version 1 et non pas WPA2 qui ne marche pas chez moi...), le type de clef (&lt;em&gt;WPA-PSK&lt;/em&gt;), la méthode de cryptage (&lt;em&gt;TKIP&lt;/em&gt; et non pas &lt;em&gt;CCMP&lt;/em&gt; ou &lt;em&gt;AES&lt;/em&gt;), et la clef PSK calculée précédemment.&lt;/p&gt;


&lt;p&gt;Si on veut en plus pouvoir se connecter à son SSID public, on peut ajouter le bloc suivant&amp;nbsp;:&lt;/p&gt;
&lt;pre&gt;
network={
        ssid=&amp;quot;FON_AP&amp;quot;
        key_mgmt=NONE
        priority=2
}
&lt;/pre&gt;


&lt;p&gt;Ici aucun cryptage donc aucun problème.&lt;/p&gt;


&lt;p&gt;Si vous avez un autre réseau qui utilise un cryptage WEP, voici la manière de le configurer&amp;nbsp;:&lt;/p&gt;
&lt;pre&gt;
network={
        ssid=&amp;quot;MonWifiPerso&amp;quot;
        key_mgmt=NONE
        # wep_key_0 pour la clef n°1, wep_key_3 pour la clef n°4...
        wep_key0=&amp;quot;Ma clef WEP&amp;quot;
        priority=3
}
&lt;/pre&gt;


&lt;p&gt;Si vous cherchez d'autres exemples, il y en a beaucoup dans &lt;code&gt;/usr/share/doc/wpa_supplicant-0.5.7/wpa_supplicant.conf.gz&lt;/code&gt;&amp;nbsp;; n'hésitez pas à y jeter un œil, c'est très instructif.&lt;/p&gt;


&lt;h3&gt;Test de connexion&lt;/h3&gt;

&lt;p&gt;Sauvegardez le fichier et quittez votre éditeur de texte. Il va d'abord falloir indiquer à wpa_supplicant de recharger son fichier de configuration. Deux solutions&amp;nbsp;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;la méthode barbare&amp;nbsp;: &lt;code&gt;/etc/init.d/net.wlan0 restart&lt;/code&gt;, pas pratique si c'est la seule interface réseau et qu'on a d'autres services qui dépendent du réseau&lt;/li&gt;
&lt;li&gt;la méthode propre&amp;nbsp;: on lance &lt;code&gt;wpa_cli&lt;/code&gt;, on tape &lt;code&gt;reconfigure&lt;/code&gt; et Entrée, puis on quitte avec Ctrl+C.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Le moyen le plus simple de suivre ce qui se passe ensuite est d'utiliser l'interface graphique&amp;nbsp;: lancez &lt;code&gt;wpa_gui&lt;/code&gt;. Dans le menu &lt;em&gt;Network&lt;/em&gt; choisissez &lt;em&gt;MyPlace&lt;/em&gt; et attendez...  Après que &lt;em&gt;Status&lt;/em&gt; indique &lt;em&gt;COMPLETED&lt;/em&gt;, il faut encore attendre que l'ordinateur ait reçu une adresse IP du serveur DHCP. Une fois que c'est bon... tout devrait être bon &lt;img src=&quot;/themes/schnouki/smilies/wink.png&quot; alt=&quot;;-)&quot; class=&quot;smiley&quot; /&gt;&lt;/p&gt;


&lt;p&gt;Si quelque chose ne va pas, ouvrez un &lt;code&gt;wpa_cli&lt;/code&gt; en même temps que &lt;code&gt;wpa_gui&lt;/code&gt; et notez les messages qui s'affichent, ils vous aideront peut-être à comprendre où est le problème.&lt;/p&gt;


&lt;h2&gt;Pour finir...&lt;/h2&gt;

&lt;p&gt;Voilà voilà, j'espère que vous n'aurez pas eu trop de mal à me lire, je débute un peu dans l'écriture de tutoriels &lt;img src=&quot;/themes/schnouki/smilies/wink.png&quot; alt=&quot;;-)&quot; class=&quot;smiley&quot; /&gt;&lt;/p&gt;


&lt;p&gt;Si vous avez un problème, une question, un compliment (sait-on jamais... &lt;img src=&quot;/themes/schnouki/smilies/cool.png&quot; alt=&quot;8-)&quot; class=&quot;smiley&quot; /&gt; ), n'hésitez pas à me laisser un commentaire &lt;img src=&quot;/themes/schnouki/smilies/wink.png&quot; alt=&quot;;-)&quot; class=&quot;smiley&quot; /&gt;&lt;/p&gt;</description>
    
    
    
          <comments>http://www.schnouki.net/post/2007/02/19/La-Fonera-%3A-reseau-prive-en-WPA-et-Linux#comment-form</comments>
      <wfw:comment>http://www.schnouki.net/post/2007/02/19/La-Fonera-%3A-reseau-prive-en-WPA-et-Linux#comment-form</wfw:comment>
      <wfw:commentRss>http://www.schnouki.net/feed/rss2/comments/17</wfw:commentRss>
      </item>
    
  <item>
    <title>Hey hi, hey ho, me voilà Fonero...</title>
    <link>http://www.schnouki.net/post/2007/02/19/Hey-hi-hey-ho-me-voila-Fonero</link>
    <guid isPermaLink="false">urn:md5:cd356ab857efe04733a431aee0349352</guid>
    <pubDate>Mon, 19 Feb 2007 03:13:00 +0100</pubDate>
    <dc:creator>Schnouki</dc:creator>
        <category>Geek inside</category>
        <category>fon</category><category>linux</category><category>wifi</category>    
    <description>    &lt;p&gt;Il y a quelques temps, j'avais appris par je-ne-sais-plus-quel-site &lt;sup&gt;[&lt;a href=&quot;http://www.schnouki.net/post/2007/02/19/#pnote-16-1&quot; id=&quot;rev-pnote-16-1&quot;&gt;1&lt;/a&gt;]&lt;/sup&gt; que suite à un article dans le quotidien gratuit &lt;a href=&quot;http://www.20minutes.fr/&quot; hreflang=&quot;fr&quot;&gt;20 Minutes&lt;/a&gt; (que j'aimais bien lire à Strasbourg...), il y avait une offre spéciale qui permettait de commander gratuitement un routeur Wifi &lt;em&gt;La Fonera&lt;/em&gt;, et ainsi de participer activement à la communauté &lt;a href=&quot;http://www.fon.com/fr/&quot; hreflang=&quot;fr&quot;&gt;FON&lt;/a&gt;.&lt;/p&gt;


&lt;p&gt;FON, c'est un objectif ambitieux avec un principe simple&amp;nbsp;: construire le plus grand réseau Wifi au monde en utilisant le partage. Concrètement, chaque membre de FON (chaque &lt;em&gt;Fonero&lt;/em&gt; dans le jargon approprié) a le choix&amp;nbsp;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;s'il ne partage pas sa connexion&amp;nbsp;: c'est un &lt;em&gt;Alien&lt;/em&gt;, il paye pour se connecter aux points d'accès FON répartis à travers le monde... Mais à 3 € de l'heure, c'est bien moins cher que les autres hotspots existants.&lt;/li&gt;
&lt;li&gt;s'il partage sa connexion contre rétribution&amp;nbsp;: c'est un &lt;em&gt;Bill&lt;/em&gt;, il paye aussi pour se connecter sur les hotspots FON mais il touche 50% de ce que payent les &lt;em&gt;Aliens&lt;/em&gt; ou les autres &lt;em&gt;Bills&lt;/em&gt; pour se connecter sur son propre hotspot.&lt;/li&gt;
&lt;li&gt;s'il partage sa connexion gratuitement&amp;nbsp;: c'est un &lt;em&gt;Linus&lt;/em&gt;, il peut se connecter gratuitement à tous les hotspots FON du monde, mais ne touche rien sur ce que payent les &lt;em&gt;Aliens&lt;/em&gt; et les &lt;em&gt;Bills&lt;/em&gt; sur son hostpot.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Le principe est relativement simple et paraît assez utopiste... Et pourtant ça marche. Lancé il y a quelques années en Espagne, FON compte maintenant des dizaines de milliers de membres à travers l'Europe, et plusieurs milliers aux États-Unis en à peine quelques semaines...&lt;/p&gt;


&lt;p&gt;Au départ, pour faciliter la mise en place d'un partage, FON proposait un &lt;a href=&quot;http://fr.wikipedia.org/wiki/Firmware&quot; hreflang=&quot;fr&quot;&gt;firmware&lt;/a&gt; pour les routeurs Linksys, mais depuis 2006 il existe un petit routeur dédié appelé &lt;em&gt;La Fonera&lt;/em&gt; (29,95 € sur le site de FON). Et donc l'offre en partenariat avec 20 Minutes dont je parlais au début de ce billet consistait à offrir 6000 routeurs de ce type aux lecteurs de 20 Minutes.&lt;/p&gt;


&lt;p&gt;J'ai réussi à m'inscrire sur le site à temps et à recevoir ma &lt;em&gt;Fonera&lt;/em&gt; gratuitement. J'ai passé une bonne partie de l'après-midi à m'amuser avec, et c'est franchement sympa&amp;nbsp;: le routeur crée deux cellules Wifi, une publique (celle qu'on partage) et une autre privée (avec cryptage WPA...)&amp;nbsp;; il fonctionne sous Linux et, après une petite manip' pour activer ssh dessus, on peut en faire tout ce qu'on veut&amp;nbsp;; et en plus le routeur est d'une taille minuscule (bientôt des photos... peut-être, en attendant y'en a déjà sur &lt;a href=&quot;http://flickr.com/search/?q=fonera&amp;amp;w=all&quot; hreflang=&quot;en&quot;&gt;Flickr&lt;/a&gt;).&lt;/p&gt;


&lt;p&gt;Et voilà, maintenant je partage ma connexion, je suis un Fonero, un &lt;em&gt;Linus&lt;/em&gt; bien évidemment... Vivement que j'aie l'occasion de tester la connexion sur un autre FONspot &lt;img src=&quot;/themes/schnouki/smilies/wink.png&quot; alt=&quot;;-)&quot; class=&quot;smiley&quot; /&gt;&lt;/p&gt;
&lt;div class=&quot;footnotes&quot;&gt;&lt;h4&gt;Notes&lt;/h4&gt;
&lt;p&gt;[&lt;a href=&quot;http://www.schnouki.net/post/2007/02/19/#rev-pnote-16-1&quot; id=&quot;pnote-16-1&quot;&gt;1&lt;/a&gt;] vive la précision...&lt;/p&gt;&lt;/div&gt;
</description>
    
    
    
          <comments>http://www.schnouki.net/post/2007/02/19/Hey-hi-hey-ho-me-voila-Fonero#comment-form</comments>
      <wfw:comment>http://www.schnouki.net/post/2007/02/19/Hey-hi-hey-ho-me-voila-Fonero#comment-form</wfw:comment>
      <wfw:commentRss>http://www.schnouki.net/feed/rss2/comments/16</wfw:commentRss>
      </item>
    
</channel>
</rss>