<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>Matériel</title>
  <link rel="alternate" type="text/html" href="http://artisan.karma-lab.net/taxonomy/term/1177"/>
  <link rel="self" type="application/atom+xml" href="http://artisan.karma-lab.net/taxonomy/term/1177/atom/feed"/>
  <id>http://artisan.karma-lab.net/taxonomy/term/1177/atom/feed</id>
  <updated>2008-02-07T08:37:09+01:00</updated>
  <entry>
    <title>Installer un serveur de numérisation, SANE</title>
    <link rel="alternate" type="text/html" href="http://artisan.karma-lab.net/node/1159" />
    <id>http://artisan.karma-lab.net/node/1159</id>
    <published>2008-08-07T12:35:40+02:00</published>
    <updated>2008-08-07T19:17:04+02:00</updated>
    <author>
      <name>Ulhume</name>
    </author>
    <category term="Matériel" />
    <category term="OK" />
    <category term="Planet Libre" />
    <category term="Tutoriel" />
    <summary type="html"><![CDATA[<p>
  L'objectif ici est d'installer le scanner USB en utilisant les outils du projet SANE. Une procédure très simple en soit avec juste quelques "pièges" qu'il est utile d'éviter pour ne pas perdre de temps.
</p>
    ]]></summary>
    <content type="html"><![CDATA[<p>
  L'objectif ici est d'installer le scanner USB en utilisant les outils du projet SANE. Une procédure très simple en soit avec juste quelques "pièges" qu'il est utile d'éviter pour ne pas perdre de temps.
</p>
<!--break-->

	<a name='chapter_1'></a>
  <h2>Le logiciel SANE</h2>
	

<p>
  Un petit mot sur SANE tout d'abord. Ce projet apporte à un système unix un support unifié de toutes les périphériques d'acquisition d'image. Ce va de la WebCam à la carte TNT en passant bien évidemment par les scanners. Outre ce support, SANE permet de publier un scanner sur votre réseau et ainsi de le rendre utilisable sur d'autre machines. A ce titre SANE est l'équivalent de CUPS mais pour l'acquisition. Le support des WebCam et autre carte TV est en soit anecdotique, il s'agit d'un driver générique qui utilise le système V4L (Vidéo4Linux). Le support des scanners est le vrai métier de SANE. 
</p>
<p>
  A noter enfin que le partage des scanners publiés par SANE ne se limite pas au monde Unix. Vous pouvez les utiliser avec <a class='external' target='_blank' href='http://www.ellert.se/twain-sane/' >Max/OSX</a>, mais aussi sous <a class='external' target='_blank' href='http://sanetwain.ozuzo.net/' >Windows</a>. 
</p>
<p>
  Ce qui suit n'est pas spécifique à un scanner, je prends juste le mien comme exemple pour illustrer la démarche.
</p>


	<a name='chapter_2'></a>
  <h2>Les drivers Epson</h2>
	
<p>
  Pour commence un petit point sur les drivers. Epson fait parti de ces fabriquant à disposer de drivers pour Linux. C'est assez rare pour être salué et c'est d'ailleurs ce qui fait que je n'achète dans ce domaine (numérisation, impression) que du matériel Epson. la RX640 n'échappe pas à la règle et son drivers se trouve sur le site de la société <a class='external' target='_blank' href='http://www.avasys.jp/english' >Avasys</a> qui semble être une filiale dédiée au développement Linux. Il sont fournis AVEC les sources, sous licence GPL, ce qui est encore plus rare (A titre d'information, les pilotes Linux des cartes nVidia ne sont fournit qu'en binaire fermés). Un aspect qui n'est pas négligeable car du coup le pilote Epson pour la RX640 est déjà intégré dans Saned. Il n'y a donc rien à faire de ce côté qu'installer SANE. 
</p>

	<a name='chapter_3'></a>
  <h2>Installation de SANE</h2>
	
<p>
  Comme toujours, nous commençons par une installation de paquets (urpmi ou apt-get sane). Ceci fait, la première chose à vérifier est la présence sur le serveur du scanner (qui doit être branché <img src="http://artisan.karma-lab.net/sites/all/modules/contrib/smileys/packs/crystal/wink2.gif" title="Wink" alt="Wink" class="smiley-content"/>. Pour cela, lancer la commande :
  
  <div class='code-block code-block-traces'>
  <div class='container'>
  <div class='command'><span class='prompt'>root#</span>sane-find-scanner</div><div class='result'>(...)</div><div class='result'>found USB scanner (vendor=0x04b8, product=0x081c) at libusb:003:004</div><div class='result'>(...)</div><div class='command'><span class='prompt'>root#</span><span class='cursor'>&nbsp;</span></div>
  </div>
  
  </div>
</p>
<p>
  Parfait, le scanner est visible. Si ce n'était pas le cas, tentez un <kbd>lsusb</kbd> pour vérifier s'il est connu du module USB de Linux. Maintenant, nous allons déterminer si SANE a bien un driver pour notre scanner. Pour cela, lancez la commande :
  
  <div class='code-block code-block-traces'>
  <div class='container'>
  <div class='command'><span class='prompt'>root#</span>scanimage -L</div><div class='result'>device `epkowa:libusb:003:004' is a Epson Stylus Photo Rx640/RX650 flatbed scanner</div><div class='command'><span class='prompt'>root#</span><span class='cursor'>&nbsp;</span></div>
  </div>
  
  </div>
</p>
<p>
  (Re)parfait. Comme je le disais plus haut, le driver Epson GPL (alias epkowa) est déjà intégré dans Sane. A ce stade le scanner est reconnu en local. Nous allons maintenant publier cette périphérique sur le réseau.
</p>


	<a name='chapter_4'></a>
  <h2>Publication sur le réseau</h2>
	
<p>
  Première chose à faire, vérifier que le port de SANE, 6566, est présente dans la liste des ports connus par votre serveur. Pour cela, éditer le fichier <kbd>/etc/services</kbd> et rechercher la chaîne <kbd>6566</kbd>. Si cette ligne existe, vérifiez qu'elle correspond à ce qui suit, sinon, ajoutez là :
  
  <div class='code-block code-block-fragment'>
  <div class='container'>
  sane <span class="nu0">6566</span><span class="sy0">/</span>tcp saned <span class="co0"># SANE network scanner daemon</span>
  </div>
  
  </div>
</p>
<p>
  Le démon <kbd>saned</kbd> n'est pas lancé en permanence sur le serveur. Ce serait idiot de prendre de la mémoire pour un service qui ne sert pas tout le temps. A la place, est utilisé le démon <a class='external' target='_blank' href='//node/88' >xinetd</a>. Ce dernier va seulement se placer en écoute du port de SANE et le lancer lorsque quelqu'un va chercher à s'y connecter. 
</p>
<p>
  Il faut donc éditer le fichier qui a du être crée à l'installation de SANE, <kbd>/etc/xinetd.d/sane</kbd> et vérifier qu'il correspond à cela :
  
  <div class='code-block code-block-fragment'>
  <div class='container'>
  &nbsp; &nbsp; <span class="co0"># default: off</span><br />
<span class="co0"># description: The sane server accepts requests \</span><br />
<span class="co0"># for network access to a local scanner via the \</span><br />
<span class="co0"># network.</span><br />
service sane<br />
<span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; disable = no<br />
&nbsp; &nbsp; &nbsp; &nbsp; port &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;= <span class="nu0">6566</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; socket_type &nbsp; &nbsp; = stream<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">wait</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;= no<br />
&nbsp; &nbsp; &nbsp; &nbsp; <a target="blank" href="http://pwet.fr/man/linux/commandes/groups"><span class="kw2">groups</span></a> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;= <a target="blank" href="http://pwet.fr/man/linux/commandes/yes"><span class="kw2">yes</span></a><br />
&nbsp; &nbsp; &nbsp; &nbsp; user &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;= saned<br />
&nbsp; &nbsp; &nbsp; &nbsp; group &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; = saned<br />
&nbsp; &nbsp; &nbsp; &nbsp; server &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;= <span class="sy0">/</span>usr<span class="sy0">/</span>sbin<span class="sy0">/</span>saned<br />
<span class="br0">&#125;</span>
  </div>
  
  </div>
</p>
<p>
  Le point à valider est que la première ligne soit bien <kbd>service sane</kbd> et non pas <kbd>service sane-port</kbd> comme ce fût le cas pour moi. Sans cela, xinetd n'arrive pas à retrouver le nom du service et désactive sane. 
</p>
<p>
  Une fois ceci validé, relancez <kbd>xinetd</kbd> via un <kbd>service xinetd restart</kbd> et vérifiez que le port est bien en écoute par la commande suivante :
<traces type="sh">
  ##netstat -anlp | grep 6566
  tcp        0      0 0.0.0.0:6566                0.0.0.0:*                   LISTEN      7580/xinetd
</traces
</p>
<p>
  A ce stade le scanner est publié, vous pouvez donc aller sur une autre machine pour vérifier son bon fonctionnement. 
</p>

	<a name='chapter_5'></a>
  <h2>Paramétrage du poste client</h2>
	
<p>
  Sur le poste client, SANE doit aussi être installé. Ceci fait, il n'est nécessaire que de modifier le fichier <kbd>/etc/sane.d/net.conf</kbd> pour y ajouter le nom de la machine à laquelle est connecté votre scanner. Imaginons qu'elle s'appelle <kbd>serveur_scanner</kbd>, vous devez donc avoir dans <kbd>/etc/sane.d/net.conf</kbd> la ligne :
  
  <div class='code-block code-block-fragment'>
  <div class='container'>
  serveur_scanner
  </div>
  
  </div>
</p>
<p>
  Une fois le fichier sauvé, il suffit de vérifier que le scanner est bien visible en réutilisant la commande <kbd>scanimage</kbd>
  <traces type="sh">
    ##scanimage -L
    device `net:serveur_scanner:epkowa:libusb:003:004' is a Epson Stylus Photo Rx640/RX650 flatbed scanner
  </traces
</p>
<p>
  Le scanner est donc bien visible et prêt à être utilisé, par exemple via la commande scanimage elle-même :
  
  <div class='code-block code-block-fragment'>
  <div class='container'>
  scanimage --mode color --resolution <span class="nu0">150</span> -d net:serveur_scanner:epkowa:libusb:<span class="nu0">003</span>:<span class="nu0">004</span> <span class="sy0">&gt;</span> mon_image
  </div>
  
  </div>
</p>
<p>
  Et voilà. 
</p>


	<a name='chapter_6'></a>
  <h2>Petit script de scan</h2>
	
<p>
   Pour terminer, voyons comment utiliser <kbd>scanimage</kbd> pour automatiser des numérisations nombreuses (genre un acte de propriété de 50 pages, au hasard <img src="http://artisan.karma-lab.net/sites/all/modules/contrib/smileys/packs/crystal/wink2.gif" title="Wink" alt="Wink" class="smiley-content"/> 
   
  <div class='code-block code-block-fragment'>
  <div class='container'>
  <span class="co0">#! /bin/sh</span><br />
<span class="co0"># paramétres </span><br />
<span class="re2">target_name=</span><span class="st0">&quot;$1&quot;</span> &nbsp;<span class="co0"># Nom du fichier final</span><br />
<span class="re2">page_count=</span><span class="st0">&quot;$2&quot;</span> <span class="co0"># optionnel, le nombre de feuilles à numériser</span><br />
<br />
<span class="co0"># on supprime le dossier temporaire de numérisation, on le recrée et on s'y place</span><br />
<span class="kw1">if</span> <span class="br0">&#91;</span> -d scans <span class="br0">&#93;</span> ; <span class="kw1">then</span><br />
&nbsp; <a target="blank" href="http://pwet.fr/man/linux/commandes/rm"><span class="kw2">rm</span></a> -rf scans<br />
<span class="kw1">fi</span><br />
<a target="blank" href="http://pwet.fr/man/linux/commandes/mkdir"><span class="kw2">mkdir</span></a> scans<br />
<span class="kw3">cd</span> scans<br />
<br />
<span class="co0"># utilisation de scanimage pour déterminer l'adresse de notre scanner</span><br />
<span class="re2">scanner_usb_id=</span>$<span class="br0">&#40;</span> scanimage -L <span class="sy0">|</span> <a target="blank" href="http://pwet.fr/man/linux/commandes/grep"><span class="kw2">grep</span></a> epkowa <span class="sy0">|</span> <a target="blank" href="http://pwet.fr/man/linux/commandes/cut"><span class="kw2">cut</span></a> -d <span class="st0">&quot;<span class="es0">\`</span>&quot;</span> -f2 <span class="sy0">|</span> <a target="blank" href="http://pwet.fr/man/linux/commandes/cut"><span class="kw2">cut</span></a> -d<span class="st0">&quot;'&quot;</span> -f1<span class="br0">&#41;</span><br />
<br />
<span class="co0"># options de numérisation par défaut</span><br />
<span class="re2">scanimage_options=</span><span class="st0">&quot;--mode color --resolution 150 -d $scanner_usb_id&quot;</span><br />
<br />
<span class="co0"># Choix entre 1 et plusieurs pages. </span><br />
<span class="kw1">if</span> <span class="br0">&#91;</span> <span class="sy0">!</span> -z <span class="re1">$page_count</span> <span class="br0">&#93;</span> ; <span class="kw1">then</span><br />
&nbsp; <span class="kw3">echo</span> <span class="st0">&quot;Génération des fichiers sur le modèle $TIME_STAMP&quot;</span><br />
&nbsp; scanimage <span class="re1">$scanimage_options</span> --<span class="re2">batch=</span><span class="st0">&quot;$target_name %d&quot;</span> &nbsp;--batch-count <span class="re1">$page_count</span> --batch-prompt<br />
<span class="kw1">else</span><br />
&nbsp; scanimage <span class="re1">$scanimage_options</span> <span class="sy0">&gt;</span> <span class="re1">$target_name</span><br />
<span class="kw1">fi</span><br />
<br />
<span class="co0"># conversion de toutes les images en JPEG</span><br />
<span class="kw1">for</span> <a target="blank" href="http://pwet.fr/man/linux/commandes/file"><span class="kw2">file</span></a> <span class="kw1">in</span> <span class="sy0">*</span> ; <span class="kw1">do</span> <br />
&nbsp; <span class="kw3">echo</span> <span class="st0">&quot;Conversion de $file en jpg&quot;</span><br />
&nbsp; convert -quality <span class="nu0">80</span> <span class="st0">&quot;$file&quot;</span> <span class="st0">&quot;$file.jpg&quot;</span><br />
&nbsp; <a target="blank" href="http://pwet.fr/man/linux/commandes/rm"><span class="kw2">rm</span></a> -rf <span class="st0">&quot;$file&quot;</span><br />
<span class="kw1">done</span><br />
<br />
<span class="co0"># Si nous avons plus d'une page, on converti les JPEG en un seul document PDF</span><br />
<span class="kw1">if</span> <span class="br0">&#91;</span> <span class="sy0">!</span> -z <span class="re1">$page_count</span> <span class="br0">&#93;</span> ; <span class="kw1">then</span><br />
&nbsp; &nbsp;convert <span class="sy0">*</span> <span class="st0">&quot;../$target_name.pdf&quot;</span><br />
<span class="kw1">else</span><br />
&nbsp; &nbsp;<a target="blank" href="http://pwet.fr/man/linux/commandes/mv"><span class="kw2">mv</span></a> -f <span class="sy0">*</span> ..<br />
<span class="kw1">fi</span><br />
&nbsp; &nbsp;<span class="kw3">cd</span> ..<br />
<br />
<span class="co0"># ménage</span><br />
<a target="blank" href="http://pwet.fr/man/linux/commandes/rm"><span class="kw2">rm</span></a> -rf scans
  </div>
  
  </div>
</p>
<p>
  Il a l'air de rien ce script mais il est très très pratique. Lancé avec un nom de fichier en paramètre, il va scanner et générer le fichier JPEG correspondant.
</p>
<p>
  Et si vous indiquez en plus du nom de fichier, un nombre de pages à scanner, il fabriquera cette fois un PDF de toutes les pages scannées. 
</p>


	<a name='chapter_7'></a>
  <h2>Conclusion</h2>
	
<p>
  SANE est un projet mature qui fonctionne merveilleusement bien. Si vous n'avez pas envie de jouer à la ligne de commande, il existe de très nombreux frontaux graphiques qui le prennent en charge. Citons Kooka sous KDE,  XSane ou le tout jeune projet <a class='external' target='_blank' href='http://live.gnome.org/GnomeScan' >GnomeScan</a>.
</p>    ]]></content>
  </entry>
  <entry>
    <title>La FreeBox HD en récepteur de flux</title>
    <link rel="alternate" type="text/html" href="http://artisan.karma-lab.net/node/1604" />
    <id>http://artisan.karma-lab.net/node/1604</id>
    <published>2008-07-31T16:25:31+02:00</published>
    <updated>2008-08-06T23:49:23+02:00</updated>
    <author>
      <name>Ulhume</name>
    </author>
    <category term="Matériel" />
    <category term="OK" />
    <category term="Planet Libre" />
    <category term="Tutoriel" />
    <summary type="html"><![CDATA[<p>
  Dans le <a class='external' target='_blank' href='/node/1602' >précédent volet</a> de mes bidouillages sur la FreeBox HD, je me suis juste borné à voir ce que l'on pouvait faire de cette boîte si ce n'est pour caler une porte. Ici le but est de la pousser un peu plus loin pour en faire un récepteur fonctionnel de flux permettant aussi bien de lire des DVD que des DivX. Et ce à partir de n'importe quelle machine du LAN. 
</p>
    ]]></summary>
    <content type="html"><![CDATA[<p>
  Dans le <a class='external' target='_blank' href='/node/1602' >précédent volet</a> de mes bidouillages sur la FreeBox HD, je me suis juste borné à voir ce que l'on pouvait faire de cette boîte si ce n'est pour caler une porte. Ici le but est de la pousser un peu plus loin pour en faire un récepteur fonctionnel de flux permettant aussi bien de lire des DVD que des DivX. Et ce à partir de n'importe quelle machine du LAN. 
</p>
<!--break-->

	<a name='chapter_1'></a>
  <h2>Passage à la vitesse supérieur</h2>
	
<p>
   Alors évidement, un "noeud multimédia" ça veut un peu près dire tout et n'importe quoi : lire des vidéos, des DVD, des photos de vacances, la météo, etc... Si vous êtes un fan de cette approche "tout dans ma télé", je vous conseille vivement <a class='external' target='_blank' href='http://easybox-mod.org.preview.lost-oasis.net/index.php' >easybox</a> qui n'est autre qu'une version surgonflée du freePlayer. L'installation est simple, si vous disposez déjà d'un serveur apache dans un coin, et vous permet d'obtenir un niveau de fonctionnalité assez proche d'un <a class='external' target='_blank' href='http://www.mythtv.org/' >MythTV</a> pour ne citer que lui. Ceci dit, easyBox n'est pas le seul dans la cours de récrée, et les "mods" pour la FreeBox HD sont <a class='external' target='_blank' href='http://www.universfreebox.com/freeboxtv/freeplayer/' >assez nombreux</a> pour que chacun y trouve son bonheur. 
</p>

<p>
  Me concernant cette approche n'est pas acceptable. Dans l'architecture de mon nid, ce noeud doit être une périphérique "passive" qui traite un flux entrant venant de n'importe où sur le réseau, et ce avec n'importe quel format source. Je ne veux non plus être lié à un lecteur particulier, ni avoir à manipuler la télécommande pour des opérations autres que basculer les modes TV, VOD et Flux. 
</p>


<p>
  En somme, il me faut arriver à transformer cette boîte en récepteur de flux vidéo et rien de plus. J'exclue donc du périmètre la partie musicale que je laisse à mes serveurs <a class='external' target='_blank' href='http://www.musicpd.org/' >mpd</a> beaucoup plus efficace sur cette tâche. Et au regard de la très faible consommation énergétique de la boîte, et pour peu de prendre la peine de l'éteindre lorsqu'elle est inutilisée, ce serait dommage pour ma part de continuer à dédier un PC pour cet usage. 
</p>



	<a name='chapter_2'></a>
  <h2>Fabriquer un faux FreePlayer</h2>
	
<p>
   L'approche originale de FreePlayer (VLC+serveur HTTP) n'est pas gênante en soit mais implique d'avoir toujours un VLC de lancé sur la même machine. Et ce n'est pour moi pas acceptable. Je veux pouvoir injecter un flux de n'importe où sur le réseau et ce sans qu'une instance de VLC ne tourne quelque part pour des prunes. 
</p>
<p>
   Lorsque l'on commute avec la télécommande la FB-HD en mode FreePlayer, sa seule action est de se connecter en HTTP sur le port 8080 de la machine "freeplayer" qui a été indiquée dans le paramétrage du routeur. Ceci fait, elle va y chercher un fichier <kbd>settings.html</kbd>. Ce fichier est originalement utilisé pour communiquer à la FB-HD le paramétrage VLC. Mais au fond, nous pourrions mettre ce que nous voulons dans ce fichier, l'important étant juste que la FB-HD le trouve lorsqu'elle le cherche. Nous allons donc créer un faux FreePlayer.
</p>
<p>
   Pour ce faire, il suffit de paramétrer le routeur de la FB pour qu'il aille chercher notre faux freePlayer sur une machine hébergeant un serveur Apache. Sur cet apache nous allons simplement créer une nouvelle configuration vhost de ce genre :

  <div class='code-block code-block-fragment'>
  <div class='container'>
  Listen *:8080<br />
NameVirtualHost *:8080<br />
<br />
<span class="sc3"><span class="re1">&lt;VirtualHost</span> *:<span class="nu0">8080</span><span class="re2">&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; DocumentRoot /var/www/fakeplayer<br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; ErrorLog /var/log/fakeplayer-errors.log<br />
&nbsp; &nbsp; &nbsp; &nbsp; CustomLog /var/log/fakeplayer-access.log combined<br />
&nbsp; <span class="sc3"><span class="re1">&lt;Directory</span> /var/www/fakeplayer<span class="re2">&gt;</span></span><br />
&nbsp; &nbsp; Allow from all<br />
&nbsp; <span class="sc3"><span class="re1">&lt;/Directory<span class="re2">&gt;</span></span></span><br />
<span class="sc3"><span class="re1">&lt;/VirtualHost<span class="re2">&gt;</span></span></span>
  </div>
  <div class='caption'>vhost.fakeplayer.conf</div>
  </div>
</p>
<p>
  Ceci fait, il faut créer le dossier <kbd>/var/www/fakeplayer</kbd> et y poser notre premier fichier <kbd>settings.html</kbd>
  
  <div class='code-block code-block-fragment'>
  <div class='container'>
  &lt;!DOCTYPE HTML PUBLIC &quot;-//Freebox//DTD HTML 3.2//EN&quot;&gt;<br />
&lt;html&gt;<br />
&lt;head&gt;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &lt;meta name=refresh content=&quot;0<SEMI>url=/index.php&quot;&gt;<br />
&lt;/head&gt;<br />
&lt;body&gt;<br />
&lt;/body&gt;<br />
&lt;/html&gt;
  </div>
  
  </div>
</p>
<p>
  L'idée est ici d'en faire juste un relais. En lisant la balise <kbd>meta</kbd>, le navigateur HTML de la FB-HD va directement aller à l'URL indiquée, à savoir <kbd>index.php</kbd>. L'avantage de cette méthode est que l'utilisation de toute l'artillerie PHP devient du coup possible. Je me suis ainsi amusé à voir si je pouvais utiliser la FB-HD pour naviguer sur notre intranet utilisant <a class='external' target='_blank' href='http://drupal.org' >Drupal</a>, et ça marche très bien. C'est très, mais alors très moche, mais ça fonctionne. Ceci dit, ce n'est pas le but de la manoeuvre, nous allons donc ici créer un <kbd>index.php</kbd> beaucoup plus simple :

  <div class='code-block code-block-fragment'>
  <div class='container'>
  <span class="sy0">&lt;</span>hlml<span class="sy0">&gt;</span><br />
<span class="sy0">&lt;</span>body<span class="sy0">&gt;</span><br />
<a target="blank" href="http://www.php.net/?"><span class="kw2">&lt;?</span></a> <a target="blank" href="http://www.php.net/print"><span class="kw3">print</span></a> <span class="st0">&quot;Hello World !!!&quot;</span> <a target="blank" href="http://www.php.net/?"><span class="kw2">?&gt;</span></a><br />
<span class="sy0">&lt;/</span>body<span class="sy0">&gt;</span><br />
<span class="sy0">&lt;/</span>html<span class="sy0">&gt;</span>
  </div>
  
  </div>
</p>
<p>
  Un petit coup de redémarrage d'Apache et normalement votre FB-HD devrait se connecter sans problème sur ce "freeplayer" et afficher le message "Hello World", généré par PHP. Le plus gros est passé. 
</p>


	<a name='chapter_3'></a>
  <h2>Le Fond Vidéo</h2>
	
<p>
  A ce stade, les plus curieux ont déjà tenté d'injecter un flux en utilisant VLC et ont constaté que cela ne marche pas.
  
  <div class='code-block code-block-fragment'>
  <div class='container'>
  vlc --<span class="re2">sout=</span><span class="st0">&quot;#std&quot;</span> --sout-standard-<span class="re2">access=</span>udp --sout-standard-<span class="re2">mux=</span>ts --sout-standard-<span class="re2">dst=</span><span class="nu0">212.27</span><span class="nu0">.38</span><span class="nu0">.253</span>:<span class="nu0">1234</span> \<br />
&nbsp; &nbsp; --sout-ts-pid-<span class="re2">video=</span><span class="nu0">68</span> --sout-ts-pid-<span class="re2">audio=</span><span class="nu0">69</span> --sout-ts-<span class="re2">pcr=</span><span class="nu0">80</span> --sout-ts-dts-<span class="re2">delay=</span><span class="nu0">400</span> \<br />
&nbsp; &nbsp; --color --<span class="re2">open=</span>mavideo.ts
  </div>
  
  </div>
</p>
<p>
 Le code HTML s'affiche nickel mais la vidéo, niet. La raison en est que le navigateur WEB de la FB-HD utilise à son compte une syntaxe HTML détournée pour incruster la vidéo dans le fond de la page. Et cette manière détournée consiste à donner une URL très particulière à l'attribut <kbd>background</kbd> du tag <kbD>body</kbd> :

  <div class='code-block code-block-fragment'>
  <div class='container'>
  <span class="sy0">&lt;</span>hlml<span class="sy0">&gt;</span><br />
<span class="sy0">&lt;</span>body background<span class="sy0">=</span><span class="st0">&quot;ts://127.0.0.1&quot;</span><span class="sy0">&gt;</span><br />
<a target="blank" href="http://www.php.net/?"><span class="kw2">&lt;?</span></a> <a target="blank" href="http://www.php.net/print"><span class="kw3">print</span></a> <span class="st0">&quot;Hello World !!!&quot;</span> <a target="blank" href="http://www.php.net/?"><span class="kw2">?&gt;</span></a><br />
<span class="sy0">&lt;/</span>body<span class="sy0">&gt;</span><br />
<span class="sy0">&lt;/</span>html<span class="sy0">&gt;</span>
  </div>
  
  </div>
</p>
<p>
   Avec <kbd>ts://127.0.0.1</kbd>, la FB-HD sait que la source de l'image de fond de notre page HTML est un flux <kbd>ts</kbd> et ouvrira donc en conséquence le port 1234 de sorte à pouvoir le recevoir.  
</p>
<p>
   Une fois notre <kbd>index.php</kbd> modifié, il suffit donc d'utiliser la télécommande pour se reconnecter sur notre FreePlayer et ainsi rafraîchir la page. Page qui en elle même n'a rien de changé. Mais cette fois, si vous relancez la commande VLC donnée plus haut, ce dernier injectera un flux MPEG2 sur le port 1234, il sera utilisé comme fond de la page HTML et viendra donc s'animer sous le "Hello World". 
</p>
<div class='inline-box note'>
J'ai bien tenté de voir si l'on pouvait utiliser cette URL magique pour d'autres sources comme celle d'un attribut <kbd>img</kbd> mais cela ne marche pas. 
</div>
<p>
  La base de notre terminal vidéo est maintenant prête. Il est cependant possible d'aller beaucoup plus loin dans l'utilisation de ce navigateur WEB un peu particulier qu'est la FB-HD. Juste à titre d'exemple, il est possible d'assigner une URL aux boutons clef de la télécommande en ajoutant dans le tag <kbd>head</kbd> quelque chose comme cela :

  <div class='code-block code-block-fragment'>
  <div class='container'>
  &lt;link rel=&quot;info&quot; &nbsp; &nbsp;href=&quot;mon_info.php&quot;&gt;<br />
&lt;link rel=&quot;guide&quot; &nbsp; href=&quot;none&quot;&gt;<br />
&lt;meta name=&quot;home_page&quot; content=&quot;index.php&quot;/&gt;
  </div>
  
  </div>
</p>
<p>
  La liste non exhaustive des boutons assignables sont : info, guide, options, help, play, pause, stop, red, blue, green, yellow. Grâce à cela il est possible pour nous de connecter les actions de notre choix, via PHP, aux boutons de la télécommande. 
</p>
<p>
   Voilà donc qui nous permet de connecter sans lancer VLC, le FB-HD à notre serveur Apache et de pouvoir lire toute source MPEG2. Ainsi pour lire un DVD :
  
  <div class='code-block code-block-fragment'>
  <div class='container'>
  vlc --<span class="re2">sout=</span><span class="st0">&quot;#std&quot;</span> --sout-standard-<span class="re2">access=</span>udp --sout-standard-<span class="re2">mux=</span>ts --sout-standard-<span class="re2">dst=</span><span class="nu0">212.27</span><span class="nu0">.38</span><span class="nu0">.253</span>:<span class="nu0">1234</span> &nbsp;_<br />
&nbsp; &nbsp; --sout-ts-pid-<span class="re2">video=</span><span class="nu0">68</span> --sout-ts-pid-<span class="re2">audio=</span><span class="nu0">69</span> --sout-ts-<span class="re2">pcr=</span><span class="nu0">80</span> --sout-ts-dts-<span class="re2">delay=</span><span class="nu0">400</span> --color \<br />
&nbsp; &nbsp; --<span class="re2">open=</span>dvd:<span class="sy0">//</span>
  </div>
  
  </div>
</p>
<p>
  Reste maintenant à trouver le moyen de lire d'autres formats. 
</p>

	<a name='chapter_4'></a>
  <h2>Transcodage</h2>
	
<p>
  Comme nous l'avons vu plus haut, en natif la FB-HD est quelque peu limité du format. En gros elle connaît Mpeg2, Mp3, l'AC3 et c'est à peu près tout. Du coup, pour un DivX, ça coince. La solution est donc de demander gentiment à VLC d'opérer à la volée une transformation des flux pour les rendre compatible avec la FB-HD. Alors attention, c'est de la pure ligne de commande barbare :
  
  <div class='code-block code-block-fragment'>
  <div class='container'>
  vlc \<br />
&nbsp;--sout-standard-<span class="re2">access=</span>udp --sout-standard-<span class="re2">mux=</span>ts --sout-standard-<span class="re2">dest=</span><span class="nu0">212.27</span><span class="nu0">.38</span><span class="nu0">.253</span>:<span class="nu0">1234</span> \<br />
&nbsp;--sout-ts-pid-<span class="re2">video=</span><span class="nu0">68</span> --sout-ts-pid-<span class="re2">audio=</span><span class="nu0">69</span> --sout-ts-<span class="re2">pcr=</span><span class="nu0">80</span> --sout-ts-dts-<span class="re2">delay=</span><span class="nu0">400</span> --color \ &nbsp; <br />
&nbsp;--<span class="re2">sout=</span><span class="co0">#transcode:std --sout-transcode-vcodec=mp2v --sout-transcode-vb=4096 --sout-transcode-ab=512 \</span><br />
&nbsp;--sout-transcode-<span class="re2">channels=</span><span class="nu0">6</span> --sout-transcode-<span class="re2">acodec=</span>a52 --sout-transcode-<span class="re2">samplerate=</span><span class="nu0">44100</span> &nbsp;\<br />
&nbsp;--sout-transcode-<span class="re2">fps=</span><span class="nu0">25.0</span> --file-<span class="re2">caching=</span><span class="nu0">1000</span> --sout-transcode-soverlay \<br />
&nbsp;--<span class="re2">open=</span>mon_fichier.avi
  </div>
  
  </div>
</p>
<p>
  Je n'aurais pas le culot de dire que j'ai réussi à pondre une telle commande tout seul, et je remercie au passage l'équipe d'EasyBox qui nous offre tout cela sur un plateau dans le fichier <kbd>play.html</kbd>. 
</p>


	<a name='chapter_5'></a>
  <h2>Conclusion</h2>
	
<p>
  Voilà, à ce stade, je dispose d'un véritable terminal audio/vidé. Je peux du coup utiliser la FB-HD pour tout ce qu'elle sait faire (enregistrement, TV, VOD) et utiliser un PC du réseau pour tout le reste (lecture de DVD, de vidéo). Et ce, sans avoir à faire la standardiste avec les câbles. 
</p>
<p>
  L'inconvénient du transcodage est évidement la consommation de ressources au niveau de la machine VLC mais d'un point de vue fonctionnel, ça tourne très bien, et l'on peut toujours rêver en se disant que les prochaines versions du firmware prendront en charge d'autres formats. 
</p>    ]]></content>
  </entry>
  <entry>
    <title>Test de la FreeBox HD</title>
    <link rel="alternate" type="text/html" href="http://artisan.karma-lab.net/node/1602" />
    <id>http://artisan.karma-lab.net/node/1602</id>
    <published>2008-07-29T13:13:39+02:00</published>
    <updated>2008-07-31T16:44:09+02:00</updated>
    <author>
      <name>Ulhume</name>
    </author>
    <category term="Matériel" />
    <category term="OK" />
    <category term="Planet Libre" />
    <category term="Article" />
    <summary type="html"><![CDATA[<p>
   Lorsque j'ai reçu ma freebox, avec son boîtier HD, je suis dit, mui bien !! je vais pouvoir utiliser ce bidule pour remplacer la machine qui me sert aujourd'hui de noeud multimédia. En effet, avec un disque dur, toutes la connectique audio/vidéo et réseau, une télécommande, la TNT, ça semblait parfait tout ça... Sauf que dans la vraie vie, du moins dans la mienne, tout ne se passe pas aussi bien que sur le dépliant....
</p>
    ]]></summary>
    <content type="html"><![CDATA[<p>
   Lorsque j'ai reçu ma freebox, avec son boîtier HD, je suis dit, mui bien !! je vais pouvoir utiliser ce bidule pour remplacer la machine qui me sert aujourd'hui de noeud multimédia. En effet, avec un disque dur, toutes la connectique audio/vidéo et réseau, une télécommande, la TNT, ça semblait parfait tout ça... Sauf que dans la vraie vie, du moins dans la mienne, tout ne se passe pas aussi bien que sur le dépliant....
</p>
<!--break-->

	<a name='chapter_1'></a>
  <h2>Consommation</h2>
	
<p>
   Avant de commence à chercher à utiliser la FB-HD en remplacement d'une machine standard, la première question à se poser est de savoir si c'est énergétiquement rentable. J'ai donc commencé par regarder ce que mangait une FreeBox déjà, et une Freebox HD ensuite. 
<table>
<tr><th>Element</th><th>Mode</th><th>Consommation</th></tr>
<tr><td>FreeBox</td><td>-</td><td>9.2w</td></tr>
<tr><td>FreeBox HD</td><td>Veille</td><td>13.6w</td></tr>
<tr><td>FreeBox HD</td><td>Veille</td><td>15.5w</td></tr>
<tr><td>FreePlug</td><td>à vide</td><td>2w</td></tr>
<tr><td>Boitier CPL</td><td>en transfert</td><td>0w</td></tr>
</table>
</p>
<p>
   Déjà une chose est sur, les Freebox HD consomme moins qu'un PC, même en mini ITX. Si la consommation fait partie des préoccupations, c'est donc une machine à utiliser. A noter cependant le résultat en veille qui est lui assez énorme. En gros la veille de la FB-HD consiste juste à éteindre le disque dur et l'afficheur. Pensez donc à éteindre réellement ce boitier lorsque vous ne l'utilisez pas car 13.6W 24/24, 7/7, ça fait un vraie consommation pour rien du tout à l'année. 
</p>
<p>
  La consommation de la FreeBox elle-même est plus élevée qu'un simple modem-routeur comme mon ancien Linksys WAG354G qui ne consommait lui que 5.5w. Mais cela reste raisonnable. Une surprise cependant, le boitier CPL ne pompe pas suffisament pour que mon testeur puisse affficher autre chose que 0. D'une autre côté le contraire serait inquiétant <img src="http://artisan.karma-lab.net/sites/all/modules/contrib/smileys/packs/crystal/wink2.gif" title="Wink" alt="Wink" class="smiley-content"/>
</p>

	<a name='chapter_2'></a>
  <h2>MultiPoste</h2>
	
<p>
   La première chose que j'ai testé avec la FreeBox est le multi-poste et cela passe sans problème par le réseau switché en lançant un simple <kbd>vlc http://mafreebox.freebox.fr/freeboxtv/playlist.m3u</kbd>. Toutes les chaînes  y sont, certaines même en HD, sauf M6, TF1 et W9 qui semblent ne pas vouloir que les <a class='external' target='_blank' href='/node/1601' >voleurs que nous sommes</a> puissent copier les flux... Vu la soupe que ces chaînes distribuent, le préjudice n'est pas énorme. Cependant ce qui intrigue c'est pourquoi se donner tant de peine pour les 2 ou 3 millions d'abonnés free qui représente finalement une faible proportion de français qui peuvent potentiellement coller une carte TNT dans leur bécane et enregistrer ce que bon leur semble... Bref, le multiposte sous Linux marche très bien, sauf pour les chaîne de m***e.  
</p>
<p>
  Pour l'aspect technique, la playlist en question contient une série de flux 
  <a target='_blank' href='http://fr.wikipedia.org/wiki/RTSP'>
  RTSP
  </a> (port 554) du genre
  
  <div class='code-block code-block-fragment'>
  <div class='container'>
  rtsp:<span class="sy0">//</span>mafreebox.freebox.fr<span class="sy0">/</span>freeboxtv<span class="sy0">/</span>stream?<span class="re2">id=</span><span class="nu0">201</span>
  </div>
  
  </div>
</p>
<p>
  Cette adresse est donc parfaitement utilisable avec n'importe quel lecteur comme <kbd>mplayer</kbd>.
</p>


	<a name='chapter_3'></a>
  <h2>Bazzar de connectique..</h2>
	
<p>
   Le première problème rencontré est que Mme HD est qu'elle conçue pour les gens qui possèdent... une télévision. Alors je me suis dit, pas de soucis, y'a du s-vidéo donc c'est utilisable avec le rétro-projecteur. Et en effet, ça fonctionne, sauf que le son est tout est en digitale (logique c'est une HD machin...) et moi pas avoir prise digitale son mon bel ampli que j'aime. Alors après avoir écumé un peu les forums, je me suis rendu compte qu'il me manquait juste un bout d'adaptateur Péritel/RCA. Après l'avoir commandé et reçu,  tout a correctement fonctionné... jusqu'à ce que la lampe du vidéo-projecteur sans doute malmenée par le déménagement, me lâche avec traîtrise... maudite la HD ?? 
</p>
<p>
   Heureusement, sur les conseils éclairés d'un ami, je me suis souvenu que j'avais acheté dans le temps un adaptateur HDMI/DVI. Techniquement il devait donc y avoir moyen de balancer le signal sur un de mes moniteurs. Et la bonne nouvelle est que cela fonctionne très bien. Je pouvais donc enfin voir les menus et passer à l'étape suivante... 
</p>


	<a name='chapter_4'></a>
  <h2>M. FB et Mme HD</h2>
	
<p>
  Ensuite vient le moment de tenter l'accouplement entre les deux zinzins. Officiellement il y a le choix entre relier par le RJ45 via les deux prises jaunes ou encore utiliser les <kbd>FreePlug</kbd>. En effet, et là on fait <q>Ohhh!</q>, les deux blocs d'alimentation peuvent causer entre-eux via un adaptateur 
  <a target='_blank' href='http://fr.wikipedia.org/wiki/CPL'>
  CPL
  </a>/RJ45 intégré. J'en avais fait un petit test de performances <a class='external' target='_blank' href='/node/1594' >ici</a>. Au passage, M. FB v5 ne semble plus pouvoir causer avec sa copine en WIFI. D'ailleurs les boîtiers n'ont plus d'antennes du tout...  
</p>
<p>
   Bref, deux moyens de communiquer bien galère en soit car entre un câble de 50cm et le CPL qui a tendance à me pourrir les enceintes, le choix est pour le peu difficile. D'ailleurs à propos du CPL, un petit truc bien funky...
</p>
<p>
 Grand naïf que je suis et enthousiasmé par les bons résultats de mes tests, j'avais commandé en même temps que mon adaptateur péritel/Audio, deux modules CPL que je pensais "supplémentaires". En effet, avec un FreePlug sur le mini-routeur de la freebox, l'autre sur la HD, je me disais que je pourrais avoir en plus deux adaptateurs sur deux machines supplémentaires où je voulais sur le réseau électrique.. En ben non, pas possible, les adaptateurs blancs refusent de parler aux adaptateurs noirs, c'est l'apartheid numérique cette histoire.</p>
 <p>
 J'ai bien sur contacté le support de free en faisant mon étonné (très pratique d'ailleurs leur nouveau système de support par chat), et la réponse officielle est bien que les deux freeplugs n'adresseront jamais la parole aux modules CPL achetés dans la boutique Free... Sympa non ? 
</p>
<p>
   La raison de cette état de fait pour le peu agaçant est peut-être que les FreePlug utilisent le standard <kbd>HomePlug AV</kbd> et que les boîtiers noirs la <kbd>Home Plug Turbo</kbd>. Et même si je pensais que ces deux standards étaient conçus pour savoir causer, il semblerait que ce ne soit pas le cas. 
</p>
<div class='inline-box note'>
  Pour dé-associer les deux FreePlug, il semble que maintenir le boutons pressé plus de 10 secondes suffisent à tout réinitialiser. 
</div>
<p>
Alors en désespoir de cause, j'ai branché sans espoir aucun le boîtier HD sur mon switch... tout simplement, sans freeplug ni rien. Et là miracle, ça marche ! Tout les services y sont... Du coup je ne comprend plus bien l'intérêt de la manoeuvre... Il faudrait tester sur un hub pour voir si on arrive à choper les paquets avec <a class='external' target='_blank' href='http://www.wireshark.org/' >wireshark</a>. Dans tout les cas, je peux enfin mettre le boitier HD où je veux sur mon réseau et c'est déjà pas mal. Voyons maintenant comment l'utiliser comme module multimédia.
</p>


	<a name='chapter_5'></a>
  <h2>Passage par FTP</h2>
	
<p>
   Pour commencer, la version soft. La freebox est disponible l'adresse <kbd>212.27.38.253</kbd> (mafreebox.freebox.fr) et pour le boîtier hd c'est <kbd>212.27.40.254</kbd> (hd1.freebox.com). Ce sont les mêmes adresse pour tout le monde et ce quel que soit la topologie de votre réseau. 
 </p>
 <p>
   Pour attaquer le boîtier en mode FTP, il faut déjà aller sur l'interface TV (bouton <kbd>free</kbd> de la télécommande), dans <kbd>Paramètres</kbd> puis <kbd>Disque dur</kbd>, pour activer et formater la surface. Pourquoi n'est-ce pas fait en usine, mystère. Ensuite de nouveau dans <kbd>Paramètres</kbd>, il faut aller dans <kbd>FTP</kbd> pour activer le service (pas la peine de mettre un mot de passe). 
   </p>
<p>
   Ceci fait, on prend notre Nautilus préféré en on va à <kbd>ftp://<script>document.write(String.fromCharCode(60,97,32,104,114,101,102,61,39,109,97,105,108,116,111,58,102,114,101,101,98,111,120,64,104,100,49,46,102,114,101,101,98,111,120,46,99,111,109,39,62,102,114,101,101,98,111,120,64,104,100,49,46,102,114,101,101,98,111,120,46,99,111,109,60,47,97,62));</script></kbd> et là devrait apparaître un dossier <kbd>Vidéo</kbd> et un dossier <kbd>Enregistrement</kbd>. Dans le dernier se trouve tout ce que vous avez enregistré avec la freebox sauf, car il faut être d'une crétinerie homogène dans la vie, tout ce qui vient de M6, TF1 et W9. On y survivra...
</p>
<p>
  Mais le but étant de lire des vidéos, mon premier test fût d'en coller une au hasard provenant d'un DVD que je possède et que j'ai encodé pour l'occasion en AVI/MP4. Alors le débit est pas terrible avec un petit 2.3mo/s mais ça fini par rentrer et la lecture elle, ne pose aucun problème. Dans l'autre sens, la récupération des programmes enregistrés se fait aussi sans problème au format mpeg/.ts, comme pour la TNT. Et le débit est le même en remontée. 
</p>
<p>
  A noter qu'il est possible de commencer à lire une vidéo avant qu'elle ne soit totalement déchargée sur le disque interne. Maintenant c'est bien sympa, mais comment je fais pour lire un DVD... 
</p>



	<a name='chapter_6'></a>
  <h2>Passage par l'USB</h2>
	
<p>
   Vu que la freebox est un GNU/Linux de base, il n'y avais pas de raison pour qu'un lecteur de DVD connecté à un convertisseur IDE/USB ne fonctionne pas. Et en effet, ça fonctionne... Ca rame grave, mais ça fonctionne... Après faut faire un petit tour dans le menu "Disque dur" et remonter d'un cran pour pouvoir naviguer... Sauf que cela nous donne accès à la structure du DVD (VIDEO_TS, AUDIO_TS, etc), pas de menus, pas d'accès aux .VOB, donc solution quelque peu limitée en utilité <img src="http://artisan.karma-lab.net/sites/all/modules/contrib/smileys/packs/crystal/wink2.gif" title="Wink" alt="Wink" class="smiley-content"/> Un support pas très sec pour le DVD dirons nous...
</p>
<p>
  J'ai aussi tenté avec une clef mémoire et disque dur, et là aussi, ça passe. Mais c'est juste histoire de dire...  A noter que la sale bête ne lit pas les partitions EXT3, ce qui est assez culotté pour un système tournant sous GNU/Linux...
</p>
<div class='inline-box note'>
  Evidement, j'ai aussi testé de brancher un clavier et une souris, mais les bougres, ils y avaient pensé aussi <img src="http://artisan.karma-lab.net/sites/all/modules/contrib/smileys/packs/crystal/smile.gif" title="Smiling" alt="Smiling" class="smiley-content"/>
</div>


	<a name='chapter_7'></a>
  <h2>Passage par VLC</h2>
	
<p>
   Bon, c'est à ce stade que les véritables expérimentation vont pouvoir commencer. J'ai tout de même mis un peu de temps à comprendre ce qu'était cette histoire de <kbd>freeplayer</kbd>.  L'idée est d'avoir sur une machine du réseau local, un serveur VLC contrôlé par son serveur HTTP interne. Pour commencer, choisissez une machine et téléchargez y le <a class='external' target='_blank' href='ftp://ftp.proxad.net/pub/freeplayer' >freeplayer</a>. Décompressez le et installez le en tant que root en laçant la commande <kbd>./install.sh</kbd>.
</p>
<p> 
  Ceci fait, vous pouvez déjà lancer la commande <kbd>/usr/local/freeplayer/bin/vlc-fbx.sh</kbd> en passant en paramètre un fichier multimédia. VLC se lance et puis c'est tout <img src="http://artisan.karma-lab.net/sites/all/modules/contrib/smileys/packs/crystal/smile.gif" title="Smiling" alt="Smiling" class="smiley-content"/> Vous pouvez tester que le serveur HTTP fonctionne en allant sur un navigateur à l'URL <kbd>http://ma_machine_freeplayer:8080</kbd>. Cela affiche une erreur mais ça prouve que ça fonctionne...
</p>
<p>
   Deuxième étape, il faut aller sur le site de configuration de la FreeBox pour indiquer dans le paramétrage du routeur l'IP de la machine locale en question et redémarrer la FreeBox après. Ne suivez d'ailleurs pas les conseils disant qu'il faille modifier la configuration du NAT pour router le trafic venant d'internet sur le port 8080 de la machine cible, cela n'apporte rien et ouvre un trou de sécurité. 
</p>
<p>
   Maintenant que VLC tourne, que le serveur HTTP est actif, que la freebox en connaît l'adresse IP, ne reste plus qu'à aller dans le menu <kbd>Freeplayer/Se connecter au Freeplayer</kbd> pour que la vilaine interface s'affiche sur l'écran du boîtier. Un coup de <kbd>Play</kbd> sur la télécommande et c'est parti. Techniquement ce play a été transmis à VLC par l'interface WEB et ce dernier a alors commencé à transcoder le fichier multimédia que vous lui avez donné en paramètre pour l'injecter sur le port 1234 de la freebox HD.      
</p>
 <p>
   Une fois VLC connecté, rien ne vous oblige à utiliser encore la télécommande. Vous pouvez parfaitement lancer d'autres sessions de VLC qui vont injecter directement sur le port 1234 :
  
  <div class='code-block code-block-fragment'>
  <div class='container'>
  vlc --<span class="re2">sout=</span><span class="st0">&quot;#std&quot;</span> --sout-standard-<span class="re2">access=</span>udp --sout-standard-<span class="re2">mux=</span>ts --sout-standard-<span class="re2">dest=</span><span class="nu0">212.27</span><span class="nu0">.38</span><span class="nu0">.253</span>:<span class="nu0">1234</span> --sout-ts-pid-<span class="re2">video=</span><span class="nu0">68</span> --sout-ts-pid-<span class="re2">audio=</span><span class="nu0">69</span> --sout-ts-<span class="re2">pcr=</span><span class="nu0">80</span> --sout-ts-dts-<span class="re2">delay=</span><span class="nu0">400</span> --color --<span class="re2">open=</span>mon_fichier.mp3
  </div>
  
  </div>
</p>
<p>
   Alors à ce stade, cela semble très utilisable au delta prés de devoir systématiquement passer par la télécommande pour connecter le mode FreePlayer ET de lancer VLC auparavant. Maintenant, le joie cesse assez rapidement dés que l'on tente de balancer toute sorte de formats à la machine. Par exemple si la lecture de MP3 passe sans problème, la tentative de lecture d'un format OGG donne quelque chose comme cela :
   
  <div class='code-block code-block-fragment'>
  <div class='container'>
  <span class="br0">&#91;</span><span class="nu0">00000318</span><span class="br0">&#93;</span> main private error: cannot add this stream<br />
<span class="br0">&#91;</span><span class="nu0">00000324</span><span class="br0">&#93;</span> main packetizer error: cannot create packetizer output <span class="br0">&#40;</span>vorb<span class="br0">&#41;</span> &nbsp;
  </div>
  
  </div> 
 </p>
</p>
  Même résultat lorsque je tente un DivX encodé avec ffmpeg, j'ai le son, mais pas l'image :
   
  <div class='code-block code-block-fragment'>
  <div class='container'>
  <span class="br0">&#91;</span><span class="nu0">00000318</span><span class="br0">&#93;</span> main private error: cannot add this stream<br />
<span class="br0">&#91;</span><span class="nu0">00000324</span><span class="br0">&#93;</span> main packetizer error: cannot create packetizer output <span class="br0">&#40;</span>FMP4<span class="br0">&#41;</span> &nbsp;
  </div>
  
  </div> 
</p>
<p>
   Tel quel donc, il y a encore quelque soucis que nous allons devoir régler pour lire tous les formats. 
</p>


	<a name='chapter_8'></a>
  <h2>Conclusion</h2>
	
<p>
  Ce boîtier est un monde de "presque ça" qui me rappelle fortement un squetch de Palmade (tu préfères quoi ? Des dents en bois ou des jambes en mousses...). Le FTP est sympa mais faut transférer. L'USB fonctionne jusqu'au moment de pouvoir en faire quelque chose, et le mode flux ne lit que le 1/4 des formats que j'utilise. Je pourrais me dire que je conserve ma machine multimédia et que je n'utilise la box que pour <del>TF1</del> <del>M6</del> <del>W9</del> la VOD. Mais ça va pas être très fun de garder tout se bazar de fil connectés pour cette seule utilisation.</p>
 <p>
    Pour ce qui est du CPL, hors de question que je remette la main au portefeuille pour deux adaptateurs de plus, sans compter sur le parasitage ultra-agaçant de l'ampli quelque soit l'endroit où je branche les modules.
 </p>
<p>
  En bref, j'avais un peu le sentiment que Free m'avait offert un magnifique presse-livres très geek et moi je vais plutôt investir dans une grosse mèche et une boite de fiches RJ45... Mais même si le second membre de la conclusion est pour moi définitif, la très faible consommation, la connectique complète, l'enregistrement des programmes TV et la VOD m'empêche de la mettre réellement au placard. En creusant, il doit y avoir moyen d'en faire quelque chose. A suivre donc...
</p>    ]]></content>
  </entry>
  <entry>
    <title>Système de navigation GPS</title>
    <link rel="alternate" type="text/html" href="http://artisan.karma-lab.net/node/1595" />
    <id>http://artisan.karma-lab.net/node/1595</id>
    <published>2008-07-21T11:22:43+02:00</published>
    <updated>2008-07-21T15:37:30+02:00</updated>
    <author>
      <name>Ulhume</name>
    </author>
    <category term="Matériel" />
    <category term="OK" />
    <category term="Planet Libre" />
    <category term="Tutoriel" />
    <summary type="html"><![CDATA[<p>
  Il y a longtemps que j'avais envie d'un GPS pour palier à mon terrible sens de l'orientation et enfin cesser de me perdre. Il y a longtemps aussi que j'avais envie de coller ce type de dispositif sur le Zaurus sans jamais sauter le pas. Avec l'arrivée de <a class='external' target='_blank' href='/node/1587' >l'U810</a> et les précieux conseils <a class='external' target='_blank' href='/node/1583%2523comment-2591' >Orgoz</a>, c'est maintenant chose faite. Reste maintenant à mettre tout cela en musique...
</p>
    ]]></summary>
    <content type="html"><![CDATA[<p>
  Il y a longtemps que j'avais envie d'un GPS pour palier à mon terrible sens de l'orientation et enfin cesser de me perdre. Il y a longtemps aussi que j'avais envie de coller ce type de dispositif sur le Zaurus sans jamais sauter le pas. Avec l'arrivée de <a class='external' target='_blank' href='/node/1587' >l'U810</a> et les précieux conseils <a class='external' target='_blank' href='/node/1583%2523comment-2591' >Orgoz</a>, c'est maintenant chose faite. Reste maintenant à mettre tout cela en musique...
</p>
<!--break-->

	<a name='chapter_6'></a>
  <h2>Matériel</h2>
	
<p>
  Je cherchais un récepteur bluetooth 100% fonctionnel sous Linux et Orgoz m'avait conseillé le Globalsat BT-338. Il est donc arrivé, 60€ et 2 jours plus tard. Et rien qu'au déballage il y avait de quoi être satisfait. Il est fournit avec une batterie Lithium-ions, un chargeur mural ET un chargeur allume-cigares. Le look est un peu moche mais l'interface est ultra simple : trois diodes (charge, localisation et bluetooth) et un unique bouton pour l'allumer et l'éteindre. 
</p>
<p>
   Mais l'aspect le plus intéressant est qu'il localise ses satellites très rapidement. Guère plus de 5 secondes dans mon cas, et en intérieur... En bref une bonne impression. Ne restait plus qu'à tester sous GNU/Linux.
</p>


	<a name='chapter_7'></a>
  <h2>Teste de réception</h2>
	
<p>
   La première chose à vérifier est bien évidement que le bluetooth fonctionne. Un simple <kbd>/etc/init.d/bluetooth restart</kbd> devrait faire l'affaire. Ensuite, allumez le BT-338 et lancez une détection :

  <div class='code-block code-block-traces'>
  <div class='container'>
  <div class='command'><span class='prompt'>root#</span>hcitools scan</div><div class='result'>Scanning ...</div><div class='result'>00:0D:B5:38:25:F3	BT-GPS-3825F3</div><div class='command'><span class='prompt'>root#</span><span class='cursor'>&nbsp;</span></div>
  </div>
  
  </div>
</p>
<p>
   Nous avons maintenant l'adresse de notre récepteur GPS. L'étape suivante consiste à lier ce receveur à un port de communication (rfcomm) qui est très semblable à un port série. Nous verrons plus tard comment automatiser tout cela mais pour l'instant il s'agit de test. Nous allons donc créer le lien à la main :

  <div class='code-block code-block-traces'>
  <div class='container'>
  <div class='command'><span class='prompt'>root#</span>rfcomm connect 0 00:0D:B5:38:25:F3</div><div class='result'>Connected /dev/rfcomm0 to 00:0D:B5:38:25:F3 on channel 1</div><div class='result'>Press CTRL-C for hangup</div><div class='command'><span class='prompt'>root#</span><span class='cursor'>&nbsp;</span></div>
  </div>
  
  </div>
</p>
<p>
  Voilà, le récepteur est lié au device <kbd>/dev/rfcomm0</kbd> (de par le paramètre <kbd>0</kbd>), sur le canal <kbd>1</kbd> qui est le canal standard du <kbd>rfcomm</kbd>. Maintenant ouvrons une autre console en root, et commençons par installer le démon chargé de lire les données en provenance du gps, <a class='external' target='_blank' href='http://gpsd.berlios.de/' >gpsd</a>.</p>
<p>
 L'avantage de ce démon est qui va permettre à plusieurs applications d'accéder en même temps aux données GPS en passant par le réseau. Il convient d'abord de l'installer, puis de le lancer en mode "non-démon" (pour les tests une fois encore) :

  <div class='code-block code-block-traces'>
  <div class='container'>
  <div class='command'><span class='prompt'>root#</span>gpsd -N -D 2 /dev/rfcomm0</div><div class='result'>gpsd: launching (Version 2.34)</div><div class='result'>gpsd: listening on port 2947</div><div class='result'>gpsd: successfully connected to the DBUS system bus</div><div class='result'>gpsd: running with effective group ID 0</div><div class='result'>gpsd: running with effective user ID 0</div><div class='result'>gpsd: opening GPS data source at '/dev/rfcomm0'</div><div class='result'>gpsd: speed 9600, 8N1</div><div class='result'>gpsd: garmin_gps not active.</div><div class='result'>gpsd: gpsd_activate(0): opened GPS (5)</div><div class='result'>gpsd: closing GPS=/dev/rfcomm0 (5)</div><div class='command'><span class='prompt'>root#</span><span class='cursor'>&nbsp;</span></div>
  </div>
  
  </div>
</p>
<p>
  le <kbd>-N</kbd> empêche le passage en mode démon, et le <kbd>-D 2</kbd> nous permet de voir ce qui se passe. 
</p>
<p>
  Maintenant il s'agit de lire les coordonnées émises par le boîtier. Dans un premier temps, nous allons utilisez le très simple <kbd>gpsdrive</kbd>. Dans la mesure où il utilise en standard gpsd, il n'y rien à faire d'autre que de le lancer dans une console, mais en tant qu'utilisateur sans privilèges cette fois :

  <div class='code-block code-block-fragment'>
  <div class='container'>
  gpsdrive
  </div>
  
  </div>
</p>
<p>
  Et là, si tout va bien, la console où vous avez lancé <kbd>gpsd</kbD> devrait se mettre à jacasser et sur l'écran de <kbd>gpsdrive</kbd>, vous devriez voir une croix à l'endroit où vous vous trouvez dans le monde ainsi que les coordonnées numériques dans la ligne de statut, en bas de l'écran. 
</p>


	<a name='chapter_8'></a>
  <h2>Automatisation</h2>
	
<p>
   Bon, étape suivante, automatiser tout cela. Pour commencer, nous allons paramétrer la pile bluetooth de sorte à ce que le device <kbd>/dev/rfcomm0</kbd> soit systématiquement associé au récepteur GPS et qu'il soit ainsi créé automatiquement. Pour cela, il faut éditer le fichier <kbd>/etc/bluetooth/rfcomm.conf :

  <div class='code-block code-block-fragment'>
  <div class='container'>
  rfcomm0 <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="co0"># Automatically bind the device at startup</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">bind</span> <a target="blank" href="http://pwet.fr/man/linux/commandes/yes"><span class="kw2">yes</span></a>;<br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="co0"># Bluetooth address of the device</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; device <span class="nu0">00</span>:0D:B5:<span class="nu0">38</span>:<span class="nu0">25</span>:F3<br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="co0"># RFCOMM channel for the connection</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; channel <span class="nu0">1</span>;<br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="co0"># Description of the connection</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; comment <span class="st0">&quot;Récepteur GPS&quot;</span><br />
<span class="br0">&#125;</span>
  </div>
  <div class='caption'>/etc/bluetooth/rfcomm.conf</div>
  </div>
</p>
<p>
  Ceci fait, un redémarrage du service bluetooth s'impose (<kbd>/etc/init.d/bluetooth restart</kbd>).
</p>
<p>
  Maintenant vous devriez avoir un device <kbD>/dev/rfcomm0</kbd> même quant le récepteur est éteint.  La tentative de connexion sera automatique lorsqu'un logiciel tenter d'y accéder. 
</p>
<p>
  Pour gpsd, étrangement il n'y a pas, du moins pour Mandriva, de script de démarrage. L'option prise par cette distribution semble être d'utiliser <kbd>udev</kbd>. Je n'ai rien contre cela sauf que cela se base sur le postulat que le kernel est au courrant de tout ce qui est connecté dynamiquement au système. C'est nickel pour un récepteur USB, mais pour un bluetooth, ça marche beaucoup moins bien vu qu'il n'y a pas de découverte dynamique.   Ce n'est pas non plus très malin pour ceux qui utilisent un récepteur via le port RS232C.
</p>
<p>
  Bref, nous en sommes donc quite à créer un petit script de lancement à la mano :  <kbD>/etc/init.d/gpsd</kbd>

  <div class='code-block code-block-fragment'>
  <div class='container'>
  <span class="co0">#!/bin/bash</span><br />
<span class="co0">#</span><br />
<span class="co0"># chkconfig: 2345 15 15</span><br />
<span class="co0"># description: GPSD</span><br />
<span class="co0"># processname: gpsd</span><br />
<span class="co0"># pidfile: /var/run/gpsd.pid</span><br />
<span class="co0"># confid /etc/sysconfig/gpsd</span><br />
<span class="co0">#</span><br />
<span class="co0">### BEGIN INIT INFO</span><br />
<span class="co0"># Provides: gps</span><br />
<span class="co0"># Should-Start:</span><br />
<span class="co0"># Default-Start: 2 3 4 5</span><br />
<span class="co0"># Short-Description: gpsd</span><br />
<span class="co0"># Description: gpsd</span><br />
<span class="co0">### END INIT INFO</span><br />
<br />
<span class="co0"># source function library</span><br />
. <span class="sy0">/</span>etc<span class="sy0">/</span>rc.d<span class="sy0">/</span>init.d<span class="sy0">/</span>functions<br />
<br />
<span class="re2">GPSDCFG=</span><span class="sy0">/</span>etc<span class="sy0">/</span>sysconfig<span class="sy0">/</span>gpsd<br />
<span class="re2">GPSDDEVICE=</span><span class="sy0">/</span>dev<span class="sy0">/</span>rfcomm0<br />
<br />
<span class="re2">RETVAL=</span><span class="nu0">0</span><br />
<br />
<span class="kw1">case</span> <span class="st0">&quot;$1&quot;</span> <span class="kw1">in</span><br />
&nbsp; start<span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; gprintf <span class="st0">&quot;Starting gpsd services: &quot;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#91;</span> -f <span class="st0">&quot;$GPSDCFG&quot;</span> <span class="br0">&#93;</span>; <span class="kw1">then</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; . <span class="st0">&quot;$GPSDCFG&quot;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">fi</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#91;</span> -n <span class="st0">&quot;$device&quot;</span> <span class="br0">&#93;</span>;then<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re2">GPSDDEVICE=</span><span class="sy0">/</span>dev<span class="sy0">/</span><span class="re1">$device</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">fi</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#91;</span> <span class="sy0">!</span> -e <span class="re1">$GPSDDEVICE</span> <span class="br0">&#93;</span>;then<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; gprintf <span class="st0">&quot;%s don't exist<span class="es0">\n</span>&quot;</span> <span class="st0">&quot;$GPSDDEVICE&quot;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">exit</span> <span class="nu0">0</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">fi</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; daemon gpsd <span class="re1">$GPSDDEVICE</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re2">RETVAL=</span><span class="re4">$?</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">echo</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#91;</span> <span class="re1">$RETVAL</span> -eq <span class="nu0">0</span> <span class="br0">&#93;</span> <span class="sy0">&amp;&amp;</span> <a target="blank" href="http://pwet.fr/man/linux/commandes/touch"><span class="kw2">touch</span></a> <span class="sy0">/</span>var<span class="sy0">/</span>lock<span class="sy0">/</span>subsys<span class="sy0">/</span>gpsd<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sy0">;;</span><br />
&nbsp; stop<span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; gprintf <span class="st0">&quot;Shutting down gpsd services: &quot;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; killproc gpsd<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re2">RETVAL=</span><span class="re4">$?</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">echo</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#91;</span> <span class="re1">$RETVAL</span> -eq <span class="nu0">0</span> <span class="br0">&#93;</span> <span class="sy0">&amp;&amp;</span> <a target="blank" href="http://pwet.fr/man/linux/commandes/rm"><span class="kw2">rm</span></a> -f <span class="sy0">/</span>var<span class="sy0">/</span>lock<span class="sy0">/</span>subsys<span class="sy0">/</span>gpsd<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sy0">;;</span><br />
&nbsp; restart<span class="sy0">|</span>reload<span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; $<span class="nu0">0</span> stop<br />
&nbsp; &nbsp; &nbsp; &nbsp; $<span class="nu0">0</span> start<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re2">RETVAL=</span><span class="re4">$?</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sy0">;;</span><br />
&nbsp; status<span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; status gpm<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re2">RETVAL=</span><span class="re4">$?</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sy0">;;</span><br />
&nbsp; <span class="sy0">*</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; gprintf <span class="st0">&quot;Usage: gpsd {start|stop|status|restart|reload}<span class="es0">\n</span>&quot;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">exit</span> <span class="nu0">1</span><br />
<span class="kw1">esac</span><br />
<span class="kw3">exit</span> <span class="re1">$RETVAL</span>
  </div>
  
  </div>
</p>
<p>
  Pour que le tout soit lancé au démarrage, rendez le script exécutable (<kbd>chmod +x /etc/init.d/gpsd</kbd>) et lancez ensuite un <kbD> chkconfig --add gpsd</kbd>. 
</p>
<p>
  vous pouvez déjà tester en lançant à la main <kbd>/etc/init.d/gpsd start</kbd> et vérifier par un <kbd>ps -edaf | grep gpsd</kbd> que le process est bien là. Il suffit ensuite de démarrer <kbd>gpsdrive</kbd> pour vérifier que tout fonctionne. Normalement gpsd ne s'offusque pas que le récepteur soit arrêté puis rallumé. 
</p>


	<a name='chapter_9'></a>
  <h2>Applications</h2>
	
<p>
  Maintenant que tout fonctionne, il faudrait quelque chose de plus "velu" que <kbd>gpsdrive</kbd>. J'ai testé un certain nombre d'application mais deux projets m'ont semblés plus aboutis que les autres : <a class='external' target='_blank' href='http://viking.sourceforge.net/mediawiki/index.php/Main_Page' >Viking</a> et <a class='external' target='_blank' href='http://www.navit-project.org/' >NavIt</a>.
</p>
<p>
  Le premier est d'un concept assez intéressant, permettant d'ajouter des couches de calques les unes sur les autres. En commençant par la couche <kbd>GPSLayer</kbd> qui se connecte à <kbd>gpsd</kbd> et en finissant par <kbd>MapLayer</kbd> que l'on peut paramétrer pour aller directement chercher sur GoogleMap en vue carte ou satellite. C'est bien fait, rapide, facile à utiliser mais n'a qu'un seul problème chez moi, il ne lit pas correctement les coordonnées. J'ai peut être loupé une étape dans le paramétrage mais ce gentil logiciel a décidé de me coller au milieu de la luzerne, en plein champs. C'est très gentil de sa part mais pas très concordant avec ce que je vois de ma fenêtre. En pourtant GPSDrive, lui, me donne les bonnes coordonnées. 
</p>
<p>
  Mais mis à part ce "léger" problème qui devrait être réglé lorsque j'arriverais à attraper l'auteur sur iRC, l'outil me parait bien prometteur pour un type d'utilisateur tout particulier qui est la contribution au projet <a class='external' target='_blank' href='http://www.openstreetmap.org/' >OpenStreeMap</a>.
</p>
<p> en effet, <kbD>vicking</kbD> permet de mémoriser les chemins parcourus et de les remonter sur le serveur OSM et ainsi améliorer cet génial système libre de cartographie. A tester donc, dés que je pourrais sortir de mon champ <img src="http://artisan.karma-lab.net/sites/all/modules/contrib/smileys/packs/crystal/smile.gif" title="Smiling" alt="Smiling" class="smiley-content"/>
</p>
<p>
  Sinon, l'autre projet extrêmement prometteur est <kbd>NavIt</kbD> qui vise à fournir sous GNU/Linux un outil libre comparable aux logiciels du marché type "TomTom". Il dispose d'une vue 2D du plan de route, mais aussi d'une vue 3D exploitant OpenGL. Il calcule les itinéraires et est même capable de parler pour vous indiquer les directions. 
</p>
<p>
  Pour l'instant <kbd>NavIt</kbd> est au stade "béta" mais le concept marche déjà bien. Mais comme c'est encore expérimental, il vous faudra compiler vous-même votre version (en tout cas pour Mandriva). Cela se fait sans aucun problème mis à part pour la 3D. En effet, <kbd>NavIt</kbd> utilise <a class='external' target='_blank' href='http://quesoglc.sourceforge.net/' >QuesoGLC</a> qui chez moi refuse catégoriquement de compiler pour motif de GLU absent alors que cette librairie et les includes qui vont avec sont bien là. Ce n'est pas bien grave, tout est indépendant et l'on peut compiler en n'utilisant pas la vue 3D. 
</p>
<p>
  Une fois compilé et installé, il vous faut un fichier de configuration. Pour cela créez le dossier <kbd>~/.navit</kbD> et recopiez y le fichier le fichier <kbd>navit.xml</kbd> qui se trouve dans les sources.
</p>
<p>
  Ensuite il suffit de taper <kbd>navit</kbd> pour que ce dernier se lance sans problèmes et récupère bien la bonne position via <kbd>gpsd</kbd>. Le problème est qu'il n'a en standard qu'une carte de l'Allemagne. Pour avoir quelque chose d'exploitable en france, la solution est d'utiliser <kbd>OpenStreetMap</kbd>. Pour cela :
<ul>
<li>Allez sur le site http://www.openstreetmap.org/</li>
<li>Affichez la zone que vous voulez exporter.</li>
<li>Allez dans l'onglet <kbd>Export</kbd>.</li>
<li>Cliquez sur <kbd>Manually select a different area</kbd>.</li>
<li>Sélectionnez votre zone à exporter.</li>
<li>Cochez sur <kbd>OpenStreetMap XML Data</kbd>.</li>
<li>Clickez sur <kbd>Export</kbd>.</li>
</uL>
</p>
<p>
  Au bout d'un temps, vous devriez recevoir un fichier <kbd>map.osm</kbd>. Une fois ce fichier téléchargé, il faut le convertir au format <kbd>NavIt</kbd> :

  <div class='code-block code-block-fragment'>
  <div class='container'>
  osm2navit ~<span class="sy0">/</span>Bureau<span class="sy0">/</span>map.osm <span class="sy0">&gt;</span> ~<span class="sy0">/</span>.navit<span class="sy0">/</span>maCarte.bin
  </div>
  
  </div>
</p>
<p>
   La conversion terminée, éditez comme suit le fichier <kbd>~/.navit/navit.xml</kbD> :

  <div class='code-block code-block-fragment'>
  <div class='container'>
  &nbsp;<span class="sc3"><span class="re1">&lt;mapset</span> <span class="re0">enabled</span>=<span class="st0">&quot;yes&quot;</span><span class="re2">&gt;</span></span><br />
&nbsp;<span class="sc3"><span class="re1">&lt;map</span> <span class="re0">type</span>=<span class="st0">&quot;binfile&quot;</span> <span class="re0">enabled</span>=<span class="st0">&quot;yes&quot;</span> <span class="re0">data</span>=<span class="st0">&quot;~/.navit/maCarte.bin&quot;</span> <span class="re2">/&gt;</span></span><br />
&nbsp;...<br />
<span class="sc3"><span class="re1">&lt;/mapset<span class="re2">&gt;</span></span></span>
  </div>
  
  </div>
</p>
<p>
  Faite attention à ne pas ajouter cela dans un <kbd>mapset</kbd> qui ne soit pas <kbd>enabled</kbd>. Vous pouvez si vous le désirez supprimer les autres <kbD>map</kbd>. Ensuite il suffit de relancer <kbd>navit</kbd> et si vos coordonnées GPS sont sur la carte que vous avez importer, votre localisation devrait se faire. 
</p>
<p>
  Il existe aussi une extraction automatique de la carte de l'hexagone disponible <a class='external' target='_blank' href='http://hexagone.openstreetmap.fr/hexagone-latest.osm.bz2' >ici</a>. Attention, le fichier compressé fait plus de 50mo. 
</p>


	<a name='chapter_10'></a>
  <h2>Conclusion</h2>
	
<p>
  NavIt est clairement en phase de développement mais dispose déjà des fonctions de base qui permettent de suivre un itinéraire sans encombres sous réserve que la carte soit complète. En région parisienne, OpenStreetMap est plutôt précis, maintenant je ne saurais dire ce qu'il en est ailleurs. Mais avec Viking, si chez vous il donne les bonne coordonnées, vous allez pouvoir aider ce projet à s'affiner. Une manière simple pour qui n'est pas développeur de participer à l'édifice libre.  
</p>
<p>
  Pour ce qui est du BT-338, il marche vraiment très bien. La capture des satellites est très rapide, il est détecté sans aucun problème et à chaud par le système, bref, un achat conseillé pour GNU/Linux. 
</p>    ]]></content>
  </entry>
  <entry>
    <title>Petite étude des liaisons Fast Ethernet, WIFI et par courant porteur.</title>
    <link rel="alternate" type="text/html" href="http://artisan.karma-lab.net/node/1594" />
    <id>http://artisan.karma-lab.net/node/1594</id>
    <published>2008-07-19T15:32:18+02:00</published>
    <updated>2008-07-29T16:27:13+02:00</updated>
    <author>
      <name>Ulhume</name>
    </author>
    <category term="Matériel" />
    <category term="OK" />
    <category term="Planet Libre" />
    <category term="Article" />
    <summary type="html"><![CDATA[<p>
  Ayant changé de logis, j'en ai aussi profité pour retenter l'expérience "Free" qui avait été par le passé pour le moins désastreuse... Et pour l'instant, c'est un choix que je ne regrette pas... Autant je suis prompt à taper sur un service bancale, autant là j'en reste un peu sur mon arrière train. Ligne activée en 2 semaines, matériel reçu avant même que la ligne ne soit activé et une liste de fonctionnalité qui fait passer les autres fournisseurs pour des dinosaures. 
</p>
<p>
  Et une des surprises que je n'ai pas bien captée en déballant (je ne suis pas non plus un grand fanatique de la lecture de documentation <img src="http://artisan.karma-lab.net/sites/all/modules/contrib/smileys/packs/crystal/wink2.gif" title="Wink" alt="Wink" class="smiley-content"/>, c'est la prise Ethernet sortant... des blocs d'alimentation. Il m'a fallut un certain temps pour comprendre qu'en plus du reste, le package était CPL ready.
</p>
    ]]></summary>
    <content type="html"><![CDATA[<p>
  Ayant changé de logis, j'en ai aussi profité pour retenter l'expérience "Free" qui avait été par le passé pour le moins désastreuse... Et pour l'instant, c'est un choix que je ne regrette pas... Autant je suis prompt à taper sur un service bancale, autant là j'en reste un peu sur mon arrière train. Ligne activée en 2 semaines, matériel reçu avant même que la ligne ne soit activé et une liste de fonctionnalité qui fait passer les autres fournisseurs pour des dinosaures. 
</p>
<p>
  Et une des surprises que je n'ai pas bien captée en déballant (je ne suis pas non plus un grand fanatique de la lecture de documentation <img src="http://artisan.karma-lab.net/sites/all/modules/contrib/smileys/packs/crystal/wink2.gif" title="Wink" alt="Wink" class="smiley-content"/>, c'est la prise Ethernet sortant... des blocs d'alimentation. Il m'a fallut un certain temps pour comprendre qu'en plus du reste, le package était CPL ready.
</p>
<!--break-->

	<a name='chapter_1'></a>
  <h2>Courant porteur en ligne</h2>
	
<p>
<image file="principe_cumul_CPL_cle5112ef.jpg"/>
   techniquement le CPL consiste à superposer au signal 50hz, un second signal de faible énergie. Schématiquement si l'on observait la courbe formée par du courant à 50hz, cela donnerait une sinusoïdale parfaite. La même courbe, lorsque appose au circuit un adaptateur CPL garderait la forme générale d'une sinusoïdale mais dont le tracé serait irrégulier. Comme nous le montre le schéma que j'ai fauché à EDF (j'en profite pendant que c'est encore une entreprise d'état <img src="http://artisan.karma-lab.net/sites/all/modules/contrib/smileys/packs/crystal/wink2.gif" title="Wink" alt="Wink" class="smiley-content"/>, cette perturbation de la courbe est de la donnée modulée puis injectée dans le circuit électrique. Cette donnée est démodulée sur le récepteur et ainsi re-transformée en donnée. 
</p>
<p>
   Grâce au CPL, il est donc possible de faire circuler de l'information entre deux prises d'un même réseau électrique. C'est d'ailleurs utilisé depuis l'an pèbre, ne serait-ce que par EDF pour basculer votre compteur en mode jour/nuit.
</p>
<p>
   Maintenant il y a quelques contraintes.  Tout d'abord, cela ne marche que si les deux modules CPL sont sur le <b>même</b> circuit électrique. Typiquement évitez de les brancher sur deux phases différentes d'un circuit triphasé, il y a peu de chance que cela fonctionne <img src="http://artisan.karma-lab.net/sites/all/modules/contrib/smileys/packs/crystal/wink2.gif" title="Wink" alt="Wink" class="smiley-content"/>
</p>
<p>
  Enfin gardez en tête que cette technologie n'est pas sans risque de sécurité, surtout pour ceux qui sont dans un immeuble et qui n'ont peut-être pas envie que leur données passent le seuil de leur compteur. Alors normalement les compteurs récents filtreraient une partie du CPL.Il existe des filtres spéciaux à mettre dans le tableau électrique pour cet usage. Mais le mieux reste encore, comme pour le WIFI, d'utiliser un cryptage des données. 
</p>
<p>
  Côté normes et standards, cela a été longtemps le zouzou qui semble avoir pris fin avec la formation de l'alliance <a class='external' target='_blank' href='http://www.homeplug.org/' >HomePlug</a> et le standard <kbd>HomePlug</kbd>. Dans sa version <kbd>AV</kbd>, il offre un débit allant jusqu'à 200mb/s et un cryptage allant jusqu'à 128bits en AES. Dans sa version <kbd>Turbo</kbd> la vitesse est de 85mb/s avec une clef de 56bits.
</p>
<p>
  Pour revenir aux <kbd>freeplug</kbd>, elles sont justement compatibles <kbd>HomePlug AV</kbd>. Pour ce qui est des boîtiers noirs que l'on peut commander sur la boutique de Free, ce sont des <kbd>HomePlug Turbo</kbd>. Au passage, notez que même s'il me semblait que l'AV était rétrocompatible avec la version <kbd>Turbo</kbd>, les FreePlug et les boîtiers CPL eux, ne parleront pas ensemble. Maintenant voyons un peu ce que cela donne dans la vraie vie.  
</p>

	<a name='chapter_2'></a>
  <h2>Comparaison des modes de liaison</h2>
	
<p>
  Pour tester cela, j'utilise l'outil 
  <a target='_blank' href='http://fr.wikipedia.org/wiki/iperf'>
  iperf
  </a>. Simple à utiliser, cet outil se lance par un <kbd>iperf  -s</kbd> sur la machine à tester et se met alors en écoute de l'ensemble des adresses de la machine. Ensuite, sur une machine client, nous lançons un <kbd>iperf -c ip_machine_serveur</kbd> pour mesurer la bande passante. 
</p>
<p>
   Côté disposition du matériel, j'ai simplement utilisé la freebox comme base WIFI et CPL en branchant la sortie Ethernet du freeplug sur une des entrées du Switch. 
 </p>
 <p>
   De l'autre côté un portable (U810) avec un port WIFI et Fast Ethernet. Dans un premier cas je teste les courtes distances, avec le deuxième freeplug branché sur le même faisceau de câble électrique (dans la même pièce), le WIFI dans la même pièce aussi (sans obstacle) et un câble Ethernet court (Grade 5) : 
   <table>
   <tr><th>Type</th><th>BP montante</th><th>BP Descendante</th></tr>
   <tr><td>CPL (HomePlug AV)</td><td>60</td><td>60</td></tr>
   <tr><td>WIFI</td><td>14</td><td>14</td></tr>
   <tr><td>Fast Ethernet</td><td>96</td><td>95</td></tr>
   </table>    
</p>
<p>
   Dans le second cas, je place le portable dans une autre pièces, avec le CPL sur une prise qui passe par le tableau électrique avant de rejoindre celle de la freebox (mais sur la même phase), le WIFI qui a une chappe en béton à traverser, et un cable réseau de 15m. 
   <table>
   <tr><th>Type</th><th>BP montante</th><th>BP Descendante</th></tr>
   <tr><td>CPL (HomePlug AV)</td><td>22</td><td>25</td></tr>
   <tr><td>CPL (HomePlug Turbo)</td><td>12</td><td>15</td></tr>
   <tr><td>WIFI</td><td>13</td><td>10.4</td></tr>
   <tr><td>Fast Ethernel</td><td>95.7</td><td>93.7</td></tr>
   </table>    
</p>

	<a name='chapter_3'></a>
  <h2>Conclusion</h2>
	
<p>
   Du point de vue réseau, entre le WIFI et le courant porteur, il n'y a pas photo, c'est le dernier qui l'emporte sur le débit, la rapidité de la connexion (quasi instantanée) et la stabilité (ça ne casse jamais). A noter cependant que ce débit, comme le WIFI, est un débit partagé entre les noeuds. Il y a donc diminution de celui-ci au fur et à mesure que l'on en rajoute. A noter enfin que les boîtiers vendus par Free sont clairement moins véloces que les FreePlug. 
</p>
<p>
  Maintenant d'un point de vue électromagnétisme, le CPL n'est pas neutre. Il génère des rayonnements qui dans des fréquences allant de 1.5 à 30Mhz qui peuvent induire un parasitage du matériel HIFI. Le coup du parasitage des ondes courtes qui énerve à juste titre les <a class='external' target='_blank' href='http://plc.radioamateur.ch/' >radio amateurs</a> est de l'histoire ancienne normalement car les fréquences sont plus élevées qu'au débuts du CPL. Maintenant le problème vient principalement du fait que les câbles électrique ne sont pas conçus pour les hautes fréquences et se transforment ainsi en une grosse antenne libérant sous la formes d'ondes electro-magnétiques 9/10 de l'énergie émise par un boîtier. 
</p>
<P>
  La conséquence pratique de ce parasitage, outre de casser les pieds aux radio-amateurs ou de brouiller les signaux onde-courtes, est que cela peut induire un souffle sur le matériel audio du logis, ce qui n'est pas du plus bel effet pour une écoute en HiFi. Personnellement je n'ai pas constaté un tel parasitage mais il y a suffisamment de témoignages sur le net allant de ce sens pour ne pas prendre ce problème à la légère. Par contre, j'ai constaté sans pour autant avoir réussi à l'isoler, un problème de perte récurrente de connexion sur le réseau WIFI. Je ne peux pas assurer à 100% que le problème vient bien de là mais il semble avoir cessé lorsque j'ai dé-associer les deux boîtiers. 
</P>
<p>
  Pour ce qui est de la santé, disons simplement que le problème est celui des ondes en général. La liste du matériel rayonnant est aujourd'hui très (trop) longue : WIFI, DeCT, µonde, néons et plus particulièrement les lampes fluorocompactes, GSM, etc, etc... Maintenant, j'avoue qu'après avoir fait pas mal de recherche sur ce sujet (merci à <a class='external' target='_blank' href='/%2523comment-2612' >AP</a> d'avoir attiré mon attention là dessus), je suis beaucoup moins chaud pour utiliser ce système, car ayant déjà un peu de mal avec l'idée du WIFI, celle de vivre et dormir au centre d'une antenne ne m'enchante guère...
</p>
<p>
   En somme, le CPL est plus efficace que le WIFI, plus stable, détecté plus rapidement, et supporte mieux les longues distances (fonctionnellement parlant). Maintenant reste l'épineux problème des émissions que malgré toute mes recherches je suis incapable de mettre en balance avec le fait d'avoir un émetteur WIFI allumé ou des lampes fluorocompactes dans la pièce... Car lorsque l'on fait des recherches dans ce domaines, on découvre qu'il y a bien pire que l'electrosmog : le trollosmog multidrectionnel. Chacun y vas de son avis, de ses valeurs, de ses idées, bref au final un magnifique bruit blanc. Mais ce que je retiens du potentiel danger de cette technologie est que contrairement aux autres, les câbles électriques circulent autour de nous, nous mettant ainsi au centre des émissions. 
</p>    ]]></content>
  </entry>
  <entry>
    <title>Mise en oeuvre du système d&#039;impression CUPS</title>
    <link rel="alternate" type="text/html" href="http://artisan.karma-lab.net/node/1336" />
    <id>http://artisan.karma-lab.net/node/1336</id>
    <published>2008-02-19T13:20:30+01:00</published>
    <updated>2008-10-21T01:53:17+02:00</updated>
    <author>
      <name>Ulhume</name>
    </author>
    <category term="Matériel" />
    <category term="OK" />
    <category term="Planet Libre" />
    <category term="Tutoriel" />
    <summary type="html"><![CDATA[<p>
  
  <a target='_blank' href='http://fr.wikipedia.org/wiki/CUPS'>
  CUPS
  </a> est un système modulaire d'impression pour les systèmes UNIX. Il comprend un spooler (file d'attente), une gestion de l'impression à travers le réseau et un système de drivers très ouvert permettant à des fabriquant de fournir leur propre mouture.
</p>
<p>
  Mon cas d'école est l'installation sur une machine faisant office de serveur d'impression, d'une imprimante Epson Stylus Photo RX640, ainsi que d'une imprimante virtuelle pour les sorties en PDF. 
</p>
    ]]></summary>
    <content type="html"><![CDATA[<p>
  
  <a target='_blank' href='http://fr.wikipedia.org/wiki/CUPS'>
  CUPS
  </a> est un système modulaire d'impression pour les systèmes UNIX. Il comprend un spooler (file d'attente), une gestion de l'impression à travers le réseau et un système de drivers très ouvert permettant à des fabriquant de fournir leur propre mouture.
</p>
<p>
  Mon cas d'école est l'installation sur une machine faisant office de serveur d'impression, d'une imprimante Epson Stylus Photo RX640, ainsi que d'une imprimante virtuelle pour les sorties en PDF. 
</p>
<!--break-->


	<a name='chapter_11'></a>
  <h2>Installation de CUPS</h2>
	
<p>Pour commencer, un petit lot de paquets à installer 

  <div class='code-block code-block-fragment'>
  <div class='container'>
  urpmi cups cups-common cups-drivers ghostscript gutenprint-foomatic
  </div>
  
  </div>
</p>
<p>
  Ceci fait, un petit (re)démarrage de CUPS s'impose

  <div class='code-block code-block-fragment'>
  <div class='container'>
  service cups restart
  </div>
  
  </div>
</p>
<p>
  Maintenant un démon <kbd>cupsd</kbd> devrait être chargé.
</p>


	<a name='chapter_12'></a>
  <h2>Quel pilote choisir ?</h2>
	
<p> 
  Pour que votre imprimante soit reconnue, il faut que CUPS dispose d'un pilote (appelé filtre) qui lui soit dédié et il y a à ma connaissance cinq sources différentes de pilotes d'impression pour Linux :
    <dl>
      <dt>Les pilotes foomatic</dt><dd>Un base de pilote très vaste allant jusqu'au modèle les plus anciens. Ils sont installés par l'urpmi que nous avons fait plus haut.</dd>
      <dt>Les pilotes <a class='external' target='_blank' href='http://gimp-print.sourceforge.net/' >Gutenprint</a></dt><dd>qui sont une évolution des pilotes d'impression de GIMP. Eux aussi sont installés par l'urpmi que nous avons fait plus haut.</dd>
      <dt>Le pilote <kbd>OMNI</kbd></dt><DD>Un projet OpenSource d'IBM qui semble ne plus être maintenu et qui gère une vaste gamme d'imprimantes plus anciennes.</DD>
     <dt>les pilotes <a class='external' target='_blank' href='http://www.turboprint.de/english.html' >TurboPrint</a></dt><dd>qui sont des pilotes payants et commerciaux mais permettant notamment l'impression rapide et de qualité sur certaines canon.</dd>
      <dt>Les pilotes du fabriquant</dt><dd>lorsqu'il existent...</dd>
    </dl>
</p>

<p>
  exception fait des pilots commerciaux<kbd>turbolinux</kbd> (qui restent la solution de dernier recours), la meilleur solution pour savoir quel pilote est le plus apte à contrôler votre imprimante est d'interroger la base <a class='external' target='_blank' href='http://www.openprinting.org/printer_list.cgi' >OpenPrinting</a>.
</p>
<p>Si le pilote conseillé est un Gutenprint ou foomatic, il y a de forte chance que vous l'ayez déjà installé, passez donc à l'étape <q>configuration</q>. Dans mon cas, le pilote conseillé est celui d'Epson qu'il va donc me falloir installer.  
</p>


	<a name='chapter_13'></a>
  <h2>Installation du driver Epson</h2>
	
<p>
  Epson fait parti des rares fabriquant qui non seulement produisent des drivers Linux, mais en plus les fournissent sous licence GPL. Avec les sources donc. Donc que ce soit imprimantes ou scanners, mon choix se portent donc maintenant systématiquement sur Epson. Ces pilotes sont disponibles sur le site de la société <a class='external' target='_blank' href='http://www.avasys.jp/english' >Avasys</a>.
</p> 
<p>
  Pour installer le driver d'Avasys, quelques étapes sont nécessaires. Une fois le driver téléchargé, il faut allumer l'imprimante, vérifier les connections, et installer le paquet.
  
  <div class='code-block code-block-fragment'>
  <div class='container'>
  urpmi pipslite-cups<span class="nu0">-1.0</span><span class="nu0">.2</span><span class="nu0">-2</span>.i386.rpm
  </div>
  
  </div>
</p>

<p>
  Ensuite il faut générer le driver CUPS, le fichier PPD :
  
  <div class='code-block code-block-fragment'>
  <div class='container'>
  <span class="sy0">/</span>usr<span class="sy0">/</span>share<span class="sy0">/</span>pipslite<span class="sy0">/</span>setup
  </div>
  
  </div>
</p>

<p>
  Ceci fait, il faut l'installer par la commande suivante :
  
  <div class='code-block code-block-fragment'>
  <div class='container'>
  <span class="sy0">/</span>usr<span class="sy0">/</span>bin<span class="sy0">/</span>pipslite-install
  </div>
  
  </div>
</p>

<p>
  Voilà, le plus dur est fait, le driver est en place, vous pouvez passer à l'étape suivante. 
</p>


	<a name='chapter_14'></a>
  <h2>Configuration de l'imprimante dans CUPS</h2>
	
<p>
  A ce stade, le pilote, quel que soit votre choix, est installé. Le paramétrage de CUPS est lui très simple et vous n'aurez besoin que d'un navigateur Web positionné à l'addresse <kbd>https://localhost:631</kbd> si l'installation est locale, ou <kbd>https://machine_cups:631</kbd> pour une machine distante.  
</p>

<p>
  Si l'interface met du temps à s'afficher, aller vite à la section <kbd>Dépannage</kbd>.Sinon, une fois dans l'interface visible, nous sommes pret à installer l'imprimante. Pour cela, cliquez sur l'onglet <kbd>administration</kbd>. Là devrait apparaître la liste des imprimantes reconnues par Cups, sélectionnez la votre. Ensuite vous est demandé le driver à utiliser. Là, tout dépend de ce que vous avez installé comme pilote et des conseils donnés par OpenPrinting.org. CUPS étant un système sécurisé, vous serez amené à un moment ou à un autre à saisir le mot de passe root. Lorsque vous avez choisi, validez, l'imprimante est installée.
</p>
<p>
  Si vous cliquez sur l'onglet <kbd>Imprimantes</kbd>, vous devriez voir une ligne lui correspondant. Pour tester, il suffit de cliquer sur <kbd>Imprimer la page de test CUPS</kbd>. Et là si tout va bien, la page de test devrait sortir...
</p>


	<a name='chapter_15'></a>
  <h2>Ajout d'une imprimante PDF</h2>
	
<p>
  Une telle imprimante va générer un fichier PDF dans un dossier donné, par exemple en <kbd>/tmp/pdf</kbd>. Il faut donc d'abord créer ce dossier et lui donner les bons droits :
  
  <div class='code-block code-block-fragment'>
  <div class='container'>
  <a target="blank" href="http://pwet.fr/man/linux/commandes/mkdir"><span class="kw2">mkdir</span></a> <span class="sy0">/</span>tmp<span class="sy0">/</span>pdf<br />
<a target="blank" href="http://pwet.fr/man/linux/commandes/chown"><span class="kw2">chown</span></a> :<a target="blank" href="http://pwet.fr/man/linux/commandes/lp"><span class="kw2">lp</span></a> <span class="sy0">/</span>tmp<span class="sy0">/</span>pdf<br />
<a target="blank" href="http://pwet.fr/man/linux/commandes/chmod"><span class="kw2">chmod</span></a> g+rwX <span class="sy0">/</span>tmp<span class="sy0">/</span>pdf
  </div>
  
  </div> 
</p>
<p>
  Ensuite, il suffit dans l'interface de CUPS d'aller sur l'onglet <kbd>Administration</kbd> puis de cliquer sur <kbd>Ajouter une imprimante</kbd>. Donnez-lui comme nom <kbd>PDF</kbd> puis passez à la suite.
</p>
<p>
	Dans la liste, sélectionnez <kbd>PDF Writing</kbd>, puis passez à la suite. CUPS vous demande alors l'URI de l'imprimante et toute l'astuce est là, nous allons donner notre chemin : <kbd>pdf:/tmp/pdf</kbd>.
</p>
<p>
	Choisissez ensuite la marque : <kbd>Generic</kbd>, puis le modèle : <kbd>Generic PostScript Printer Foomatic/Postscript</kbd>. 
</p>
<p>
  Il ne reste plus qu'à valider, et comme précédemment aller dans l'onglet <kbd>imprimante</kbd> pour lancer une page de test et vérifier que le fichier est bien là. 
</p>


	<a name='chapter_16'></a>
  <h2>Dépannage</h2>
	
<h3>Monter le niveau de verbosité de CUPS</h3>
<p>
  Si rien ne marche comme prévu, passez CUPS en mode debug en passant de <kbd>info</kbd> à <kbd>debug</kbd> l'entrée <kbd>levelinfo</kbd> dans <kbd>/etc/cups/cupsd.conf</kbd>. Ensuite relancez cups et faite <kbd>tail</kbd> sur les logs. 
</p>
<p>
  Prenez soin de remettre <kbd>info</kbd> lorsque le système fonctionne pour ne pas vous retrouver avec des logs énormes. 
</p>

<h3>Temps d'attente très long pour l'affichage de la page d'administration</h3>
<p>
Attention ceci qui suit est une astuce classifiée <q>galactique</q>.
</p>
<p>
	Si le temps de connexion à la page d'administration vous parait trop long, genre infini, allez sur la machine d'impression, montez la verbosité et fait une <kbd>tail -f /var/log/cups/error_log</kbd>. Regardez alors si vous voyez apparaître la ligne <kbd>Generating SSL server key...</kbd>. Si tel est le cas, j'ai peut-être la solution...  
</p>
<p>
	En gros, le système essaye de générer une clef pour assurer le cryptage entre votre navigateur web et le serveur d'impression. Hors, pour une raison qui m'est totalement obscure, le système n'a pas assez d'entropie pour pouvoir générer suffisamment de nombres aléatoires (l'entropie d'un système linux est vérifiable par la commande <kbd>sysctl  kernel.random.entropy_avail</kbd>).
</p>
<p>
	Pour augmenter l'entropie, deux solutions. La première est de générer suffisamment de "bruit" sur la machine par exemple en faisant un <kbd>find /</kbd>. La seconde, est d'installer le paquet <kbd>urpmi rng-utils</kbd> et de taper, sur le serveur d'impression, la commande <kbd>rngd -r /dev/urandom -o /dev/random</kbd>. Et là, pouf, la connexion se débloque et le navigateur affiche la page d'administration.
</p>
<p>
	Merci milles fois à <a class='external' target='_blank' href='/%20http%3A/%252Fwww.burtonini.com/blog/computers/cups-2006-08-14-18-00' >Ross</a> sans qui j'aurais sûrement passé ma soirée à tenter de comprendre...
</p>

<h3>Type de fichier non reconnu "mime/postscript</h3>
<p>
  Si vous obtenez l'erreur <kbd>Type de fichier non reconnu "mime/postscript</kbd>, c'est qu'il vous manque ghostscript sur votre machine. Faites un <kbd>urpmi ghostscript</kbd> et retentez l'impression de la page de test.
</p>
<p>
  Autre possibilité, le fichier <kbd>/etc/cups/pstoraster.convs</kbd> n'est pas créé correctement. En ce cas, créez le et y mettre le contenu suivante :

  <div class='code-block code-block-fragment'>
  <div class='container'>
  application/vnd.cups-postscript application/vnd.cups-raster 100 pstoraster
  </div>
  
  </div>
</p>

<h3>gs introuvable</h3>
<p>
   Certains pilotes ne sont pas au courrant que GhostScript ne s'apelle plus <kbd>gs</kbd> mais... <kbd>ghostscript</kbd>. La solution est donc de créer un lien symbolique :

  <div class='code-block code-block-fragment'>
  <div class='container'>
  <a target="blank" href="http://pwet.fr/man/linux/commandes/ln"><span class="kw2">ln</span></a> -s <span class="sy0">/</span>usr<span class="sy0">/</span>bin<span class="sy0">/</span>ghostscript <span class="sy0">/</span>usr<span class="sy0">/</span>bin<span class="sy0">/</span><a target="blank" href="http://pwet.fr/man/linux/commandes/gs"><span class="kw2">gs</span></a>
  </div>
  
  </div>
</p>

<h3>Manque d'autorisations</h3>
<p>
  Pour que CUPS puisse fonctionner il faut que le périphériques (ex. /dev/lp0) soit donné au groupe <kbd>lp</kbd> avec les droits de lecture ET écriture. Pour changer cela il faut identifier le device de votre imprimante :
  
  <div class='code-block code-block-fragment'>
  <div class='container'>
  <a target="blank" href="http://pwet.fr/man/linux/commandes/chown"><span class="kw2">chown</span></a> :<a target="blank" href="http://pwet.fr/man/linux/commandes/lp"><span class="kw2">lp</span></a> <span class="sy0">/</span>dev<span class="sy0">/</span>lp0<br />
<a target="blank" href="http://pwet.fr/man/linux/commandes/chmod"><span class="kw2">chmod</span></a> g+rw <span class="sy0">/</span>dev<span class="sy0">/</span>lp0
  </div>
  
  </div>
</p>
<p>
  La même opération est à effectuer sur un dossier devant recevoir des fichiers PDF générés par CUPS. 
</p>



	<a name='chapter_17'></a>
  <h2>Paramétrage des postes Gnome ou KDE</h2>
	
<p>
  A ce stade l'imprimante est fonctionnelle sur le serveur, reste à paramétrer le poste client. Il faut évidement y installer <kbd>cups</kbd> par un <kbd>urpmi cups-common</kbd>. Attention, il n'est nullement besoin d'installer plus que cela. En effet, si vous installiez cups en complet, vous seriez vous même un serveur et cela n'a aucun intérêt. Vous seriez obligé d'installer à nouveau les pilotes pour chaque imprimante utilisée. 
</p>
<p>
	La bonne solution est donc de n'installer que le strict minimum, à savoir <kbd>cups-common</kbd> et de configurer votre machine en client du serveur d'impression. Cela se fait très simplement en modifiant (ou en créant) le fichier <kbd>/etc/cups/client.conf</kbd>. Si le nom de la machine à laquelle est connecté l'imprimante est <kbd>serveur_impression</kbd>, vous devez mettre dans ce fichier :

  <div class='code-block code-block-fragment'>
  <div class='container'>
  ServerName serveur_impression
  </div>
  
  </div>
</p>
<p>
  C'est à ce stade que l'on comprend l'intérêt réel de cups. Vous n'avez en effet nul besoin de drivers sur les postes clients comme c'est le cas sous Windows. La raison en est que tout est transformé en postscript. Lorsque votre poste client demande l'impression d'un texte, le driver de kde par exemple, va transformer le document en postscript et l'envoyer au serveur d'impression qui va, via le driver que nous avons installé, transformer ce postscript en un langage compréhensible par l'imprimante. 
</p>
<p>
  Pour s'en convaincre, il suffit d'installer sous Gnome le paquet <kbd>gnome-cups-manager</kbd> et de le lancer. Nos deux imprimantes devraient directement apparaître sans avoir touché à rien. Un click-droit sur une imprimante pour en afficher les propriétés, et lancer une page d'impression. 
</p>
<p>
	Sous KDE c'est dans <kbd>panneau de configuration/périphériques/imprimantes</kbd> que cela se passe. Dans la liste <kbd>Système d'impression utilisé</kbd>, sélectionnez <kbd>CUPS (Common Unix Print System)</kbd>. Cliquez sur <kbd>Appliquer</kbd> et vois imprimantes devraient apparaître. Faites un click droit dessus et choisissez <kbd>Tester l'imprimante..</kbd>, puis <kbd>Imprimer la page de test</kbd>. 
</p>


	<a name='chapter_18'></a>
  <h2>Paramétrage d'un poste Windows</h2>
	
<p>
  Là, comme d'hab, ça se corse. Il y a deux méthodes d'impression sur une imprimante réseau CUPS via windows. La première, classique, consiste à utiliser <kbd>samba</kbd> pour publier l'imprimante cups sur le réseau microsoft. Ensuite, de windows, il suffit de se connecter sur l'imprimante réseau, de fournir le driver propriétaire et le tour est joué. Dans ce cas de figure CUPS n'est utilisé que comme un spooler d'impression, un tuyau qui ne traite pas les données. Windows connaît l'imprimante, formate le document en conséquence et l'envoi directement sur celle-ci. 
</p>
<p>
  La deuxième option consiste à envoyer un fichier postscript à CUPS et d'utiliser ainsi son driver. Il suffit donc d'installer sous windows un pilote d'impression capable de générer du postscript. Or par chance, <a class='external' target='_blank' href='http://www.adobe.com/support/downloads/product.jsp?product=44&amp;platform=Windows' >Adobe fourni un tel driver</a>. Il suffira donc de l'installer et de saisir en tant qu'URL de l'imprimante réseau l'adresse du serveur cups, à savoir par exemple <kbd>http://serveur_impression:631/printers/Stylus_Photo_RX640</kbd>. Ensuite, dites oui. L'installation propose alors d'utilise un driver généric, c'est jouable mais le mieux reste d'aller sur la machine linux, dans le dossier <kbd>/usr/share/cups/models/gutenprint/5.1/fr</kbd> pour récupérer le fichier <kbd>stp-escp2-rx640.5.1.ppd.gz</kbd>, de le décompresser et de fournir ce fichier à l'installeur. Vous pouvez fournir un autre fichier PPD en fonction du type de driver que vous avez utilisé. 
</p>


	<a name='chapter_19'></a>
  <h2>Conclusion</h2>
	
<p>
  CUPS est capricieux, pointilleux surtout, mais extrêmement puissant. Il permet de transformer n'importe quelle machine en serveur d'impression fiable et efficace, même sous une forte demande avec de nombreuses imprimantes connectées. Et finalement, une fois de plus, la mauvaise réputation de l'impression sous Linux tient plus à une déficience des fabricants en terme de pilote que dans la machinerie interne. 
</p>

    ]]></content>
  </entry>
  <entry>
    <title>Faire causer Linux avec son téléphone BlueTooth</title>
    <link rel="alternate" type="text/html" href="http://artisan.karma-lab.net/node/1135" />
    <id>http://artisan.karma-lab.net/node/1135</id>
    <published>2007-11-29T11:12:01+01:00</published>
    <updated>2008-08-12T21:51:15+02:00</updated>
    <author>
      <name>Ulhume</name>
    </author>
    <category term="Matériel" />
    <category term="OK" />
    <category term="Planet Libre" />
    <category term="Tutoriel" />
    <summary type="html"><![CDATA[<p>
  Voilà, réception d'un nouveau téléphone qui cette fois, je l'espère, durera plus que l'ancien. Et comme le dit téléphone est vide de tout, je branche ma "vieille" clef USB-
  <a target='_blank' href='http://fr.wikipedia.org/wiki/bluetooth'>
  bluetooth
  </a> qui m'avait tant réussie sous Mandriva 2007.0 pour envoyer dans le petit zin-zin sonneries et autre carnet d'adresses. Et là, l'outil KDE (kbluetooth) qui avait si bien fonctionné à l'époque ne reconnaît plus rien. 
</p>
<p>
  Alors ok, l'outil kde_tout_beau ne marche pas. Mais l'avantage de linux reste que si lorsque graphique part en vrille, la ligne de commande, elle, on ne le dira jamais assez, restera éternellement votre amie. Je m'en vais donc vous conter la méthode "Conan", pour importer entre autre un carnet d'adresse, via bluetooth. 
</p>
    ]]></summary>
    <content type="html"><![CDATA[<p>
  Voilà, réception d'un nouveau téléphone qui cette fois, je l'espère, durera plus que l'ancien. Et comme le dit téléphone est vide de tout, je branche ma "vieille" clef USB-
  <a target='_blank' href='http://fr.wikipedia.org/wiki/bluetooth'>
  bluetooth
  </a> qui m'avait tant réussie sous Mandriva 2007.0 pour envoyer dans le petit zin-zin sonneries et autre carnet d'adresses. Et là, l'outil KDE (kbluetooth) qui avait si bien fonctionné à l'époque ne reconnaît plus rien. 
</p>
<p>
  Alors ok, l'outil kde_tout_beau ne marche pas. Mais l'avantage de linux reste que si lorsque graphique part en vrille, la ligne de commande, elle, on ne le dira jamais assez, restera éternellement votre amie. Je m'en vais donc vous conter la méthode "Conan", pour importer entre autre un carnet d'adresse, via bluetooth. 
</p>
<!--break-->

	<a name='chapter_20'></a>
  <h2>Découverte des services</h2>
	
<p>
  Si tout est correctement installé (paquets bluez et bluez-utils), le chargement de la pile Bluetooth se fait par un la commande suivante :
  
  <div class='code-block code-block-fragment'>
  <div class='container'>
  <span class="co0">##service bluetooth start</span>
  </div>
  
  </div>
</p>
<p>
  Si tout c'est bien passé, un <kbb>ps -edaf</kbd> vous indique que deux nouveaux démons sont présents : <kbd>hcid</kbd> pour Host Controller Interface Daemon, et </kbd>sdpd</kbd> pour Service Discovery Protocol Daemon. Le premier est donc chargé de la clef elle-même et l'autre de gérer les services que peut offrir un périphérique bluetooth connecté à la clef. 
</p>
<p>
  Alors vérifions déjà si la clef est reconnue dans le système :
  
  <div class='code-block code-block-traces'>
  <div class='container'>
  <div class='command'><span class='prompt'>root#</span>hciconfig</div><div class='result'>hci0:   Type: USB</div><div class='result'>...</div><div class='command'><span class='prompt'>root#</span><span class='cursor'>&nbsp;</span></div>
  </div>
  
  </div>
</p>
<p>
  Ok, notre adaptateur est donc visible (hci0). Maintenant regardons les périphériques visibles par notre clef :
  
  <div class='code-block code-block-traces'>
  <div class='container'>
  <div class='command'><span class='prompt'>root#</span>hcitool scan</div><div class='result'>Scanning ...</div><div class='result'>00:1D:25:FB:A2:75       SGH-D840</div><div class='command'><span class='prompt'>root#</span><span class='cursor'>&nbsp;</span></div>
  </div>
  
  </div>
</p>

<p>
  Parfait, mobile en vue, son adresse bluetooth est donc <kbd>00:1D:25:FB:A2:75</kbd>. Voyons maintenant ce que ce téléphone sait faire. La commande suivante sans le <kbd>grep</kbd> donnerait plus d'information, mais là nous cherchons à obtenir la liste des services disponibles, et surtout le canal bluetooth associé à chaque service. En effet en blutooth c'est comme en TCP/IP, à l'adresse IP correspond notre adresse bluetooth, les services du périphériques peuvent être vu comme des serveurs et enfin les ports qu'écouteraient ces serveurs sont appelés des canaux (Channels). 
  
  <div class='code-block code-block-traces'>
  <div class='container'>
  <div class='command'><span class='prompt'>root#</span>sdptool records 00:1D:25:FB:A2:75 | grep -P 'Service Name|Channel'</div><div class='result'>Service Name: Dial-up networking</div><div class='result'>Channel: 1</div><div class='result'>Service Name: Voice GW</div><div class='result'>Channel: 2</div><div class='result'>Service Name: Bluetooth Serial Port</div><div class='result'>Channel: 5</div><div class='result'>Service Name: Voice Gateway</div><div class='result'>Channel: 6</div><div class='result'>Service Name: OBEX FileTransfer</div><div class='result'>Channel: 9</div><div class='result'>Service Name: OPP</div><div class='result'>Channel: 3</div><div class='command'><span class='prompt'>root#</span><span class='cursor'>&nbsp;</span></div>
  </div>
  
  </div>
</p>
<p>
  Dans cette liste, pour l'instant, deux services nous intéressent particulièrement : <kbd>OOP</kbd> et <kbd>OBEX File Transfert</kbd> qui sont respectivement sur les canaux <kbd>9</kbd> et <kbd>3</kbd>. 
</p>
<div class='inline-box note'>
   La différence entre les deux commandes <kbd>hcitool</kbd> et <kbd>sdptool</kbd> est la même que celle entre les démons <kbd>hcid</kbd> et <kbd>sdpd</kbd> dont nous parlions plus haut. Alors qu'hcitool renseigne sur la capacités de la clef et des périphériques visibles, sdptool permet d'obtenir des informations sur les services disponibles sur un périphérique.
</div>



	<a name='chapter_21'></a>
  <h2>OBEX FTP</h2>
	
<p>
  Le <kbd>OBEX FileTransfert</kbd>, disponible ici sur le canal 9, est un protocole permettant l'échange de fichier. A ce titre il est à rapprocher d'un serveur FTP. Il est grâce à lui possible de lire les dossiers présent sur le périphérique, de se déplacer dans l'arborescence, et enfin d'envoyer et recevoir des fichiers. 
</p>
<p>
  Et comme <kbd>OBEX FT</kbd> est une sorte de serveur FTP, il y existe pour lui un client <kbd>OBEX FT</kbd>. Il faut pour cela installer le paquet <kbd>obexftp</kbd>. Ceci fait, pour avoir la liste des dossiers à la racine du téléphone il suffit d'invoquer la commande <kbd>obexftp -b 00:1D:25:FB:A2:75 -l</kbd>
</p>
<p>
  De la même manière, nous pouvons envoyer ou recevoir un fichier :
  
  <div class='code-block code-block-traces'>
  <div class='container'>
  <div class='co0'># Envoyer un fichier</div><div class='command'><span class='prompt'>root#</span>obexftp -b 00:1D:25:FB:A2:75 -p ~/Desktop/photo_de_ma_cherie.jpeg</div><div class='result'>&nbsp;</div><div class='co0'># Récupérer un fichier</div><div class='command'><span class='prompt'>root#</span>obexftp -b 00:1D:25:FB:A2:75 -g Music/nausica.mp3</div><div class='command'><span class='prompt'>root#</span><span class='cursor'>&nbsp;</span></div>
  </div>
  
  </div>
</p>
<p>
  Voilà qui va déjà nous permettre d'échanger photos, sonneries, images, etc, avec le mobile. La moitié du boulot est donc réalisée. Mais il nous reste encore à trouver le moyen d'exporter un carnet d'adresse. 
</p>



	<a name='chapter_22'></a>
  <h2>Object Push Protocol</h2>
	
<p>
  <kbd>OPP</kbd> ou <kbd>Object Push Protocol</kbd>, permet d'envoyer un fichier au mobile comme le permettrait <kbd>obexftp</kbd>. Mais contrairement à ce dernier, OOP est conçu pour que le fichier reçu soit interprété par le téléphone et non pas être simple stocké dans sa mémoire. Par exemple, et c'est ce qui va nous servir plus loin, pour la majorité des téléphones, si le fichier poussé est une 
  <a target='_blank' href='http://fr.wikipedia.org/wiki/vCard'>
  vCard
  </a>, il sera directement stocké dans le carnet d'adresses.
</p>
<p>
  Donc comme nous avions un client <kbd>OBEX TP</kbd>,  il nous faut un client <kbd>OOP</kbd> pour pousser nos fichiers.  Malheureusement il n'y en a pas d'inclus dans la Mandriva en standard (du moins je n'en ai pas trouvé). La solution est donc de télécharger <a class='external' target='_blank' href='http://www.xmailserver.org/ussp-push.html' >ussp-push</a> et de le compiler nous-mêmes.
</p>
<p>
  Rien de bien sorcier là dedans, juste décompresser l'archive, aller dans le dossier 
  <a target='_blank' href='http://fr.wikipedia.org/wiki/./ussp-push/'>
  ./ussp-push/
  </a>, vérifier que les paquets de développement de bluez sont installés (libbluez-devel) et lancer un classique <kbd>make</kbd>. Au bout de quelques secondes, un exécutable <kbd>ussp-push</kbd> est fabriqué, vous pouvez le déplacer en <kbd>/usr/bin</kbd>
</p>
<p>
  
  <a target='_blank' href='http://fr.wikipedia.org/wiki/ussp-push'>
  ussp-push
  </a> fonctionne, comme 
  <a target='_blank' href='http://fr.wikipedia.org/wiki/obexftp'>
  obexftp
  </a>, avec l'adresse bluetooth du téléphone. Par exemple pour envoyer un jpeg dans le téléphone. Et comme nous l'avons vu plus haut, le canal <kbd>OPP</kbd> est, pour ce téléphone, le <kbd>3</kbd>. Cela nous donnes pour envoyer une photo dans le téléphone :
  
  <div class='code-block code-block-traces'>
  <div class='container'>
  <div class='command'><span class='prompt'>root#</span>./ussp-push 00:1D:25:FB:A2:75@3 ~/Desktop/photo.jpeg photo.jpeg</div><div class='command'><span class='prompt'>root#</span><span class='cursor'>&nbsp;</span></div>
  </div>
  
  </div>
</p>
<p>
   Nous retrouvons donc l'adresse bluetooth, le <kbd>3</kbd> correspondant au canal utilisé par OOP, le fichier à envoyer et le nom du fichier à inscrire dans le téléphone. 
</p>
<p>
  Voilà, nous avons maintenant l'outil nous permettant d'envoyer notre carnet d'adresses dans notre téléphone, et ceci grâce à OOP et aux vCards. 
</p>



	<a name='chapter_23'></a>
  <h2>Méthode sauvage d'export de carnet d'adresse</h2>
	
<p>
  Un fichier vCard (extension .vcf) contient une ou plusieurs cartes de visite. C'est même le format qu'utilise <kbd>kaddressbook</kbd> pour son stockage. Il s'agit d'un simple fichier texte contenant des suites d'enregistrements composés de champs (nom, adresse, numéros, etc.). Or par chance, nombre de téléphones utilisent justement ce même format pour échanger des cartes de visites via <kbd>OOP</kbd>. 
</p>
<p>
  L'histoire pourrait donc s'arrêter là en faisant un <kbd>ussp-push</kbd> du fichier de stockage de <kbd>kaddressbook</kbd> mais malheureusement, mon téléphone ne sait pas analyser un fichier vCard comprenant plus d'une entrée. Il va donc falloir introduire une étape supplémentaire et demander à <kbd>kaddressbook</kbd> un export au format vCard 2.1, avec tous les champs, mais en créant un fichier par enregistrement. Ce qui ne lui pose pas plus de problèmes que cela (fonction <kbd>Fichier/Exporter...</kbd>). 
</p>
<p>
  Une fois sa tache terminée, vous devez avoir un dossier remplis de fichiers <kbd>vcf</kbd>. A ce stade, il est sage d'aller configurer son téléphone pour autoriser le PC à communiquer sans confirmation, de sorte à ne pas avoir à valider chaque arrivée dans le carnet d'adresse. 
</p>
<p>
  Il ne nous reste plus maintenant qu'à écrire le petit script qui va pousser chaque fichier vcf dans le téléphone :
  
  <div class='code-block code-block-fragment'>
  <div class='container'>
  <span class="co1">#! /usr/bin/perl</span><br />
<br />
<span class="kw1">my</span> <span class="br0">&#40;</span><span class="re0">$directory</span><span class="sy0">,</span><span class="re0">$address</span><span class="br0">&#41;</span><span class="sy0">=</span><span class="re0">@ARGV</span><span class="sy0">;</span><br />
<br />
<a target="blank" href="http://perldoc.perl.org/functions/print.html"><span class="kw3">print</span></a> <span class="st0">&quot;Les fichiers vCard sont dans :$directory<span class="es0">\n</span>&quot;</span><span class="sy0">;</span><br />
<br />
<a target="blank" href="http://perldoc.perl.org/functions/opendir.html"><span class="kw3">opendir</span></a><span class="br0">&#40;</span>DIRHANDLE<span class="sy0">,</span> <span class="st0">&quot;$directory&quot;</span><span class="br0">&#41;</span> <span class="sy0">||</span> <a target="blank" href="http://perldoc.perl.org/functions/die.html"><span class="kw3">die</span></a> <span class="st0">&quot;Impossible d'ouvrir le dossier $directory : $!&quot;</span><span class="sy0">;</span><br />
<span class="kw1">foreach</span> <span class="re0">$name</span> <span class="br0">&#40;</span><a target="blank" href="http://perldoc.perl.org/functions/sort.html"><span class="kw3">sort</span></a> <a target="blank" href="http://perldoc.perl.org/functions/readdir.html"><span class="kw3">readdir</span></a><span class="br0">&#40;</span>DIRHANDLE<span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <a target="blank" href="http://perldoc.perl.org/functions/open.html"><span class="kw3">open</span></a><span class="br0">&#40;</span>DAT<span class="sy0">,</span> <span class="st0">&quot;$directory/$name&quot;</span><span class="br0">&#41;</span> <span class="sy0">||</span> <a target="blank" href="http://perldoc.perl.org/functions/die.html"><span class="kw3">die</span></a><span class="br0">&#40;</span><span class="st0">&quot;Impossible d'ouvrir le vCard : $!&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">while</span> <span class="br0">&#40;</span><span class="re4">&lt;DAT&gt;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">my</span> <span class="re0">$line</span><span class="sy0">=</span><span class="co5">$_</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><span class="re0">$line</span> <span class="sy0">=~</span> <span class="co2">/^FN:.*$/</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <a target="blank" href="http://perldoc.perl.org/functions/print.html"><span class="kw3">print</span></a> <span class="st0">&quot;--== Envoi de $_&quot;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <a target="blank" href="http://perldoc.perl.org/functions/system.html"><span class="kw3">system</span></a><span class="br0">&#40;</span><span class="st0">&quot;ussp-push $address &quot;</span><span class="re0">$directory</span><span class="sy0">/</span><span class="re0">$name</span><span class="st0">&quot; &quot;</span><span class="re0">$name</span><span class="st0">&quot;&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <a target="blank" href="http://perldoc.perl.org/functions/select.html"><span class="kw3">select</span></a><span class="br0">&#40;</span><a target="blank" href="http://perldoc.perl.org/functions/undef.html"><span class="kw3">undef</span></a><span class="sy0">,</span> <a target="blank" href="http://perldoc.perl.org/functions/undef.html"><span class="kw3">undef</span></a><span class="sy0">,</span> <a target="blank" href="http://perldoc.perl.org/functions/undef.html"><span class="kw3">undef</span></a><span class="sy0">,</span> <span class="nu0">0.50</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
<br />
<span class="br0">&#125;</span><br />
<a target="blank" href="http://perldoc.perl.org/functions/closedir.html"><span class="kw3">closedir</span></a><span class="br0">&#40;</span>DIRHANDLE<span class="br0">&#41;</span><span class="sy0">;</span>
  </div>
  
  </div>
</p>
<p>
  Ce script perl est simple d'utilisation, vous le lancez par la commande suivante :
  
  <div class='code-block code-block-traces'>
  <div class='container'>
  <div class='command'><span class='prompt'>root#</span>chmod +x export_address_book.pl</div><div class='command'><span class='prompt'>root#</span>./export_address_book.pl ~/Desktop/phonebook 00:1D:25:FB:A2:75@3</div><div class='command'><span class='prompt'>root#</span><span class='cursor'>&nbsp;</span></div>
  </div>
  
  </div>
</p>
<p>
  Le premier paramètre est le dossier où se trouvent les vCards exportées, le second la combinaison de l'adresse de votre téléphone et du canal utilisé pour OOP. Le script opère un filtrage pour n'envoyer au téléphone que les vCard qui contiennent un nom (FN:). Enfin le <kbd>0.50</kbd> permet de régler un temps de pose pour que le téléphone ne sature pas (ici .5 correspond à 500ms). Vous pouvez l'augmenter si votre téléphone n'est pas assez véloce. 
</p>



	<a name='chapter_24'></a>
  <h2>Conclusion</h2>
	
<p>
  On ne peut pas dire que cela aura été simple mais comme toujours avec Linux, les épreuves nous en apprennent beaucoup sur le système et son architecture. C'est rarement du temps perdu. Et au moins, nous ne sommes plus dépendant d'outil plus complexes mais plus fragiles. 
</p>    ]]></content>
  </entry>
  <entry>
    <title>Bloc-note &#039;Bluetooth&#039;</title>
    <link rel="alternate" type="text/html" href="http://artisan.karma-lab.net/node/1276" />
    <id>http://artisan.karma-lab.net/node/1276</id>
    <published>2007-11-29T10:14:13+01:00</published>
    <updated>2008-02-01T09:54:05+01:00</updated>
    <author>
      <name>Ulhume</name>
    </author>
    <category term="Matériel" />
    <category term="Aucun" />
    <category term="Note" />
    <category term="OK" />
    <summary type="html"><![CDATA[<p>Divers petites choses liées à la prise en charge de l'USB sous Linux</p>
    ]]></summary>
    <content type="html"><![CDATA[<p>Divers petites choses liées à la prise en charge de l'USB sous Linux</p>
<!--break-->

	<a name='chapter_1'></a>
  <h2>Pas de demande de PIN</h2>
	
<p>

  <div class='code-block code-block-fragment'>
  <div class='container'>
  hcid -n -f <span class="sy0">/</span>etc<span class="sy0">/</span>bluetooth<span class="sy0">/</span>hcid.conf
  </div>
  
  </div>
</p>
<p>
Ensuite je lance dans une autre console, en tant qu'utilisateur non-root, je relance ma commande OBEX FTP. Et cette fois, une erreur apparaît (d'où l'interêt de lancer hcid à la main <img src="http://artisan.karma-lab.net/sites/all/modules/contrib/smileys/packs/crystal/wink2.gif" title="Wink" alt="Wink" class="smiley-content"/> :

  <div class='code-block code-block-fragment'>
  <div class='container'>
  call_passkey_agent<span class="br0">&#40;</span><span class="br0">&#41;</span>: no agent registered
  </div>
  
  </div>
</p>
<p>Ok do, au hasard, je recherche une commande qui commence par passkey et bing, je trouve <kbd>passkey-agent</kbd>. Là je fabrique un petit script à 3 sesterces dans /usr/bin/pin.sh, dans lequel je place :

  <div class='code-block code-block-fragment'>
  <div class='container'>
  <span class="co0">#!/bin/sh</span><br />
<span class="kw3">echo</span> -n <span class="st0">&quot;PIN:1234&quot;</span>
  </div>
  
  </div>
</p>
<p>Et après avoir rendu cela exécutable (chmod +x /usr/bin/pin.sh), en tant qu'utilisateur standard, je lance la commande :

  <div class='code-block code-block-fragment'>
  <div class='container'>
  passkey-agent --default <span class="sy0">/</span>usr<span class="sy0">/</span>bin<span class="sy0">/</span>pin.<a target="blank" href="http://pwet.fr/man/linux/commandes/sh"><span class="kw2">sh</span></a>
  </div>
  
  </div>
</p>
<p>
Je relance pour la troisième fois (en réalité pour les 352ième fois <img src="http://artisan.karma-lab.net/sites/all/modules/contrib/smileys/packs/crystal/wink2.gif" title="Wink" alt="Wink" class="smiley-content"/> la commande OBEX  ftp, le téléphone me demande un code, je saisi 1234 et bing, ça marche !!
</p>    ]]></content>
  </entry>
  <entry>
    <title>Sortie du driver nVidia 100.14.19</title>
    <link rel="alternate" type="text/html" href="http://artisan.karma-lab.net/node/1219" />
    <id>http://artisan.karma-lab.net/node/1219</id>
    <published>2007-09-19T11:06:55+02:00</published>
    <updated>2008-05-25T17:07:39+02:00</updated>
    <author>
      <name>Ulhume</name>
    </author>
    <category term="Matériel" />
    <category term="Aucun" />
    <category term="OK" />
    <category term="Article" />
    <summary type="html"><![CDATA[<p>
  Il semble que l'annonce par <a class='external' target='_blank' href='http://www.generation-nt.com/amt-ati-radeon-pilote-open-source-actualite-44909.html' >AMD de drivers open source pour les cartes ATI</a> ait quelque peu réveillé nos amis de chez nVidia. Un nouveau pilote est donc arrivé ce matin avec une liste de nouveautés assez impressionnante. 
</p>
    ]]></summary>
    <content type="html"><![CDATA[<p>
  Il semble que l'annonce par <a class='external' target='_blank' href='http://www.generation-nt.com/amt-ati-radeon-pilote-open-source-actualite-44909.html' >AMD de drivers open source pour les cartes ATI</a> ait quelque peu réveillé nos amis de chez nVidia. Un nouveau pilote est donc arrivé ce matin avec une liste de nouveautés assez impressionnante. 
</p>
<!--break-->
<p>Ceci dit, beaucoup de chose porte sur la GeForce  8 (logique) mais sur ma configuration, j'ai tout de même mesuré une amélioration de 8% des performances par rapport à la version <kbd>100.14.10</kbd>. Quant à la 3D, j'attends que XRendr 1.2 sorte pour pouvoir enfin réutiliser compiz sur ma config (je suis bloqué par Xinerama).</p>
<p>Voici donc la liste des changements que j'ai traduit en vitesse (lorsque je comprenais pas, j'ai préféré laisser en anglais) de ce driver disponible <a class='external' target='_blank' href='http://www.nvidia.com/object/linux_display_ia32_100.14.19.html' >ici</a>. </p>


	<a name='chapter_4'></a>
  <h2>Corrections</h2>
	
<ul>
<li>Régression de performance sur les GeForce 8.</lI>
<li>Problèmes de stabilité avec les GeForce 8 GPUs.</li>
<li>Support XvMC pour les GeForce 7050 PV / 630a avec PureVideo.</li>
<li>Rotation sur les GeForce 8.</li>
<li>Bug de rendu du server X après bascule sur le terminal pour les bureaux utilisant composite</li>
<li>Bug sur le module RENDER entraînant des erreurs de rendus sous Eclipse avec les GeForce 8.</li>
<li>EDID incorrectes sur certains portables</li>
<li>Fixed flickering corruption with SLIAA on GeForce 8 GPUs.</li>
<li>Problème de compatibilité avec les kernels 2.4
<li>Bugs dans 'nvidia-installer' qui traitait certains fichiers temporaires comme étant en conflit. </li>
<lI>Plusieurs plantages causé par l'utilisation conjointe de 'noexec' ett de /dev</li>
</ul>


	<a name='chapter_5'></a>
  <h2>Améliorations</h2>
	
<ul>
<li>Gestion du dépassement de mémoire sur la fameuse fonction GLX_EXT_texture_from_pixmap (utilisé par compiz-fusion)</li>
<li>Gestion d'énergie sur les GeForce 8 et plus anciens GPU.</li>
<li>Compatibilité avec les serveurs X.Org récents.</li>
<li>Support G-Syncsur les Quadro FX 4600 ey Quadro FX 5600.</li>
<li>Interactions avec les cartes mère ATI RS480/482.</li>
<li>Restauration de la console VGA sur les écrans LCD et Télé.</li>
<li>Compatibilité avec les kernels 2.6 récents</li>
<li>Improved hotkey switching support.</li>
<li>Réduction de l'utilisation de la mémoire virtuel du kernel avec certain GeForce 8.</li>
</ul>


	<a name='chapter_6'></a>
  <h2>Nouveautés</h2>
	
<ul>
<li>Support pour les cartes : Quadro FX 290, Quadro FX 370, Quadro FX 570, Quadro FX 1700</li>
<li>Support du mode 'NoScanout' (kesako?)</li>
<li>XV brightness and contrast controls to the GeForce 8 video texture adapter implementation.</li>
<li>Added support for a 'NoScanout' mode to the X driver, useful for high performance computing environments and remote graphics; please see the 'UseDisplayDevice' option description for details.</li>
</ul>    ]]></content>
  </entry>
  <entry>
    <title>La bonne affaire du jour, le dernier driver nVidia</title>
    <link rel="alternate" type="text/html" href="http://artisan.karma-lab.net/node/1211" />
    <id>http://artisan.karma-lab.net/node/1211</id>
    <published>2007-09-12T19:43:56+02:00</published>
    <updated>2008-02-07T08:37:09+01:00</updated>
    <author>
      <name>Ulhume</name>
    </author>
    <category term="Matériel" />
    <category term="Aucun" />
    <category term="OK" />
    <category term="Article" />
    <summary type="html"><![CDATA[<p>
Il est sorti il y a un petit moment en fait, en Juin je crois, l'opus <a class='external' target='_blank' href='http://www.nvidia.com/object/linux_display_ia32_100.14.11.html' >100.14.11</a> des drivers nVidia. Mais j'étais tellement agacé de la mise en veille des développements Linux pour que la firme arrive à faire fonctionner ses pilotes sur maudit-Vista que je l'avais purement et simplement zappé....
</p>
    ]]></summary>
    <content type="html"><![CDATA[<p>
Il est sorti il y a un petit moment en fait, en Juin je crois, l'opus <a class='external' target='_blank' href='http://www.nvidia.com/object/linux_display_ia32_100.14.11.html' >100.14.11</a> des drivers nVidia. Mais j'étais tellement agacé de la mise en veille des développements Linux pour que la firme arrive à faire fonctionner ses pilotes sur maudit-Vista que je l'avais purement et simplement zappé....
</p>
<!--break-->
<p>
Et pourtant, grosse erreur, tant les performances ont été améliorées. C'est bien simple, sur un test <a class='external' target='_blank' href='http://gtkperf.sourceforge.net/' >gtkperf</a>, là où j'obtenais 38s, j'obtiens maintenant <b>25s</b>. Dans ce test l'amélioration porte principalement sur les contrôles GTK (les développeurs semblent avoir trouvé un moyen de combler un peu les lacunes de ce tookit) et le rendu de l'anti-aliasing des fontes. Du coup, FireFox arrêtent enfin de <a class='external' target='_blank' href='/node/1177' >bégayer dans ses scrolls</a>. 
</p>
<p>
D'après les forums, un bug sur l'anti-aliasing des sub-pixels a aussi été réglé. Enfin, XGL est maintenant presque utilisable sur mon grand bureau 2 cartes / 3 écrans. Mais presque seulement, car si j'ai été surpris de voir que gtkperf donnait maintenant le même résultat en X pur qu'en XGL, tout ce qui est mouvement de fenêtre, scroll, etc est assez poussif...</p>
<p>
Donc, pour l'instant, pas encore de  Compiz pour moi tant que Xinerama sera une obligation dans ce type de configuration. En effet, cette extension qui permet de fusionner les trois écrans en un seul bureau, a le mauvais gout de désactiver l'extension XRandr. Du coup, tous les composites managers (Bery, compmgr, xfwm4, compiz, etc...) refusent de se lancer... 
</p>
<p>
J'attendrais dans les prochaines version du driver qui intégrera, parait-il, la <a class='external' target='_blank' href='http://keithp.com/blogs/randr_1.2_update' >mouture 1.2 de XRandr</a> censé rendre obsolète Xinerama.</p>
<p>Shall see... </p>
</p>    ]]></content>
  </entry>
</feed>
