<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="fr">
	<id>https://lea-linux.org/docs/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=LeaJice</id>
	<title>Lea Linux - Contributions [fr]</title>
	<link rel="self" type="application/atom+xml" href="https://lea-linux.org/docs/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=LeaJice"/>
	<link rel="alternate" type="text/html" href="https://lea-linux.org/documentations/Sp%C3%A9cial:Contributions/LeaJice"/>
	<updated>2026-05-11T09:57:02Z</updated>
	<subtitle>Contributions</subtitle>
	<generator>MediaWiki 1.40.1</generator>
	<entry>
		<id>https://lea-linux.org/docs/index.php?title=Perl&amp;diff=31331</id>
		<title>Perl</title>
		<link rel="alternate" type="text/html" href="https://lea-linux.org/docs/index.php?title=Perl&amp;diff=31331"/>
		<updated>2013-08-28T08:54:28Z</updated>

		<summary type="html">&lt;p&gt;LeaJice : /* Les éléments composant une expression régulière */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Catégorie:Développement]]&lt;br /&gt;
&lt;br /&gt;
= Perl =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;leatitre&amp;quot;&amp;gt;Perl&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;leapar&amp;quot;&amp;gt;par Jice et [mailto:jonesy_at_wanadoo_point_fr Jonesy]&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;leadesc&amp;quot;&amp;gt;Installation et introduction à Perl.&amp;lt;/div&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Avant propos ==&lt;br /&gt;
&lt;br /&gt;
Ceci n&#039;est qu&#039;une introduction au Perl, car nous pourrions écrire 4 ou 5 livres, voir plus, sur ce sujet ! ;-) Donc ne vous attendez pas à faire le tour de la question... &amp;lt;br /&amp;gt;Et je précise aussi, que ce n&#039;est pas non plus un cours de programmation : cet article s&#039;adresse à des personnes possédant des bases de programmation et voulant se mettre à Perl.&lt;br /&gt;
&lt;br /&gt;
== Présentation ==&lt;br /&gt;
&lt;br /&gt;
Perl est un langage de programmation extrêmement efficace pour traiter les fichiers et les chaînes de caractères. Venant du monde Unix, il intègre toutes les fonctions que l&#039;on peut retrouver en shell avec des commandes comme grep, sed, awk, ... Sa syntaxe générale ressemble beaucoup à celle du C et du shell. De plus, il est très apprécié des administrateurs système afin de gérer les fichiers de log.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Note de Jice&amp;lt;/u&amp;gt; : Perl est un langage très polyvalent. LE jeu, j&#039;ai nommé [http://www.frozen-bubble.org Frozen Bubble], est même programmé en Perl !&lt;br /&gt;
&lt;br /&gt;
=== Les particularités de Perl ===&lt;br /&gt;
&lt;br /&gt;
* C&#039;est un langage compilé et interprété. C&#039;est à dire que l&#039;on écrit le script, un simple fichier texte, puis à chaque fois que nous exécutons le script, l&#039;interpréteur compile le code à la volée sous une forme intermédiaire et exécute les commandes. &amp;lt;br /&amp;gt;On pourrait ainsi croire qu&#039;un script Perl est moins performant qu&#039;un programme C compilé, mais il s&#039;avère souvent plus performant et plus facile de faire un programme en Perl qu&#039;en C.&lt;br /&gt;
* Ce langage est disponible sur quasiment toutes les plates-formes et tous les systèmes possibles, Linux, Unices, Mac OS... Donc nos scripts Perl fonctionneront sur toutes ces machines sans aucune adaptation (à moins d&#039;utilisation de spécificités d&#039;un système d&#039;exploitation). Ce qui rend Perl disponible sur autant de systèmes, c&#039;est ses licences. Perl est Libre et est sous la licence GPL ou Artistic au choix.&lt;br /&gt;
* Perl est un langage qui permet la programmation &#039;&#039;orientée objet&#039;&#039;. Cet aspect du langage dépasse largement le cadre de cet article.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== L&#039;installation ==&lt;br /&gt;
&lt;br /&gt;
Dans cette partie, je n&#039;aborde que l&#039;installation de Perl sur un système Linux, et ce quelle que soit la distribution. Enfin, j&#039;espère... ;-) &amp;lt;br /&amp;gt; &lt;br /&gt;
&lt;br /&gt;
=== Vérifions si Perl est présent ===&lt;br /&gt;
&lt;br /&gt;
Il y a des chances pour que Perl soit déjà installé avec notre distribution ou que celle-ci fournisse un package Perl. Pour vérifier si Perl est déjà sur notre système faisons, en console : &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;perl -v&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;Ceci doit nous retourner un message du genre: &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;This is perl, v5.6.1 built for i386-linux&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;Copyright 1987-2001, Larry Wall&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;Perl may be copied only under the terms of either the Artistic licence or the GNU General Public licence, which may be found in the Perl 5 source kit.&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;Complete documentation for Perl, including FAQ lists, should be found on this system using `man perl&#039; or `perldoc perl&#039;. If you have access to the Internet, point your browser at http://www.perl.com/, the Perl Home Page.&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Si c&#039;est le cas, nous pouvons sauter le paragraphe suivant.&lt;br /&gt;
&lt;br /&gt;
=== Installation de Perl ===&lt;br /&gt;
&lt;br /&gt;
Pas de chance... Donc allons voir si notre distribution fournit un package et si oui, installons-le. Sinon... &amp;lt;br /&amp;gt;Les binaires sont accessibles ici : &amp;lt;tt&amp;gt;[http://www.activestate.com/Products/Download/Get.plex?id=ActivePerl&amp;amp;_x=1 http://www.activestate.com/Products/Download/Get.plex?id=ActivePerl&amp;amp;_x=1]&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;Note : je viens de remarquer que maintenant il demande e-mail, prénom et nom pour télécharger Perl. &amp;lt;br /&amp;gt;Les sources sont accessibles ici : &amp;lt;tt&amp;gt;http://www.perl.com/pub/a/langage/info/software.html#sourcecode&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Maintenant détarons le package &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;tar -xvzf &amp;lt;votre package&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;Allons sous le répertoire créé.&lt;br /&gt;
&lt;br /&gt;
Si nous souhaitons choisir nos paramètres en répondant à des questions : &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;./Configure -Dprefix=/usr&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;make&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;En root (&amp;lt;tt&amp;gt;su&amp;lt;/tt&amp;gt;) &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;make install&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sinon, pour une installation par défaut : &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;./Configure -Dprefix=/usr -d -e&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;make&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;En root (&amp;lt;tt&amp;gt;su&amp;lt;/tt&amp;gt;) &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;make install&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vérifions que Perl est bien installé &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;perl -v&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Introduction au langage Perl ==&lt;br /&gt;
&lt;br /&gt;
=== Les principales règles du Perl ===&lt;br /&gt;
&lt;br /&gt;
* Les lignes de code se terminent par un point virgule.&lt;br /&gt;
* Les noms de variables doivent être précédés par un caractère pour les identifier : &lt;br /&gt;
** une variable scalaire (nombre, chaîne de caractères...) est identifié par le symbole &#039;&amp;lt;tt&amp;gt;$&amp;lt;/tt&amp;gt;&#039;, par exemple &amp;lt;tt&amp;gt;$chaine&amp;lt;/tt&amp;gt;,&lt;br /&gt;
** un tableau par le symbole &#039;&amp;lt;tt&amp;gt;@&amp;lt;/tt&amp;gt;&#039;, par exemple &amp;lt;tt&amp;gt;@tableau&amp;lt;/tt&amp;gt;, et &amp;lt;tt&amp;gt;$tableau[12]&amp;lt;/tt&amp;gt; représente l&#039;élément n° 12. Un tableau est toujours unidimensionnel, c&#039;est pourquoi on parle aussi de liste (voir plus bas pour les&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt; [#structurescomplexes tableaux multidimensionnels])&amp;lt;/font&amp;gt;. Afin de définir un tableau, on écrit : &amp;lt;tt&amp;gt;@tableau = (val1, val2, ... , valn);&amp;lt;/tt&amp;gt;&lt;br /&gt;
** un &#039;&#039;hachage&#039;&#039; (&#039;&#039;hash&#039;&#039; en anglais) est identifié par le symbole &#039;&amp;lt;tt&amp;gt;%&amp;lt;/tt&amp;gt;&#039;, par exemple &amp;lt;tt&amp;gt;%hash&amp;lt;/tt&amp;gt;. Un hachage une structure indexée par des chaînes de caractères. &amp;lt;tt&amp;gt;$hash{&#039;prenom&#039;}&amp;lt;/tt&amp;gt; et &amp;lt;tt&amp;gt;$hash{&#039;nom&#039;}&amp;lt;/tt&amp;gt; serviront à enregistrer le prénom et le nom de quelqu&#039;un de façon explicite. Un hachage est défini de la manière suivante : &amp;lt;tt&amp;gt;%hash = ( prenom =&amp;gt; &#039;jice&#039;, nom =&amp;gt; &#039;cardot&#039; );&amp;lt;/tt&amp;gt;&lt;br /&gt;
* La déclaration des variables est non typée. C&#039;est à dire que nous n&#039;avons pas besoin de dire si cette variable va contenir une chaîne de caractère ou un entier. D&#039;ailleurs, une même variable pourrait contenir à un moment un entier et à un autre une chaîne, mais ce n&#039;est pas conseillé pour la relecture du code.&lt;br /&gt;
* Il y a deux sortes de chaînes de caractères. La chaîne de caractère définie entre simples cotes (&#039;) n&#039;est pas interpolée. La chaîne de caractères définie entre guillemets (&amp;quot;) est interpolée. Lorsque le Perl interprète une chaîne, il va regarder le contenu de celle-ci pour remplacer les variables qu&#039;il trouvera par leurs valeurs. &amp;lt;br /&amp;gt;&amp;lt;u&amp;gt;Notation&amp;lt;/u&amp;gt; : &amp;lt;tt&amp;gt;q(chaîne)&amp;lt;/tt&amp;gt; est synonyme de &amp;lt;tt&amp;gt;&#039;chaîne&#039;&amp;lt;/tt&amp;gt; et &amp;lt;tt&amp;gt;qq(chaîne)&amp;lt;/tt&amp;gt; de &amp;lt;tt&amp;gt;&amp;quot;chaîne&amp;quot;&amp;lt;/tt&amp;gt;. Remarquons que les parenthèses dans cette notation peuvent être remplacées par tout autre caractère, comme par exemple &amp;lt;tt&amp;gt;qq|chaîne|&amp;lt;/tt&amp;gt; ou &amp;lt;tt&amp;gt;qq!chaîne!&amp;lt;/tt&amp;gt;.&lt;br /&gt;
* La déclaration des variables n&#039;est pas obligatoire. Il y a une commande pour nous obliger à déclarer les variables et d&#039;autres choses. &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&#039;&#039;&#039;use&#039;&#039;&#039; strict;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;Je conseille très fortement d&#039;utiliser ceci, afin d&#039;écrire un code source plus propre et lisible. En effet, cette directive impose de déclarer les variables, et interdit certaines constructions dangereuses... Ceci facilite la recherche d&#039;erreurs, et le débutant prend ainsi dès le début de bonnes habitudes de programmation.&lt;br /&gt;
* Un &#039;&#039;&#039;bloc&#039;&#039;&#039; est une suite d&#039;instructions, séparées par des points virgules, et entourée d&#039;accolades. Par exemple : &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;{&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;    $toto = 12;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;    print $toto;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;}&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;est un bloc.&lt;br /&gt;
&lt;br /&gt;
=== Définir l&#039;interpréteur ===&lt;br /&gt;
&lt;br /&gt;
Le fait de définir l&#039;interpréteur dans le script permet de l&#039;exécuter directement. Pour ce faire il faut placer la ligne suivante au tout début du script : &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;#!/usr/bin/perl&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;Ce qui permettra d&#039;exécuter le script directement par : &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;./script.pl&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;Sans cette ligne il faudrait exécuter le script comme ceci : &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&#039;&#039;&#039;perl&#039;&#039;&#039; script.pl&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;En ajoutant l&#039;option &amp;lt;tt&amp;gt;-W&amp;lt;/tt&amp;gt;, nous obtenons la liste des toutes les erreurs et de tous les avertissements lors de l&#039;interprétation du script. &amp;lt;br /&amp;gt; &lt;br /&gt;
&lt;br /&gt;
=== Les commentaires ===&lt;br /&gt;
&lt;br /&gt;
Un commentaire débute par un caractère dièse (#). Tout ce qui suit ce caractère jusqu&#039;à la fin de la ligne sera considéré comme du commentaire. &amp;lt;br /&amp;gt;Par exemple : &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Ceci est un exemple de commentaire&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;print &amp;quot;test&amp;quot;; # un 2ème commentaire&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt; &lt;br /&gt;
&lt;br /&gt;
=== Utiliser une libraire particulière ===&lt;br /&gt;
&lt;br /&gt;
L&#039;extension des fichiers librairies (ou module) est &amp;lt;tt&amp;gt;pm&amp;lt;/tt&amp;gt;. &amp;lt;tt&amp;gt;pm&amp;lt;/tt&amp;gt; signifie Perl Module. &amp;lt;br /&amp;gt;Pour appeler une librairie, on ajoute la directive : &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&#039;&#039;&#039;use&#039;&#039;&#039; la_librairie;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;Pour indiquer à perl où chercher nos librairies personnelles, on utilise la directive : &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&#039;&#039;&#039;use&#039;&#039;&#039; &#039;&#039;&#039;lib&#039;&#039;&#039; &amp;quot;le chemin d&#039;accès&amp;quot;;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Remarque&amp;lt;/u&amp;gt; : les chemins de recherche des librairies sont définis dans le tableau &amp;lt;tt&amp;gt;@INC&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Déclarer une variable ===&lt;br /&gt;
&lt;br /&gt;
==== Variable globale : ====&lt;br /&gt;
&lt;br /&gt;
Cela se fait automatiquement lors de la première utilisation de la variable. Cependant, lorsqu&#039;on utilise &amp;lt;tt&amp;gt;use strict&amp;lt;/tt&amp;gt;, il faut déclarer les variables globales par la directive suivante : &amp;lt;tt&amp;gt;&#039;&#039;&#039;use vars qw(&#039;&#039;&#039;$var1 $var2 @tab1 %hash1&#039;&#039;&#039;);&#039;&#039;&#039;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Remarque&amp;lt;/u&amp;gt; : le mot clef &amp;lt;tt&amp;gt;local&amp;lt;/tt&amp;gt; s&#039;applique à une variable globale (&amp;lt;tt&amp;gt;&#039;&#039;&#039;local &#039;&#039;&#039;$variable;&amp;lt;/tt&amp;gt;). Il permet à l&#039;intérieur d&#039;un bloc de cacher une variable globale par une autre valeur. La variable reste globale, c&#039;est à dire que dans les procédures appelées dans le bloc, la nouvelle valeur est utilisée ; à la fin du bloc, l&#039;ancienne valeur est restaurée.&lt;br /&gt;
&lt;br /&gt;
==== Variable lexicale : ====&lt;br /&gt;
&lt;br /&gt;
Une variable lexicale n&#039;existe qu&#039;à l&#039;intérieur d&#039;un bloc. On parle aussi de variable locale. &amp;lt;br /&amp;gt;On la déclare par &amp;lt;tt&amp;gt;&#039;&#039;&#039;my&#039;&#039;&#039; $variable&amp;lt;/tt&amp;gt; ou &amp;lt;tt&amp;gt;&#039;&#039;&#039;my&#039;&#039;&#039; @tableau&amp;lt;/tt&amp;gt;...&lt;br /&gt;
&lt;br /&gt;
Pour déclarer plusieurs variables et un tableau en une seule commande, faire : &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&#039;&#039;&#039;my &#039;&#039;&#039;($var1, $var2, @tab);&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt; &lt;br /&gt;
&lt;br /&gt;
=== Les opérateurs ===&lt;br /&gt;
&lt;br /&gt;
Voici les opérateurs les plus couramment utilisés. Pour plus d&#039;info sur les opérateurs : &amp;lt;tt&amp;gt;man perlop&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Opérateurs unaires ====&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|- valign=&amp;quot;TOP&amp;quot;&lt;br /&gt;
| &amp;lt;tt&amp;gt;!&amp;lt;/tt&amp;gt;&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;: négation logique. Si &amp;lt;/nowiki&amp;gt;&amp;lt;tt&amp;gt;$a&amp;lt;/tt&amp;gt; vaut vrai, &amp;lt;tt&amp;gt;!$a&amp;lt;/tt&amp;gt; vaudra faux.&lt;br /&gt;
|- valign=&amp;quot;TOP&amp;quot;&lt;br /&gt;
| &amp;lt;tt&amp;gt;-&amp;lt;/tt&amp;gt;&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;: négation arithmétique. Si &amp;lt;/nowiki&amp;gt;&amp;lt;tt&amp;gt;$a&amp;lt;/tt&amp;gt; vaut 2, &amp;lt;tt&amp;gt;-$a&amp;lt;/tt&amp;gt; vaudra -2.&lt;br /&gt;
|- valign=&amp;quot;TOP&amp;quot;&lt;br /&gt;
| &amp;lt;tt&amp;gt;~&amp;lt;/tt&amp;gt;&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;: négation binaire ou complément à 1.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;TOP&amp;quot;&lt;br /&gt;
| &amp;lt;tt&amp;gt;++&amp;lt;/tt&amp;gt;&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;: incrémentation ; si ++ est placé avant la variable, l&#039;interpréteur l&#039;incrémente avant de retourner la valeur, si ++ est placé après, il retourne la valeur puis l&#039;incrémente. Exemple : &amp;lt;/nowiki&amp;gt;&amp;lt;tt&amp;gt;[http://paris.mongueurs.net/aplusplus.html $A++]&amp;lt;/tt&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;TOP&amp;quot;&lt;br /&gt;
| &amp;lt;tt&amp;gt;--&amp;lt;/tt&amp;gt;&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;: décrémentation ; idem.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Opérateurs binaires ====&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|- valign=&amp;quot;TOP&amp;quot;&lt;br /&gt;
| &amp;lt;tt&amp;gt;+ - * / % **&amp;lt;/tt&amp;gt;&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;: opérations arithmétiques (% est le modulo, ** est l&#039;exponentiation).&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;TOP&amp;quot;&lt;br /&gt;
| &amp;lt;tt&amp;gt;.&amp;lt;/tt&amp;gt;&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;: concatène deux chaînes : &amp;lt;/nowiki&amp;gt;&amp;lt;tt&amp;gt;&amp;quot;aze&amp;quot;.&amp;quot;rty&amp;quot;&amp;lt;/tt&amp;gt; vaut &amp;lt;tt&amp;gt;&amp;quot;azerty&amp;quot;&amp;lt;/tt&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;x&amp;lt;/tt&amp;gt;&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;: &amp;quot;multiplie&amp;quot; une chaîne : &amp;lt;/nowiki&amp;gt;&amp;lt;tt&amp;gt;&amp;quot;to&amp;quot; x 2&amp;lt;/tt&amp;gt; vaut &amp;lt;tt&amp;gt;&amp;quot;toto&amp;quot;&amp;lt;/tt&amp;gt;.&lt;br /&gt;
|- valign=&amp;quot;TOP&amp;quot;&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;amp;#x26; &amp;amp;#x7C; ^ &amp;lt;&amp;lt; &amp;gt;&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;: opérations sur les bits : et, ou, ou exclusif (&amp;lt;/nowiki&amp;gt;&#039;&#039;xor&#039;&#039;), décalage à gauche, à droite.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;amp;&amp;amp; &amp;lt;nowiki&amp;gt;||&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;: et logique, ou logique.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Opérateur ternaire ====&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|- valign=&amp;quot;TOP&amp;quot;&lt;br /&gt;
| &amp;lt;tt&amp;gt;?: &amp;lt;/tt&amp;gt;&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;: cet opérateur particulier est nommé &amp;quot;opérateur conditionnel&amp;quot;. Il fonctionne à la manière d&#039;un &amp;lt;/nowiki&amp;gt;&#039;&#039;si alors sinon&#039;&#039;. Si l&#039;expression à gauche du ? est vraie, l&#039;argument avant le : est retourné, sinon l&#039;argument après le : est retourné. Mieux vaut un exemple : &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;print (($n&amp;gt;1)?&#039;s&#039;:&#039;&#039;);&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;affichera &amp;lt;tt&amp;gt;&#039;s&#039;&amp;lt;/tt&amp;gt; si &amp;lt;tt&amp;gt;$n&amp;lt;/tt&amp;gt; est plus grand que 1, et n&#039;affichera rien (&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;&#039;&#039;&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;) sinon.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Opérateurs de comparaison numériques ====&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|- valign=&amp;quot;TOP&amp;quot;&lt;br /&gt;
| &amp;lt; &amp;lt;= &amp;gt; &amp;gt;=&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;: plus petit, plus petit ou égal, plus grand, plus grand ou égal&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;TOP&amp;quot;&lt;br /&gt;
| &amp;lt;tt&amp;gt;== !=&amp;lt;/tt&amp;gt;&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;: égal, différent&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Opérateurs de comparaison pour les chaînes de caractères ====&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|- valign=&amp;quot;TOP&amp;quot;&lt;br /&gt;
| &amp;lt;tt&amp;gt;lt le gt ge&amp;lt;/tt&amp;gt;&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;: plus petit, plus petit ou égal, plus grand, plus grand ou égal&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;TOP&amp;quot;&lt;br /&gt;
| &amp;lt;tt&amp;gt;eq ne&amp;lt;/tt&amp;gt;&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;: égal, différent&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;=~ !~&amp;lt;/tt&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;nowiki&amp;gt;: teste si une chaîne de caractères correspond à une expression régulière. Voir le paragraphe &amp;lt;/nowiki&amp;gt;[#expressions_regulieres expressions régulières].&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== L&#039;affectation d&#039;une variable ===&lt;br /&gt;
&lt;br /&gt;
L&#039;opérateur d&#039;affectation &amp;quot;normal&amp;quot; est &#039;&amp;lt;tt&amp;gt;=&amp;lt;/tt&amp;gt;&#039;. Par exemple : &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;$variable &#039;&#039;&#039;=&#039;&#039;&#039; mavaleur;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;affecte la valeur &amp;lt;tt&amp;gt;mavaleur&amp;lt;/tt&amp;gt; à la variable &amp;lt;tt&amp;gt;$variable&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
D&#039;autres opérateurs d&#039;affectation sont un raccourci pour les opérations binaires. &amp;lt;br /&amp;gt;Par exemple &amp;lt;tt&amp;gt;$a &#039;&#039;&#039;+=&#039;&#039;&#039; 2&amp;lt;/tt&amp;gt; est un raccourci pour &amp;lt;tt&amp;gt;$a = $a &#039;&#039;&#039;+&#039;&#039;&#039; 2&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Les opérateurs d&#039;affectation les plus couramment utilisés sont :&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|- valign=&amp;quot;TOP&amp;quot;&lt;br /&gt;
| &amp;lt;tt&amp;gt;  =&amp;lt;/tt&amp;gt;&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;: affectation &amp;quot;standard&amp;quot;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;TOP&amp;quot;&lt;br /&gt;
| &amp;lt;tt&amp;gt; +=  -=  *=  /=   %=&amp;lt;/tt&amp;gt;&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;: pour les opérations arithmétiques (+, -, *, / et modulo)&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;&amp;amp;&amp;amp;= ||=  !=&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;: pour les opérations logiques (et logique, ou logique, non logique)&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt; &amp;amp;=  |=  ^=  ~=  &amp;lt;&amp;lt;=  &amp;gt;&amp;gt;=&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;: pour les opérations logiques sur les bits (et, ou, ou exclusif, complément à 1, décalages gauche et droite)&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt; .=&amp;lt;/tt&amp;gt;&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;: pour les opérations sur les chaînes de caractères (concaténation)&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt; =~  !~&amp;lt;/tt&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;nowiki&amp;gt;: pour les expressions régulières (voir &amp;lt;/nowiki&amp;gt;[[#Les expressions régulières, ou regex|plus bas]]).&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Quelques variables particulières prédéfinies ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;use English;&amp;lt;/tt&amp;gt; permet d&#039;utiliser les noms des variables au lieu des noms standards des variables spéciales (ex : &amp;lt;tt&amp;gt;$ARG&amp;lt;/tt&amp;gt; au lieu de &amp;lt;tt&amp;gt;$_&amp;lt;/tt&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;@_&amp;lt;/tt&amp;gt; ou &amp;lt;tt&amp;gt;@ARG&amp;lt;/tt&amp;gt; : Tableau d&#039;arguments. Sert pour le passage de paramètres. &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;$_&amp;lt;/tt&amp;gt; ou &amp;lt;tt&amp;gt;$ARG&amp;lt;/tt&amp;gt; : Variable par défaut des fonctions unaires entrées/sorties, recherche... &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;$/&amp;lt;/tt&amp;gt; ou &amp;lt;tt&amp;gt;$RS&amp;lt;/tt&amp;gt; ou &amp;lt;tt&amp;gt;$INPUT_RECORD_SEPARATOR&amp;lt;/tt&amp;gt; : fin de ligne lorsqu&#039;on lit un fichier, &amp;lt;tt&amp;gt;\n&amp;lt;/tt&amp;gt; par défaut sous unix et &amp;lt;tt&amp;gt;\r\n&amp;lt;/tt&amp;gt; sous windows. &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;$!&amp;lt;/tt&amp;gt; ou &amp;lt;tt&amp;gt;$ERRNO&amp;lt;/tt&amp;gt; : suivant le contexte d&#039;utilisation, retourne le numéro de la dernière erreur système, ou le message d&#039;erreur système. &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;$0&amp;lt;/tt&amp;gt; ou &amp;lt;tt&amp;gt;$PROGRAM_NAME&amp;lt;/tt&amp;gt; : Nom du fichier qui contient le script Perl. &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;$^0&amp;lt;/tt&amp;gt; ou &amp;lt;tt&amp;gt;$OSNAME&amp;lt;/tt&amp;gt; : Nom du système d&#039;exploitation. &amp;lt;br /&amp;gt;Utiliser une variable d&#039;environnement &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;$variable = $ENV{&amp;quot;nom de la variable d&#039;environnement&amp;quot;};&amp;lt;/tt&amp;gt; Remarque, ce n&#039;est que l&#039;utilisation du &#039;&#039;hachage&#039;&#039; &amp;lt;tt&amp;gt;%ENV&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Pour plus d&#039;information sur ces variables : &amp;lt;tt&amp;gt;man perlvar&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt; &lt;br /&gt;
&lt;br /&gt;
=== Branchements conditionnels ===&lt;br /&gt;
&lt;br /&gt;
Ce test classique peut s&#039;écrire de la manière suivante : &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&#039;&#039;&#039;if&#039;&#039;&#039; (test) {bloc}&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&#039;&#039;&#039;if&#039;&#039;&#039; (test) {bloc} &#039;&#039;&#039;else&#039;&#039;&#039; {bloc}&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&#039;&#039;&#039;if&#039;&#039;&#039; (test) {bloc} &#039;&#039;&#039;elsif&#039;&#039;&#039; (test) {bloc} ... &#039;&#039;&#039;else&#039;&#039;&#039; {bloc}&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;test&amp;lt;/tt&amp;gt; étant toute expression qui retourne une valeur. &amp;lt;br /&amp;gt;&amp;lt;u&amp;gt;exemple&amp;lt;/u&amp;gt; : &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;if (!open(F,$FICHIER)) { die &amp;quot;impossible d&#039;ouvrir $FICHIER: $!&amp;quot;; }&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il y a d&#039;autres manières de faire la même chose, vous pouvez utiliser par exemple : &amp;lt;br /&amp;gt; &lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|- valign=&amp;quot;TOP&amp;quot;&lt;br /&gt;
| &amp;lt;tt&amp;gt;instruction &#039;&#039;&#039;if&#039;&#039;&#039; test;&amp;lt;/tt&amp;gt;&lt;br /&gt;
| exécute l&#039;instruction si le test est vrai. &amp;lt;br /&amp;gt;&amp;lt;u&amp;gt;exemple&amp;lt;/u&amp;gt; : &amp;lt;tt&amp;gt;die &amp;quot;impossible d&#039;ouvrir $FICHIER: $!&amp;quot; &#039;&#039;&#039;if&#039;&#039;&#039; !open(F,$FICHIER);&amp;lt;/tt&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;TOP&amp;quot;&lt;br /&gt;
| &amp;lt;tt&amp;gt;instruction &#039;&#039;&#039;unless&#039;&#039;&#039; test;&amp;lt;/tt&amp;gt;&lt;br /&gt;
| exécute l&#039;instruction si le test est faux. &amp;lt;br /&amp;gt;&amp;lt;u&amp;gt;exemple&amp;lt;/u&amp;gt; : &amp;lt;tt&amp;gt;die &amp;quot;impossible d&#039;ouvrir $FICHIER: $!&amp;quot; &#039;&#039;&#039;unless&#039;&#039;&#039; open(F,$FICHIER);&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;commande1 &#039;&#039;&#039;or&#039;&#039;&#039; commande2;&amp;lt;/tt&amp;gt;&lt;br /&gt;
| exécute la commande1 ; si elle retourne faux, alors la commande2 sera exécutée. Sinon on passe à la suite. &amp;lt;br /&amp;gt;&amp;lt;u&amp;gt;exemple&amp;lt;/u&amp;gt; : &amp;lt;tt&amp;gt;open(F,$FICHIER) &#039;&#039;&#039;or&#039;&#039;&#039; die &amp;quot;impossible d&#039;ouvrir $FICHIER: $!&amp;quot;;&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;test&#039;&#039;&#039;?&#039;&#039;&#039;commande1&#039;&#039;&#039;&amp;lt;nowiki&amp;gt;:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;commande2;&amp;lt;/tt&amp;gt;&lt;br /&gt;
| exécute la commande1 si la condition du test est remplie, sinon il exécute la commande2.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Note&amp;lt;/u&amp;gt; : Pour ceux qui connaissent, il n&#039;y a pas d&#039;équivalent au &#039;&amp;lt;tt&amp;gt;case&amp;lt;/tt&amp;gt;&#039; ou &#039;&amp;lt;tt&amp;gt;switch&amp;lt;/tt&amp;gt;&#039;. Il y a plusieurs façons de faire, notamment utiliser &amp;lt;tt&amp;gt;if elsif ... else&amp;lt;/tt&amp;gt;. &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;man perlsyn&amp;lt;/tt&amp;gt; vous donnera plus d&#039;informations. &amp;lt;br /&amp;gt; &lt;br /&gt;
&lt;br /&gt;
=== Les boucles ===&lt;br /&gt;
&lt;br /&gt;
==== For et foreach ====&lt;br /&gt;
&lt;br /&gt;
Il y a deux types de boucles for, le for &#039;style C&#039;, et le for/foreach Perl.&lt;br /&gt;
&lt;br /&gt;
===== for/foreach Perl =====&lt;br /&gt;
&lt;br /&gt;
Dans ce cas, for et foreach sont synonymes. On peut utiliser l&#039;un ou l&#039;autre pour améliorer la lecture, par habitude, etc.&lt;br /&gt;
&lt;br /&gt;
Pour aller de 1 à 9 : &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&#039;&#039;&#039;for&#039;&#039;&#039; $cpt (1 .. 9) {bloc} &amp;lt;/tt&amp;gt;ou&amp;lt;tt&amp;gt; &#039;&#039;&#039;foreach&#039;&#039;&#039; $cpt (1 .. 9) {bloc}&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;(dans &amp;lt;tt&amp;gt;{bloc}&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;$cpt&amp;lt;/tt&amp;gt; prend successivement les valeurs de 1 à 9) &amp;lt;br /&amp;gt;ou &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&#039;&#039;&#039;for&#039;&#039;&#039; (1 .. 9) {bloc}&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;ici, à chaque itération, la variable par défaut &amp;lt;tt&amp;gt;$_&amp;lt;/tt&amp;gt; prend la valeur suivante.&lt;br /&gt;
&lt;br /&gt;
Pour parcourir chaque éléments d&#039;un tableau : &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&#039;&#039;&#039;foreach&#039;&#039;&#039; $variable (@tableau) {bloc}&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;A chaque itération, &amp;lt;tt&amp;gt;$variable&amp;lt;/tt&amp;gt; prendra la valeur suivante de &amp;lt;tt&amp;gt;@tableau&amp;lt;/tt&amp;gt;. &amp;lt;br /&amp;gt;Si on omet &amp;lt;tt&amp;gt;$variable&amp;lt;/tt&amp;gt;, alors la valeur de l&#039;élément sera stocké dans la variable &amp;lt;tt&amp;gt;$_&amp;lt;/tt&amp;gt; : &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&#039;&#039;&#039;foreach&#039;&#039;&#039; (@tableau) {bloc}&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Remarque&amp;lt;/u&amp;gt; : l&#039;écriture &amp;lt;tt&amp;gt;1..9&amp;lt;/tt&amp;gt; définit en réalité un tableau de 9 éléments (1,2,3,4,5,6,7,8,9).&lt;br /&gt;
&lt;br /&gt;
===== for &#039;style C&#039; =====&lt;br /&gt;
&lt;br /&gt;
La construction &#039;classique&#039; à la C est possible, mais tellement moins Perl... &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&#039;&#039;&#039;for&#039;&#039;&#039; ($cpt=1 ; $cpt &amp;lt; 10 ; $cpt++) {bloc}&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;Cette construction est néanmoins très puissante, et permet de faire beaucoup plus de choses que de simples itérations... A vous de voir !&lt;br /&gt;
&lt;br /&gt;
A noter que dans les exemples ci-dessus, les variables $cpt ou $variable sont locales à la boucle. Si elles doivent être déclarées, vous pouvez les faire précéder du mot clef &amp;lt;tt&amp;gt;my&amp;lt;/tt&amp;gt; : &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;for &#039;&#039;&#039;my&#039;&#039;&#039; $cpt (1 .. 9) {bloc}&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;for (&#039;&#039;&#039;my&#039;&#039;&#039; $cpt=1 ; $cpt &amp;lt; 10 ; $cpt++) {bloc}&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== While ====&lt;br /&gt;
&lt;br /&gt;
Les boucles while se construisent comme suit : &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&#039;&#039;&#039;while&#039;&#039;&#039; (test) {bloc1}&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&#039;&#039;&#039;while&#039;&#039;&#039; (test) {bloc1} &#039;&#039;&#039;continue&#039;&#039;&#039; {bloc2}&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le bloc1 puis le bloc2 sera exécuté tant que le test est vrai.&lt;br /&gt;
&lt;br /&gt;
L&#039;exécution des boucles peut être pilotée à l&#039;intérieur des blocs par les commandes &amp;lt;tt&amp;gt;next&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;last&amp;lt;/tt&amp;gt; et &amp;lt;tt&amp;gt;redo&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;next&amp;lt;/tt&amp;gt; lance l&#039;itération suivante de la boucle. Le bloc continue est exécuté puis la boucle redémarre.&lt;br /&gt;
* &amp;lt;tt&amp;gt;last&amp;lt;/tt&amp;gt; sort de la boucle, sans exécuter le bloc continue.&lt;br /&gt;
* &amp;lt;tt&amp;gt;redo&amp;lt;/tt&amp;gt; relance l&#039;itération de la boucle, sans exécuter le bloc continue ni le test.&lt;br /&gt;
&lt;br /&gt;
Par exemple, le code suivant lit l&#039;entrée standard, et ignore les commentaires (lignes commençant par #)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;lt;tt&amp;gt;&#039;&#039;&#039;while&#039;&#039;&#039; (&amp;lt;STDIN&amp;gt;) {&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;    &#039;&#039;&#039;next&#039;&#039;&#039; if /^#/;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;    ...&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;}&amp;lt;/tt&amp;gt;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Autre exemple, une itération de 1 à 9&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;lt;tt&amp;gt;$cpt = 1;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&#039;&#039;&#039;while&#039;&#039;&#039; ($cpt &amp;lt; 10) {&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  ...&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  $cpt++;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;}&amp;lt;/tt&amp;gt;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ou bien :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;lt;tt&amp;gt;$cpt = 1;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&#039;&#039;&#039;while&#039;&#039;&#039; ($cpt &amp;lt; 10) {&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  ...&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;}&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&#039;&#039;&#039;continue&#039;&#039;&#039; {&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  $cpt++;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;}&amp;lt;/tt&amp;gt;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour plus d&#039;information sur ces constructions : &amp;lt;tt&amp;gt;man perlsyn&amp;lt;/tt&amp;gt;. &amp;lt;br /&amp;gt; &lt;br /&gt;
&lt;br /&gt;
=== Les fonctions et procédures ===&lt;br /&gt;
&lt;br /&gt;
==== Déclaration des fonctions ====&lt;br /&gt;
&lt;br /&gt;
Une fonction peut être déclarée n&#039;importe où dans le script Perl, mais pour des questions de lisibilité, il est préférable de déclarer les fonctions regroupées soit en début, soit en fin de script. &amp;lt;br /&amp;gt;On peut pré-déclarer les fonctions par : &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&#039;&#039;&#039;sub&#039;&#039;&#039; mafonction;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;ou les déclarer directement par : &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&#039;&#039;&#039;sub&#039;&#039;&#039; mafonction {bloc}&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Passage de paramètres ====&lt;br /&gt;
&lt;br /&gt;
Les paramètres sont passés comme une liste de valeurs scalaires (nombre, chaîne...) &amp;lt;u&amp;gt;à plat&amp;lt;/u&amp;gt;. &amp;lt;br /&amp;gt;Par exemple : &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;ma_fonction($variable, &amp;quot;chaîne&amp;quot;);&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour lire valeur des paramètres passés dans la fonction, il suffit de lire la variable &amp;lt;tt&amp;gt;@_ &amp;lt;/tt&amp;gt;qui est le tableau contenant les paramètres. &amp;lt;br /&amp;gt;Une façon simple de les lire est d&#039;écrire en début de fonction : &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&#039;&#039;&#039;my &#039;&#039;&#039;($variable, $chaine) = @_;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;On peut aussi récupérer les arguments en dépilant les éléments du tableau &amp;lt;tt&amp;gt;@_&amp;lt;/tt&amp;gt; avec la commande &amp;lt;tt&amp;gt;shift&amp;lt;/tt&amp;gt;. &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;my $variable = shift @_;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;qui peut s&#039;abréger en &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;my $variable = shift;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;car le tableau &amp;lt;tt&amp;gt;@_&amp;lt;/tt&amp;gt; est l&#039;argument par défaut de shift.&lt;br /&gt;
&lt;br /&gt;
Les paramètres sont passés &#039;&#039;&#039;par valeur&#039;&#039;&#039;. Pour pouvoir modifier le contenu d&#039;une variable passée en paramètre à une fonction, il faut passer à cette fonction une &#039;&#039;référence&#039;&#039; sur la variable (on parle de passage &#039;&#039;&#039;par référence&#039;&#039;&#039;). Une référence est un type scalaire particulier qui permet de se &#039;&#039;référer&#039;&#039; à une variable. La notation consiste à faire précéder la variable par un caractère &#039;&amp;lt;tt&amp;gt;\&amp;lt;/tt&amp;gt;&#039;. Pour récupérer la variable cachée derrière la référence (ou &#039;&#039;déréférencer&#039;&#039;), il faut faire précéder la référence du caractère de type correspondant, et optionnellement entourer la référence d&#039;accolades. &amp;lt;br /&amp;gt;&amp;lt;u&amp;gt;Exemple&amp;lt;/u&amp;gt; : &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;$a = 1;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;$b = \$a;       # $b&amp;lt;/tt&amp;gt; est une référence à &amp;lt;tt&amp;gt;$a&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;$c = $$b + 1;   # $c = 2&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;$c = ${$b} + 1; # &amp;lt;/tt&amp;gt;synonyme&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Démonstration&amp;lt;/u&amp;gt; : &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;sub test&#039;&#039;&#039;1&#039;&#039;&#039; {&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;    my $a=shift; &amp;lt;/tt&amp;gt;&amp;lt;nowiki&amp;gt;# récupération du paramètre &amp;lt;/nowiki&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;    $a += 1;     &amp;lt;/tt&amp;gt;&amp;lt;nowiki&amp;gt;# on ajoute un &amp;lt;/nowiki&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;}&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;sub test&#039;&#039;&#039;2&#039;&#039;&#039; {&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;    my $ref_a=shift;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&#039;&#039;&#039;    $&#039;&#039;&#039;$ref_a += 1; &amp;lt;/tt&amp;gt;&amp;lt;nowiki&amp;gt;# le premier $ déréférence la référence &amp;lt;/nowiki&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;}&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;$a = 1;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;print $a;   &amp;lt;/tt&amp;gt;&amp;lt;nowiki&amp;gt;# affiche 1 &amp;lt;/nowiki&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;test&#039;&#039;&#039;1&#039;&#039;&#039;($a);&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;print $a;   &amp;lt;/tt&amp;gt;&amp;lt;nowiki&amp;gt;# affiche 1 &amp;lt;/nowiki&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;test&#039;&#039;&#039;2&#039;&#039;&#039;(&#039;&#039;&#039;\&#039;&#039;&#039;$a); &amp;lt;/tt&amp;gt;&amp;lt;nowiki&amp;gt;# &amp;lt;/nowiki&amp;gt;&amp;lt;tt&amp;gt;&#039;&#039;&#039;\&#039;&#039;&#039;$a&amp;lt;/tt&amp;gt; est une référence sur &amp;lt;tt&amp;gt;$a&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;print $a;   &amp;lt;/tt&amp;gt;&amp;lt;nowiki&amp;gt;# affiche 2 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le passage par référence a aussi pour d&#039;intérêt de pouvoir passer des tableaux ou des hachages en paramètres à une fonction. En effet, on a vu que les paramètres d&#039;une fonction sont passés comme une &#039;&#039;&#039;liste de valeurs scalaires&#039;&#039;&#039; &amp;lt;u&amp;gt;à plat&amp;lt;/u&amp;gt;. Si on désire passer 2 tableaux &amp;lt;tt&amp;gt;@tab1=(1,1,1)&amp;lt;/tt&amp;gt; et &amp;lt;tt&amp;gt;@tab2=(2,2)&amp;lt;/tt&amp;gt; à une fonction, et que l&#039;on écrit : &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;mafonction (@tab1, @tab2);&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;alors perl traduira cela comme : &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;mafonction (1,1,1,2,2);&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;car il met toutes les valeurs à plat dans une liste. Une fois dans la fonction on sera bien embêté pour savoir distinguer les éléments du premier tableau de ceux du deuxième. &amp;lt;br /&amp;gt;On va donc passer une référence sur chaque tableau : &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;mafonction (&#039;&#039;&#039;\&#039;&#039;&#039;@tab1, &#039;&#039;&#039;\&#039;&#039;&#039;@tab2);&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Exemple&amp;lt;/u&amp;gt; : &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;sub liste_gt {&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;    my ($l1ref, $l2ref) = @_;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;    $n1 = &#039;&#039;&#039;@&#039;&#039;&#039;$l1ref; #&amp;lt;/tt&amp;gt; &amp;lt;tt&amp;gt;@$l1ref&amp;lt;/tt&amp;gt; représente le tableau référencé par &amp;lt;tt&amp;gt;$l1ref&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;    $n2 = &#039;&#039;&#039;@&#039;&#039;&#039;$l2ref;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;    #&amp;lt;/tt&amp;gt; (affecter un tableau dans un scalaire retourne le nombre d&#039;éléments) &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;    if ($n1 &amp;gt; $n2) { return 1; }&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;    else { return 0; }&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;}&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;@tab1 = (1,2,3);&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;@tab2 = (&amp;quot;a&amp;quot;,2,&amp;quot;r&amp;quot;,5);&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;if (liste_gt(&#039;&#039;&#039;\&#039;&#039;&#039;@tab1, &#039;&#039;&#039;\&#039;&#039;&#039;@tab2)) {&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;    print &amp;quot;tab1 a plus d&#039;éléments que tab2\n&amp;quot;;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;} else {&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;    print &amp;quot;tab2 a plus d&#039;éléments que tab1\n&amp;quot;;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;}&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tout cela s&#039;applique de la même façon aux hachages. &amp;lt;br /&amp;gt;Pour plus d&#039;informations sur les références, voir &amp;lt;tt&amp;gt;man perlreftut&amp;lt;/tt&amp;gt; (tutoriel) et &amp;lt;tt&amp;gt;man perlref&amp;lt;/tt&amp;gt; (références).&lt;br /&gt;
&lt;br /&gt;
==== Retour de valeurs ====&lt;br /&gt;
&lt;br /&gt;
Une fonction peut renvoyer une ou des valeurs, grâce à la commande &amp;lt;tt&amp;gt;return&amp;lt;/tt&amp;gt; : &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&#039;&#039;&#039;sub&#039;&#039;&#039; ecrire&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;{&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  ...&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  &#039;&#039;&#039;return&#039;&#039;&#039; $valeur;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  ...      &amp;lt;/tt&amp;gt;&amp;lt;nowiki&amp;gt;# renvoie une valeur unique &amp;lt;/nowiki&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  &#039;&#039;&#039;return&#039;&#039;&#039; $valeur1, $valeur2;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  ...      &amp;lt;/tt&amp;gt;&amp;lt;nowiki&amp;gt;# renvoie une liste de valeurs &amp;lt;/nowiki&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;}&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;Cette commande provoque la sortie immédiate du sous-programme pour retourner dans le programme appelant.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;tt&amp;gt;return&amp;lt;/tt&amp;gt;&#039;&#039;&#039; permet de renvoyer une valeur ou une liste de valeurs. Cela permet donc à une fonction de retourner soit un tableau : &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;@resultat = ma_fonction;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;soit plusieurs valeurs : &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;($a, $b) = ma_fonction;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
De même que pour le passage de paramètres, la liste de valeur est une liste &amp;quot;à plat&amp;quot;, ce qui signifie que pour retourner plusieurs tableaux, il faut également passer par les références : &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;($ref_a, $ref_b) = ma_fonction;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;où &amp;lt;tt&amp;gt;$ref_a&amp;lt;/tt&amp;gt; est une référence sur le tableau &amp;lt;tt&amp;gt;@$ref_a&amp;lt;/tt&amp;gt; et où ma_fonction retourne une liste de deux références. &amp;lt;br /&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Pour plus d&#039;information sur les fonctions de Perl, voir &amp;lt;tt&amp;gt;man perlsub&amp;lt;/tt&amp;gt;. &amp;lt;br /&amp;gt;  &amp;lt;br /&amp;gt; &lt;br /&gt;
&lt;br /&gt;
=== Les expressions régulières, ou regex ===&lt;br /&gt;
&lt;br /&gt;
Perl est un langage très pratique pour manipuler du texte. Un des éléments qui le rend si adapté à cet usage est la présence des &#039;&#039;expressions régulières&#039;&#039;, qui permettent de déterminer si une chaîne de caractère correspond à un masque prédéfini, d&#039;extraire des éléments d&#039;une chaîne de caractères suivant un masque, de remplacer des parties d&#039;une chaîne suivant un masque, etc. C&#039;est ce masque, défini sous forme d&#039;une chaîne de caractères, que l&#039;on appelle &#039;&#039;expression régulière&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Par exemple, &amp;lt;tt&amp;gt;$a =~ /lea/&amp;lt;/tt&amp;gt; teste si la chaîne &amp;quot;lea&amp;quot; est dans la chaîne $a, &amp;lt;tt&amp;gt;$a =~ /^lea/&amp;lt;/tt&amp;gt; si $a commence par &amp;quot;lea&amp;quot;, &amp;lt;tt&amp;gt;$a =~ /l[eé]a/&amp;lt;/tt&amp;gt; si la chaîne $a contient &amp;quot;lea&amp;quot; ou &amp;quot;léa&amp;quot;...&lt;br /&gt;
&lt;br /&gt;
De prime abord, ce sont des sortes de formules qui semblent ne rien vouloir dire, mais une fois que nous les maîtrisons, elles se révèlent extrêmement pratiques et puissantes.&lt;br /&gt;
&lt;br /&gt;
==== Les éléments composant une expression régulière ====&lt;br /&gt;
&lt;br /&gt;
Les éléments les plus utilisés sont :&lt;br /&gt;
&lt;br /&gt;
* les caractères standards : majuscules, minuscules, chiffres, etc.&lt;br /&gt;
* les méta-caractères : &lt;br /&gt;
** &amp;lt;tt&amp;gt;. &amp;lt;/tt&amp;gt; : représente un caractère quelconque&lt;br /&gt;
** &amp;lt;tt&amp;gt;^ &amp;lt;/tt&amp;gt; : début de la chaîne&lt;br /&gt;
** &amp;lt;tt&amp;gt;$ &amp;lt;/tt&amp;gt; : fin de la chaîne&lt;br /&gt;
** &amp;lt;tt&amp;gt;()&amp;lt;/tt&amp;gt; : groupement et capture (la chaîne qui correspond au masque présent entre les parenthèses est affectée à la variable $1 pour la première parenthèse, $2 pour la seconde, etc. On peut ensuite utiliser ces variables normalement, notamment dans la substitution, voir plus bas)&lt;br /&gt;
** &amp;lt;tt&amp;gt;(?:)&amp;lt;/tt&amp;gt; : groupement sans capture (pas d&#039;affectation aux variables $1, $2...)&lt;br /&gt;
** &amp;lt;tt&amp;gt;[]&amp;lt;/tt&amp;gt; : classe de caractères (c&#039;est à dire l&#039;un des caractères présent entre les crochets ; on peut de plus spécifier des plages de caractères, par exemple &amp;lt;tt&amp;gt;[a-e]&amp;lt;/tt&amp;gt; correspond à tous les caractères entre a et e ; &amp;lt;tt&amp;gt;[aeiou]&amp;lt;/tt&amp;gt; aux voyelles ; &amp;lt;tt&amp;gt;[aeiou0-9]&amp;lt;/tt&amp;gt; aux voyelles plus aux chiffres...)&lt;br /&gt;
** &amp;lt;tt&amp;gt;| &amp;lt;/tt&amp;gt; : alternance (sorte de ou logique)&lt;br /&gt;
** &amp;lt;tt&amp;gt;\ &amp;lt;/tt&amp;gt; : permet de protéger un caractère réservé (voir ci-dessus) lorsqu&#039;on veut l&#039;utiliser comme caractère standard dans la regex.&lt;br /&gt;
* les caractères spéciaux : &lt;br /&gt;
** &amp;lt;tt&amp;gt;\s&amp;lt;/tt&amp;gt; : représente un espace&lt;br /&gt;
** &amp;lt;tt&amp;gt;\S&amp;lt;/tt&amp;gt; : caractère autre que espace&lt;br /&gt;
** &amp;lt;tt&amp;gt;\n&amp;lt;/tt&amp;gt; : saut de ligne&lt;br /&gt;
** &amp;lt;tt&amp;gt;\r&amp;lt;/tt&amp;gt; : retour chariot (les lignes des fichiers Windows se terminent par \r\n, et par \n sous Unix). Pour faire du code portable, il vaut mieux utiliser &amp;lt;tt&amp;gt;$/&amp;lt;/tt&amp;gt; qui représente la fin de ligne (voir [[#Quelques variables particulières prédéfinies|le paragraphe sur les variables spéciales]]).&lt;br /&gt;
** &amp;lt;tt&amp;gt;\t&amp;lt;/tt&amp;gt; : tabulation&lt;br /&gt;
** &amp;lt;tt&amp;gt;\d&amp;lt;/tt&amp;gt; : un chiffre (=&amp;lt;tt&amp;gt;[0-9]&amp;lt;/tt&amp;gt;)&lt;br /&gt;
** &amp;lt;tt&amp;gt;\w&amp;lt;/tt&amp;gt; : alphanumérique (=&amp;lt;tt&amp;gt;[0-9a-zA-Z_]&amp;lt;/tt&amp;gt; plus les accents, etc. si on précise &amp;lt;tt&amp;gt;use locale;&amp;lt;/tt&amp;gt;)&lt;br /&gt;
** plus de nombreux autres...&lt;br /&gt;
* les quantifieurs (ils suivent un caractère ou un méta-caractère afin d&#039;en représenter le nombre que l&#039;on cherche) : &lt;br /&gt;
** &amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt; : de 0 à n&lt;br /&gt;
** + : de 1 à n&lt;br /&gt;
** ? : 0 ou 1&lt;br /&gt;
** {n} : exactement n&lt;br /&gt;
** {n,} : au moins n&lt;br /&gt;
** {n,m} : entre n et m par défaut, les quantifieurs sont &amp;quot;gourmands&amp;quot;, c&#039;est à dire qu&#039;ils recherchent un maximum de caractères tant que le reste du masque correspond. Afin de rechercher un minimum de caractère, il faut faire suivre le quantifieur de &#039;?&#039;, par exemple &amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;*?&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;{n,}?&amp;lt;/tt&amp;gt;, etc. &lt;br /&gt;
* les assertions de largeur nulle (i.e. ne représentant pas un caractère) &lt;br /&gt;
** \b : correspond à une limite de mot&lt;br /&gt;
** \B : correspond à une non limite de mot (i.e. intérieur !)&lt;br /&gt;
** (?!pattern) : assertion négative en avant. Par exemple, /toto(?!titi)/ teste si la chaîne contient &amp;quot;toto&amp;quot;, non &amp;lt;u&amp;gt;suivi&amp;lt;/u&amp;gt; de &amp;quot;titi&amp;quot;. &lt;br /&gt;
** (?&amp;lt;!pattern) : assertion négative en arrière. Par exemple, /(?&amp;lt;!titi)toto/ teste si la chaîne contient &amp;quot;toto&amp;quot;, non &amp;lt;u&amp;gt;précédé&amp;lt;/u&amp;gt; de &amp;quot;titi&amp;quot;. La largeur de &amp;quot;titi&amp;quot; doit être fixe (i.e. toujours le même nombre de caractères). &lt;br /&gt;
** ...&lt;br /&gt;
&lt;br /&gt;
==== Les différentes utilisations des expressions régulières ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&#039;&#039;&#039;m&#039;&#039;&#039;/regex/&amp;lt;/tt&amp;gt; ou &amp;lt;tt&amp;gt;/regex/&amp;lt;/tt&amp;gt; (sans le &#039;&#039;&#039;m&#039;&#039;&#039;) &#039;&#039;&#039;teste&#039;&#039;&#039; si une chaîne correspond (&#039;&#039;match&#039;&#039;) à une regex donnée. &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&#039;&#039;&#039;s&#039;&#039;&#039;/regex/substitution/&amp;lt;/tt&amp;gt; &#039;&#039;&#039;remplace&#039;&#039;&#039; la partie de la chaîne correspondant à la regex par la substitution.&lt;br /&gt;
&lt;br /&gt;
Pour appliquer un test m// ou une substitution s/// à une chaîne de caractères, on utilise l&#039;opérateur =~ ou !~. &amp;lt;br /&amp;gt;&amp;lt;u&amp;gt;Par exemple&amp;lt;/u&amp;gt; : &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;if ($s &#039;&#039;&#039;=~&#039;&#039;&#039; /win(dows)?/) { kickban(); }&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;teste si la chaîne $s contient &amp;quot;win&amp;quot; ou &amp;quot;windows&amp;quot;. &amp;lt;br /&amp;gt;Si on ne précise pas de chaîne, le test se fait sur la variable par défaut $_ : &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;if (/win(dows)?/) { kickban(); }&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;teste si $_ contient &amp;quot;win&amp;quot; ou &amp;quot;windows&amp;quot;. &amp;lt;br /&amp;gt;L&#039;opérateur &amp;lt;tt&amp;gt;!~&amp;lt;/tt&amp;gt; correspond quant à lui à la négation : &amp;lt;tt&amp;gt;$s !~ /coin/&amp;lt;/tt&amp;gt; teste si la chaîne $s ne contient pas &amp;quot;coin&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===== options =====&lt;br /&gt;
&lt;br /&gt;
Les expressions régulières peuvent de plus être suivies de modifieurs ou options, qui en modifient le comportement, notamment :&lt;br /&gt;
&lt;br /&gt;
* g : recherche globalement, i.e. ne s&#039;arrête pas à la première occurrence.&lt;br /&gt;
* i : recherche insensible à la casse des caractères (i.e. majuscules/minuscules)&lt;br /&gt;
* m : traite la chaîne comme des lignes multiples (lorsqu&#039;elle contient des retours à la ligne). ^ et $ correspondent dans ce cas à un début de ligne et une fin de ligne.&lt;br /&gt;
* s : traite la chaîne comme une seule ligne. Dans ce cas, le méta-caractère &amp;quot;.&amp;quot; peut correspondre à &amp;quot;\n&amp;quot; ce qui n&#039;est pas le cas normalement.&lt;br /&gt;
* x : permet d&#039;insérer des espaces voire des commentaires dans un masque.&lt;br /&gt;
* e : uniquement pour s///, traite la substitution comme du code perl : elle est interprétée par perl avant d&#039;être substituée.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Par exemple&amp;lt;/u&amp;gt; : &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;quot;Bonjour Léa&amp;quot; =~ m/jour/; # correspond&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;quot;Bonjour Léa&amp;quot; =~ m/Jour/; # ne correspond pas&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;quot;Bonjour Léa&amp;quot; =~ m/Jour/i; # correspond&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== groupement et capture =====&lt;br /&gt;
&lt;br /&gt;
Si une partie d&#039;une regex est entre parenthèses, alors la partie de la chaîne qui correspond à cette parenthèse sera affectée à la variable $1 (on dit &amp;quot;capturée&amp;quot;). Si une deuxième parenthèse est présente dans la regex, la variable $2 sera utilisée, et ainsi de suite. Si la parenthèse commence par ?: alors il n&#039;y aura pas d&#039;affectation à une variable $1, $2, etc. &amp;lt;br /&amp;gt;Ainsi : &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;if (/win&#039;&#039;&#039;(?:&#039;&#039;&#039;dows&#039;&#039;&#039;)&#039;&#039;&#039;?\s&#039;&#039;&#039;(&#039;&#039;&#039;..&#039;&#039;&#039;)&#039;&#039;&#039;/i) {&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  if (&#039;&#039;&#039;$1&#039;&#039;&#039; eq &amp;quot;xp&amp;quot;) { kickban(); }&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  else { kick(); }&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;}&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;teste si $_ contient &amp;quot;win&amp;quot; ou &amp;quot;windows&amp;quot;, suivi d&#039;un espace, puis de 2 caractères, que l&#039;on va capturer dans &amp;lt;tt&amp;gt;$1&amp;lt;/tt&amp;gt;. La première parenthèse &amp;lt;tt&amp;gt;(?:dows)&amp;lt;/tt&amp;gt; permet de regrouper les quatre caractères &amp;quot;dows&amp;quot; afin de leur appliquer le quantifieur &#039;?&#039; (0 ou 1).&lt;br /&gt;
&lt;br /&gt;
Les captures $1, $2... peuvent être utilisées lors d&#039;une substitution : &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;$s =~ /win&#039;&#039;&#039;(?:&#039;&#039;&#039;dows&#039;&#039;&#039;)&#039;&#039;&#039;?\s&#039;&#039;&#039;(&#039;&#039;&#039;..&#039;&#039;&#039;)&#039;&#039;&#039;/winblows $1/&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt; &lt;br /&gt;
&lt;br /&gt;
==== Tester si une chaîne correspond à un masque donné : m// ou // ====&lt;br /&gt;
&lt;br /&gt;
Par exemple, pour tester si une chaîne contient le mot &amp;quot;lea&amp;quot; (le &amp;lt;tt&amp;gt;i&amp;lt;/tt&amp;gt; de la fin permet de ne pas différencier majuscules et minuscules) : &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;if (/lea/i) ...&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour tester si une chaîne commence par la lettre &#039;a&#039;, on peut faire : &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;if (/&#039;&#039;&#039;^&#039;&#039;&#039;a/) ...&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour tester si une chaîne se termine par &#039;z&#039; : &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;if (/z&#039;&#039;&#039;$&#039;&#039;&#039;/) ...&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Enfin pour tester si une chaîne contient un quadruplet héxadécimal (i.e. 4 chiffres de 0 à 9 ou A à F) : &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;if (/[0-9A-F]{4}/) ...&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ici, par défaut, c&#039;est la valeur contenu dans &amp;lt;tt&amp;gt;$_&amp;lt;/tt&amp;gt; qui est utilisée pour le test. Et bien entendu, nous pouvons compliquer à loisir l&#039;expression régulière, et utiliser le groupement (voir plus haut) afin de récupérer les valeurs trouvées dans les chaînes pour s&#039;en servir par la suite. &amp;lt;br /&amp;gt; &lt;br /&gt;
&lt;br /&gt;
==== Substituer une partie d&#039;une chaîne à une autre : s/// ====&lt;br /&gt;
&lt;br /&gt;
Rappel : la syntaxe est &amp;lt;tt&amp;gt;s/regex décrivant l&#039;élément à remplacer/élément remplaçant/options&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Exemples&amp;lt;/u&amp;gt; : &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;$variable &#039;&#039;&#039;=~&#039;&#039;&#039; &#039;&#039;&#039;s&#039;&#039;&#039;/a/b/;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;Cette commande va remplacer le premier &#039;a&#039; de la ligne par &#039;b&#039;. Pour remplacer tous les &#039;a&#039; faire : &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;$variable &#039;&#039;&#039;=~&#039;&#039;&#039; &#039;&#039;&#039;s&#039;&#039;&#039;/a/b/&#039;&#039;&#039;g&#039;&#039;&#039;&amp;lt;nowiki&amp;gt;;&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;Si en plus nous voulons que cela ne fasse pas la différence entre les majuscules et les minuscules (&#039;&#039;case sensitive&#039;&#039;), faire &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;$variable &#039;&#039;&#039;=~&#039;&#039;&#039; &#039;&#039;&#039;s&#039;&#039;&#039;/a/b/&#039;&#039;&#039;gi&#039;&#039;&#039;&amp;lt;nowiki&amp;gt;;&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;Pour remplacer tous les ensembles de caractères commençant par &#039;a&#039;, finissant par &#039;e&#039; et avec au moins un caractère au milieu sans être sensitif par &#039;toto&#039;, faire : &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;$variable &#039;&#039;&#039;=~&#039;&#039;&#039; &#039;&#039;&#039;s&#039;&#039;&#039;/a&#039;&#039;&#039;.*&#039;&#039;&#039;e/toto/&#039;&#039;&#039;gi&#039;&#039;&#039;&amp;lt;nowiki&amp;gt;;&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt; &lt;br /&gt;
&lt;br /&gt;
==== La traduction : tr/// ====&lt;br /&gt;
&lt;br /&gt;
Cette construction &amp;quot;à la regex&amp;quot; permet de remplacer des caractères par d&#039;autres dans une chaîne, à la manière de la commande unix &#039;tr&#039;. &amp;lt;br /&amp;gt;La syntaxe est &amp;lt;tt&amp;gt;&#039;&#039;&#039;tr&#039;&#039;&#039;/éléments à traduire/éléments traduits/&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;Ou &amp;lt;tt&amp;gt;&#039;&#039;&#039;y&#039;&#039;&#039;/éléments à traduire/éléments traduits/&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Exemple : &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;$variable &#039;&#039;&#039;=~&#039;&#039;&#039; &#039;&#039;&#039;tr&#039;&#039;&#039;/a-b/A-B/;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;Cela va transformer tous les &#039;a&#039; et &#039;b&#039; minuscules en majuscules.&lt;br /&gt;
&lt;br /&gt;
Plus d&#039;info sur : &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;man perlre&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;man perlretut&amp;lt;/tt&amp;gt; (le tutoriel sur les regex, une bonne lecture !) &amp;lt;br /&amp;gt; &lt;br /&gt;
&lt;br /&gt;
=== Structures de données complexes ===&lt;br /&gt;
&lt;br /&gt;
==== Tableaux et tables de hachage multidimensionnels ====&lt;br /&gt;
&lt;br /&gt;
On a vu plus haut que les tableaux Perl ne possèdent qu&#039;une seule dimension (il ne peuvent contenir que des éléments de type scalaire). On a aussi vu [[#Passage de paramètres|plus haut]] l&#039;existence de références, type scalaire particulier qui permet de se &#039;&#039;référer&#039;&#039; à une variable, donc en l&#039;occurence à un tableau. &amp;lt;br /&amp;gt;Ainsi pour représenter la matrice &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt; 0 1 2&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt; 3 4 5&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt; 6 7 8&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;Nous allons pouvoir faire : &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;@ligne1 = (0, 1, 2);&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;@ligne2 = (3, 4, 5);&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;@ligne3 = (6, 7, 8);&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;@matrice = (&#039;&#039;&#039;\&#039;&#039;&#039;@ligne1, &#039;&#039;&#039;\&#039;&#039;&#039;@ligne2, &#039;&#039;&#039;\&#039;&#039;&#039;@ligne3);&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;Perl introduit une nouvelle notation pour ce faire : au lieu d&#039;entourer la liste avec des parenthèses, nous allons le faire avec des crochets, ce qui aura pour effet de retourner une référence : &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;$ligne1_ref = [0, 1, 2];&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;etc...&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;ou plus simplement : &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;@matrice = (&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt; [0, 1, 2],&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt; [3, 4, 5],&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt; [6, 7, 8],&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;);&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;Dans tous ces cas, @matrice est un tableau de trois éléments, qui sont chacun une référence vers un autre tableau. &amp;lt;tt&amp;gt;$matrice[1]&amp;lt;/tt&amp;gt; est une référence sur la 2&amp;lt;sup&amp;gt;ème&amp;lt;/sup&amp;gt; ligne de la matrice.&lt;br /&gt;
&lt;br /&gt;
Afin d&#039;accéder aux éléments de la matrice, nous pouvons utiliser une nouvelle notation : la flèche &#039;&amp;lt;tt&amp;gt;-&amp;gt;&amp;lt;/tt&amp;gt;&#039;. &amp;lt;br /&amp;gt;En effet, afin d&#039;accéder au 3&amp;lt;sup&amp;gt;ème&amp;lt;/sup&amp;gt; élément de &amp;lt;tt&amp;gt;$ligne1_ref&amp;lt;/tt&amp;gt; définie plus haut, nous utiliserons &amp;lt;tt&amp;gt;$ligne1_ref&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;[2]&amp;lt;/tt&amp;gt; (ce qui est synonyme de &amp;lt;tt&amp;gt;${$ligne1_ref}[2]&amp;lt;/tt&amp;gt;.) &amp;lt;br /&amp;gt;Ainsi, afin d&#039;accéder au &#039;5&#039; dans notre matrice, nous ferons : &amp;lt;tt&amp;gt;$matrice[1]&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;[2]&amp;lt;/tt&amp;gt;. &amp;lt;br /&amp;gt;Mais... Perl est gentil avec nous, car entre deux indices de tableau, la flèche est optionnelle ! Donc nous pouvons écrire : &amp;lt;tt&amp;gt;$matrice[1][2]&amp;lt;/tt&amp;gt;, ce qui ressemble maintenant à un tableau bi-dimensionnel.&lt;br /&gt;
&lt;br /&gt;
De même, si $hash_ref est une référence vers un hachage, &amp;lt;tt&amp;gt;$hash_ref-&amp;gt;{&#039;nom&#039;}&amp;lt;/tt&amp;gt; renverra l&#039;élément du hachage indexé par &#039;nom&#039;.&lt;br /&gt;
&lt;br /&gt;
L&#039;ensemble tableaux, hachages et références peut bien sûr être mixé dans l&#039;ordre qui vous plaira. Par exemple, pour réaliser un tableau de personnes, nous écrirons : &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;@staff = (&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt; [ prenom =&amp;gt; &amp;quot;jice&amp;quot;, nom =&amp;gt; &amp;quot;cardot&amp;quot; ],&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt; [ prenom =&amp;gt; &amp;quot;fred&amp;quot;, nom =&amp;gt; &amp;quot;bonnaud&amp;quot; ],&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt; [ prenom =&amp;gt; &amp;quot;serge&amp;quot;, nom =&amp;gt; &amp;quot;tchesmeli&amp;quot; ],&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;);&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;et pour accéder au prénom de la première personne, nous ferons : &amp;lt;tt&amp;gt;$staff[0]&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;{&#039;prenom&#039;}&amp;lt;/tt&amp;gt;(meuh non je ne suis pas mégalo ;) ou &amp;lt;tt&amp;gt;$staff[0]{&#039;prenom&#039;}&amp;lt;/tt&amp;gt; car ici aussi la flèche est optionnelle.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Notes&amp;lt;/u&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
* pour manipuler les tableaux, les fonctions intéressantes sont notamment : &amp;lt;tt&amp;gt;push&amp;lt;/tt&amp;gt; pour ajouter un élément en fin de tableau, &amp;lt;tt&amp;gt;pop&amp;lt;/tt&amp;gt; pour récupérer le dernier élément et &amp;lt;tt&amp;gt;shift&amp;lt;/tt&amp;gt; pour récupérer le premier élément. &amp;lt;tt&amp;gt;pop&amp;lt;/tt&amp;gt; et &amp;lt;tt&amp;gt;shift&amp;lt;/tt&amp;gt; retournent cet élément, et le suppriment du tableau.&lt;br /&gt;
* en contexte scalaire, évaluer un tableau ou un hachage retourne son nombre d&#039;éléments. Ainsi &amp;lt;tt&amp;gt;$nb_elem = @tableau&amp;lt;/tt&amp;gt; mettra dans &amp;lt;tt&amp;gt;$nb_elem&amp;lt;/tt&amp;gt; le nombre d&#039;éléments de &amp;lt;tt&amp;gt;@tableau&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Les références symboliques ===&lt;br /&gt;
&lt;br /&gt;
On a vu [[#Passage de paramètres|ci-dessus]] une utilisation des références, pour le passage et le retour de valeurs dans les fonctions. On [[#Structures de données complexes|vient de voir]] également leur utilité pour travailler avec des structures de données complexes.&lt;br /&gt;
&lt;br /&gt;
Les références peuvent aussi servir dans un autre contexte : si vous déréférencez une variable contenant une valeur scalaire plutôt qu&#039;un référence vers une autre variable, elle sera considérée comme une référence symbolique, c&#039;est à dire que la valeur scalaire sera utilisée en tant que nom de la variable. &amp;lt;br /&amp;gt;&amp;lt;u&amp;gt;Exemple&amp;lt;/u&amp;gt; : &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;$test = &amp;quot;toto&amp;quot;;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;$$test = 144;     #&amp;lt;/tt&amp;gt; affecte 144 à $toto &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;${$test} = 12;    #&amp;lt;/tt&amp;gt; affecte 12 à $toto &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;$test-&amp;gt;[1] = 12;  #&amp;lt;/tt&amp;gt; affecte 12 à $toto[1] &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;@$test = (1,2,3); #&amp;lt;/tt&amp;gt; affecte le tableau @toto&lt;br /&gt;
&lt;br /&gt;
Cela peut aller beaucoup plus loin, car vous pouvez mettre une chaîne de caractères entre les accolades : &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;${$test x 2} = 12;   #&amp;lt;/tt&amp;gt; affecte 12 à $totototo &amp;lt;br /&amp;gt;$titi = 2; &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;${&amp;quot;$toto$titi&amp;quot;} = 2; #&amp;lt;/tt&amp;gt; affecte 2 à $toto2 &amp;lt;br /&amp;gt;etc.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Remarque&amp;lt;/u&amp;gt; : l&#039;utilisation des références symboliques avec &amp;lt;tt&amp;gt;use strict;&amp;lt;/tt&amp;gt; (tel que préconisé au début de l&#039;article) n&#039;est pas possible. Pour contourner ce problème, il faut appeler l&#039;instruction &amp;lt;tt&amp;gt;no strict &#039;refs&#039;;&amp;lt;/tt&amp;gt; dans le bloc où on veut utiliser les références symboliques.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Autre exemple d&#039;utilisation&amp;lt;/u&amp;gt; : &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;$min = 12;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;$max = 144;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;while (&amp;lt;FICHIER&amp;gt;) {&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  if (/^([A-Z]+)\ (\d+)\ (\d+)\ (\d+)$/) {&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;    #&amp;lt;/tt&amp;gt; les masques ont affecté $1, $2, $3 et $4 (voir [#regex_capture groupement/capture]) &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;    print &amp;quot;$1: &amp;quot;;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;    #&amp;lt;/tt&amp;gt; on va effectuer une même opération sur $2, $3 et $4 : &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;    for $i (2 .. 4) {&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;      no strict &#039;refs&#039;;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;      #&amp;lt;/tt&amp;gt; on utilise les références symboliques : si $i = 2, alors $$i est $2 &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;      if (&#039;&#039;&#039;$$i&#039;&#039;&#039; &amp;gt; $max) print &amp;quot;sup &amp;quot;;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;      elseif (&#039;&#039;&#039;$$i&#039;&#039;&#039; &amp;lt; $min) print &amp;quot;inf &amp;quot;;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;      else print &amp;quot;ok &amp;quot;;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;    }&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  }&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;}&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Manipulation de fichiers ===&lt;br /&gt;
&lt;br /&gt;
Comme toujours en Perl, il y a plusieurs moyens de faire une même opération.&lt;br /&gt;
&lt;br /&gt;
==== Ouverture &amp;quot;à la shell&amp;quot; : ====&lt;br /&gt;
&lt;br /&gt;
Cette façon de faire offrant un moyen simple d&#039;ouvrir un fichier en lecture / écriture est empruntée du shell. &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&#039;&#039;&#039;open&#039;&#039;&#039;(FILE, &amp;quot;&amp;lt; nom du fichier&amp;quot;); &amp;lt;/tt&amp;gt;&amp;lt;nowiki&amp;gt;# ouvre en lecture &amp;lt;/nowiki&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&#039;&#039;&#039;open&#039;&#039;&#039;(FILE, &amp;quot;  nom du fichier&amp;quot;); &amp;lt;/tt&amp;gt;&amp;lt;nowiki&amp;gt;# idem &amp;lt;/nowiki&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&#039;&#039;&#039;open&#039;&#039;&#039;(FILE, &amp;quot;&amp;gt; nom du fichier&#039;); &amp;lt;/tt&amp;gt;&amp;lt;nowiki&amp;gt;# ouvre en écriture &amp;lt;/nowiki&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&#039;&#039;&#039;open&#039;&#039;&#039;(FILE, &amp;quot;&amp;gt;&amp;gt;nom du fichier&#039;); &amp;lt;/tt&amp;gt;&amp;lt;nowiki&amp;gt;# ouvre en ajout &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Remarque : le fichier &amp;quot;moins&amp;quot; correspond à l&#039;entrée standard &#039;&#039;stdin&#039;&#039; en lecture et à la sortie standard &#039;&#039;stdout&#039;&#039; en écriture. Par exemple  &amp;lt;tt&amp;gt;open(SORTIE,&amp;quot;&amp;gt;-&amp;quot;)&amp;lt;/tt&amp;gt; ouvre la sortie standard.&lt;br /&gt;
&lt;br /&gt;
==== Ouverture &amp;quot;à la C&amp;quot; : ====&lt;br /&gt;
&lt;br /&gt;
La fonction &#039;&#039;&#039;&amp;lt;tt&amp;gt;sysopen&amp;lt;/tt&amp;gt;&#039;&#039;&#039; de Perl correspond à l&#039;appel système open(2) du C. Cela permet une plus grande maîtrise sur l&#039;ouverture des fichiers, au prix d&#039;une plus grande complexité. &amp;lt;br /&amp;gt;Synoptique : &amp;lt;tt&amp;gt;sysopen DESCRIPTEUR, CHEMIN, FLAGS, [MASQUE]&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;MASQUE&amp;lt;/tt&amp;gt; correspond au masque octal des permissions du fichier (utile pour la création d&#039;un fichier), combiné avec l&#039;umask du processus perl. voir [../admin/permissions.php3 l&#039;article sur les permissions]. &amp;lt;br /&amp;gt;Je vous renvoie vers un cours de C pour la signification des exemples suivants, et vous donne la correspondance avec l&#039;open &amp;quot;à la shell&amp;quot;. &amp;lt;br /&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;80%&amp;quot; border=&amp;quot;BORDER&amp;quot;&lt;br /&gt;
! à la Shell&lt;br /&gt;
! à la C&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;open(F, &amp;quot;&amp;lt; $chemin&amp;quot;);&amp;lt;/tt&amp;gt;&lt;br /&gt;
| &amp;lt;tt&amp;gt;sysopen(F, $chemin, O_RDONLY);&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;open(F, &amp;quot;&amp;gt; $chemin&amp;quot;);&amp;lt;/tt&amp;gt;&lt;br /&gt;
| &amp;lt;tt&amp;gt;sysopen(F, $chemin, O_WRONLY | O_TRUNC | O_CREAT);&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;open(F, &amp;quot;&amp;gt;&amp;gt; $chemin&amp;quot;);&amp;lt;/tt&amp;gt;&lt;br /&gt;
| &amp;lt;tt&amp;gt;sysopen(F, $chemin, O_WRONLY | O_APPEND | O_CREAT);&amp;lt;/tt&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Bien sûr, sysopen permet de faire plus de choses que le simple open(), en jouant sur les flags ci-dessus et O_RDWR, O_RDONLY, O_EXCL, O_NONBLOCK, O_BINARY. Pour plus d&#039;informations, voir &amp;lt;tt&amp;gt;man perlopentut&amp;lt;/tt&amp;gt; ou &amp;lt;tt&amp;gt;man 2 open&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== Fermer un fichier ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&#039;&#039;&#039;close&#039;&#039;&#039;(FILE);&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;FILE&amp;lt;/tt&amp;gt; étant le descripteur du fichier ouvert.&lt;br /&gt;
&lt;br /&gt;
==== Descripteurs de fichier spéciaux ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;STDIN&amp;lt;/tt&amp;gt; et &amp;lt;tt&amp;gt;STDOUT&amp;lt;/tt&amp;gt; sont définis dès le lancement de votre programme. Ils correspondent respectivement à l&#039;entrée et à la sortie standard. Rien ne vous empêche de les redéfinir, en les ouvrant sur un autre fichier, par exemple : &amp;lt;tt&amp;gt;open(STDIN, &amp;quot;mon_fichier&amp;quot;);&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Lire dans un fichier (l&#039;opérateur diamant) ====&lt;br /&gt;
&lt;br /&gt;
À chaque appel, &amp;lt;tt&amp;gt;&#039;&#039;&#039;&amp;lt;&#039;&#039;&#039;DESCRIPTEUR DE FICHIER&#039;&#039;&#039;&amp;gt;&#039;&#039;&#039;&amp;lt;/tt&amp;gt; (on appelle &#039;&#039;&#039;&amp;lt;tt&amp;gt;&amp;lt;&amp;gt;&amp;lt;/tt&amp;gt;&#039;&#039;&#039; l&#039;opérateur &amp;quot;diamant&amp;quot;) retourne la ligne suivante du fichier (en fait jusqu&#039;à la fin de ligne définie par $/, voir le paragraphe sur les [#var_particulieres variables prédéfinies].), ou renvoie &#039;&#039;faux&#039;&#039; en fin de fichier. &amp;lt;br /&amp;gt;&amp;lt;u&amp;gt;exemple&amp;lt;/u&amp;gt; : &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;open (F, &amp;quot;mon_fichier&amp;quot;);&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;$premiere_ligne = &#039;&#039;&#039;&amp;lt;&#039;&#039;&#039;F&#039;&#039;&#039;&amp;gt;&#039;&#039;&#039;&amp;lt;nowiki&amp;gt;;&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;while (&#039;&#039;&#039;&amp;lt;&#039;&#039;&#039;F&#039;&#039;&#039;&amp;gt;&#039;&#039;&#039;) {&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  ... &amp;lt;/tt&amp;gt;traitement en fonction de $_&amp;lt;tt&amp;gt; ...&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;}&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;close(F);&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;exemple&amp;lt;/u&amp;gt; : pour lire tout un fichier dans une variable : &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;open (F, &amp;quot;mon_fichier&amp;quot;);&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;undef $/;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;$contenu_fichier = &#039;&#039;&#039;&amp;lt;&#039;&#039;&#039;F&#039;&#039;&#039;&amp;gt;&#039;&#039;&#039;&amp;lt;nowiki&amp;gt;;&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;close(F);&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La lecture sur l&#039;entrée standard est extrêmement simplifiée, car &amp;lt;tt&amp;gt;STDIN&amp;lt;/tt&amp;gt; est déjà ouvert, et &amp;lt;tt&amp;gt;&amp;lt;STDIN&amp;gt;&amp;lt;/tt&amp;gt; et &amp;lt;tt&amp;gt;&amp;lt;&amp;gt;&amp;lt;/tt&amp;gt; sont synonymes. Ainsi, il suffit de faire : &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;while (&#039;&#039;&#039;&amp;lt;&amp;gt;&#039;&#039;&#039;) {&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  ... traitement de la ligne en cours ...&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;}&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Écrire dans un fichier ====&lt;br /&gt;
&lt;br /&gt;
Il suffit de spécifier à la commande &amp;lt;tt&amp;gt;print&amp;lt;/tt&amp;gt; ou &amp;lt;tt&amp;gt;printf&amp;lt;/tt&amp;gt; le descripteur de fichier à utiliser. &amp;lt;br /&amp;gt;&amp;lt;u&amp;gt;Exemple&amp;lt;/u&amp;gt; : &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;open(FLOG, &amp;quot;&amp;gt;&amp;gt; fichier.log&amp;quot;);&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;print &#039;&#039;&#039;FLOG&#039;&#039;&#039; &amp;quot;nouveau log\n&amp;quot;;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;close(FLOG);&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt; &lt;br /&gt;
&lt;br /&gt;
== Quelques autres commandes utiles ==&lt;br /&gt;
&lt;br /&gt;
voir &amp;lt;tt&amp;gt;man perlfunc&amp;lt;/tt&amp;gt; pour la liste exhaustive des commandes intégrées de Perl.&lt;br /&gt;
&lt;br /&gt;
=== split ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;split&amp;lt;/tt&amp;gt; correspond en partie à la fonction &amp;lt;tt&amp;gt;cut&amp;lt;/tt&amp;gt; en shell. Elle permet de découper une chaîne de caractères. &amp;lt;br /&amp;gt;Exemple : &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;($variable, @tableau) = &#039;&#039;&#039;split&#039;&#039;&#039; (&amp;quot;:&amp;quot;, &amp;quot;prenom:nom:age:adresse:ville:telephone&amp;quot;);&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;Renvoie &amp;quot;prenom&amp;quot; dans &amp;lt;tt&amp;gt;$variable&amp;lt;/tt&amp;gt; et le reste dans des cases distinctes du tableau &amp;lt;tt&amp;gt;@tableau&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== systeme ou exec ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;exec&amp;lt;/tt&amp;gt; permet de lancer un programme extérieur. &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;system&amp;lt;/tt&amp;gt; de même que &amp;lt;tt&amp;gt;exec&amp;lt;/tt&amp;gt;, mais produit un &#039;&#039;fork&#039;&#039;, processus fils. &amp;lt;br /&amp;gt;Exemple : &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;@args = (&amp;quot;ls&amp;quot;, &amp;quot;-lrt&amp;quot;, &amp;quot;toto*&amp;quot;);&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&#039;&#039;&#039;system&#039;&#039;&#039;(@args);&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;Cela va lancer la commande : &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;ls -lrt toto*&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;Attention, l&#039;utilisation de ces commandes rend votre script beaucoup moins portable ! En général, il y a moyen de tout faire en Perl, il faut éviter de recourir à ces fonctions.&lt;br /&gt;
&lt;br /&gt;
=== chomp ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;chomp&amp;lt;/tt&amp;gt; supprime tous les caractères de fin de ligne d&#039;une chaîne de caractères et renvoie le nombre de caractères supprimés. &amp;lt;br /&amp;gt;Exemple : &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;$nb_car = chomp($chaine);&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;Contrairement à &amp;lt;tt&amp;gt;chop&amp;lt;/tt&amp;gt; qui enlève seulement le dernier caractère de fin de ligne. &amp;lt;br /&amp;gt; &lt;br /&gt;
&lt;br /&gt;
== Exemple d&#039;un script Perl ==&lt;br /&gt;
&lt;br /&gt;
Le [perl_script.pl script] va se lire lui-même et sortir à l&#039;écran son contenu modifié : &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;#!/usr/bin/perl -W&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Fichier script.pl&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&#039;&#039;&#039;use&#039;&#039;&#039; strict &#039;&#039;&#039;qw&#039;&#039;&#039;(subs vars refs);&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&#039;&#039;&#039;my &#039;&#039;&#039;$file = &amp;quot;$0&amp;quot;;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&#039;&#039;&#039;open&#039;&#039;&#039;(FILE, &amp;quot;&amp;lt;$file&amp;quot;);&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;#Lecture du fichier ligne par ligne jusqu&#039;à la fin du fichier.&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&#039;&#039;&#039;while&#039;&#039;&#039; (&amp;lt;FILE&amp;gt;) {&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  #Remplace tous les mots &#039;file&#039; par &#039;fichier&#039;.&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  $_ &#039;&#039;&#039;=~&#039;&#039;&#039; &#039;&#039;&#039;s&#039;&#039;&#039;/file/fichier/&#039;&#039;&#039;ig&#039;&#039;&#039;&amp;lt;nowiki&amp;gt;;&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  #Transforme les lettres minuscules de &#039;a&#039; à &#039;e&#039; en majuscules.&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  $_ &#039;&#039;&#039;=~&#039;&#039;&#039; &#039;&#039;&#039;tr&#039;&#039;&#039;/a-e/A-E/;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  #Affiche le résultat des transformations à l&#039;écran.&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  &#039;&#039;&#039;print&#039;&#039;&#039; $_;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;}&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&#039;&#039;&#039;close&#039;&#039;&#039;(FILE);&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;#Fin script.pl&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;Ce script est totalement inutile mais je crois que cela montre la facilité d&#039;utilisation. &amp;lt;br /&amp;gt;Oui, j&#039;en conviens, en shell cela tiens en une ligne : &amp;lt;tt&amp;gt;&#039;&#039;&#039;cat&#039;&#039;&#039; script.pl | &#039;&#039;&#039;sed&#039;&#039;&#039; -e &#039;s/file/fichier/ig&#039; | &#039;&#039;&#039;sed&#039;&#039;&#039; y/a-e/A-E/&amp;lt;/tt&amp;gt;. Bizarre, cela ressemble au Perl !? ;-)&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Obtenir de l&#039;aide ou en savoir plus ==&lt;br /&gt;
&lt;br /&gt;
=== Sur notre machine ===&lt;br /&gt;
&lt;br /&gt;
Et oui ! Sur notre propre machine il y a plein de sources de documentation sans même le savoir. &amp;lt;br /&amp;gt;La première qui viens à l&#039;esprit &#039;&#039;naturellement&#039;&#039; c&#039;est LE &amp;lt;tt&amp;gt;man&amp;lt;/tt&amp;gt;. &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;man perl&amp;lt;/tt&amp;gt; vous donne quelques généralités, ainsi que la liste de toutes les sections du manuel de perl (&amp;lt;tt&amp;gt;perlsyn&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;perlre&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;perlvar&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;perlop&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;perlfun&amp;lt;/tt&amp;gt;...).&lt;br /&gt;
&lt;br /&gt;
Ensuite, il y a le &amp;lt;tt&amp;gt;man&amp;lt;/tt&amp;gt; propre à Perl, qui est &amp;lt;tt&amp;gt;perldoc&amp;lt;/tt&amp;gt;. Le meilleur moyen de voir comment cela marche, c&#039;est d&#039;essayer : &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;perldoc perldoc&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Bon, l&#039;inconvénient, c&#039;est que tout ceci est en anglais...&lt;br /&gt;
&lt;br /&gt;
=== Sur Internet ===&lt;br /&gt;
&lt;br /&gt;
Sur Internet, nous trouverons plein de sites parlant de Perl. En général, ils parlent des scripts CGI (scripts Perl pour serveur web). Mais néanmoins, il y a&lt;br /&gt;
&lt;br /&gt;
* le [http://www.perl.com site officiel], bien sûr.&lt;br /&gt;
* les groupes (français et anglais) marchent bien : &lt;br /&gt;
** [http://groups.google.com/groups?hl=en&amp;amp;group=fr.comp.lang.perl fr.comp.lang.perl]&lt;br /&gt;
** [http://groups.google.com/groups?hl=en&amp;amp;group=comp.lang.perl comp.lang.perl]&lt;br /&gt;
* les sites des &#039;&#039;mongueurs&#039;&#039; Perl, suivez mon regard ! ;-) &lt;br /&gt;
** &amp;lt;u&amp;gt;Note de Jice&amp;lt;/u&amp;gt; : je me dois de citer les deux sites suivants, vu que le regard de Jonesy est sur moi ;)&lt;br /&gt;
** les [http://paris.mongueurs.net Paris Perl Mongueurs],&lt;br /&gt;
** et les [http://www.mongueurs.net Mongueurs de Perl] qui fédèrent les groupes locaux (Paris, Lyon, Toulouse...).&lt;br /&gt;
* la [http://perl.enstimac.fr/ traduction] de la documentation en français.&lt;br /&gt;
* une [http://perl.developpez.com/faq/ faq] sur developpez.com, visiter aussi le [http://www.developpez.net/forums/viewforum.php?f=83 forum] .&lt;br /&gt;
* et enfin, l&#039;intarissable source, [http://www.google.com Google] ! ;-)&lt;br /&gt;
&lt;br /&gt;
Sinon, si on a les moyens les livres O&#039;Reilly sur Perl sont très bien écrits et sont la référence en la matière. &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Le mot de la fin ==&lt;br /&gt;
&lt;br /&gt;
Surtout n&#039;hésitez pas à m&#039;envoyer vos remarques, vos corrections et vos idées, merci.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;b&amp;gt;[[Dev-index|@ Retour à la rubrique Développement]]&amp;lt;/b&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;merci&amp;quot;&amp;gt;Cette page est issue de la documentation &#039;pré-wiki&#039; de Léa a été convertie avec HTML::WikiConverter. Elle fut créée par Jonesy, Jice le 03/04/2002.&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Copyright =&lt;br /&gt;
Copyright &amp;amp;copy; 03/04/2002, Jonesy, Jice&lt;br /&gt;
{{CC-BY-NC-SA}}&lt;/div&gt;</summary>
		<author><name>LeaJice</name></author>
	</entry>
	<entry>
		<id>https://lea-linux.org/docs/index.php?title=Perl&amp;diff=31330</id>
		<title>Perl</title>
		<link rel="alternate" type="text/html" href="https://lea-linux.org/docs/index.php?title=Perl&amp;diff=31330"/>
		<updated>2013-08-28T08:53:44Z</updated>

		<summary type="html">&lt;p&gt;LeaJice : /* Les éléments composant une expression régulière */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Catégorie:Développement]]&lt;br /&gt;
&lt;br /&gt;
= Perl =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;leatitre&amp;quot;&amp;gt;Perl&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;leapar&amp;quot;&amp;gt;par Jice et [mailto:jonesy_at_wanadoo_point_fr Jonesy]&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;leadesc&amp;quot;&amp;gt;Installation et introduction à Perl.&amp;lt;/div&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Avant propos ==&lt;br /&gt;
&lt;br /&gt;
Ceci n&#039;est qu&#039;une introduction au Perl, car nous pourrions écrire 4 ou 5 livres, voir plus, sur ce sujet ! ;-) Donc ne vous attendez pas à faire le tour de la question... &amp;lt;br /&amp;gt;Et je précise aussi, que ce n&#039;est pas non plus un cours de programmation : cet article s&#039;adresse à des personnes possédant des bases de programmation et voulant se mettre à Perl.&lt;br /&gt;
&lt;br /&gt;
== Présentation ==&lt;br /&gt;
&lt;br /&gt;
Perl est un langage de programmation extrêmement efficace pour traiter les fichiers et les chaînes de caractères. Venant du monde Unix, il intègre toutes les fonctions que l&#039;on peut retrouver en shell avec des commandes comme grep, sed, awk, ... Sa syntaxe générale ressemble beaucoup à celle du C et du shell. De plus, il est très apprécié des administrateurs système afin de gérer les fichiers de log.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Note de Jice&amp;lt;/u&amp;gt; : Perl est un langage très polyvalent. LE jeu, j&#039;ai nommé [http://www.frozen-bubble.org Frozen Bubble], est même programmé en Perl !&lt;br /&gt;
&lt;br /&gt;
=== Les particularités de Perl ===&lt;br /&gt;
&lt;br /&gt;
* C&#039;est un langage compilé et interprété. C&#039;est à dire que l&#039;on écrit le script, un simple fichier texte, puis à chaque fois que nous exécutons le script, l&#039;interpréteur compile le code à la volée sous une forme intermédiaire et exécute les commandes. &amp;lt;br /&amp;gt;On pourrait ainsi croire qu&#039;un script Perl est moins performant qu&#039;un programme C compilé, mais il s&#039;avère souvent plus performant et plus facile de faire un programme en Perl qu&#039;en C.&lt;br /&gt;
* Ce langage est disponible sur quasiment toutes les plates-formes et tous les systèmes possibles, Linux, Unices, Mac OS... Donc nos scripts Perl fonctionneront sur toutes ces machines sans aucune adaptation (à moins d&#039;utilisation de spécificités d&#039;un système d&#039;exploitation). Ce qui rend Perl disponible sur autant de systèmes, c&#039;est ses licences. Perl est Libre et est sous la licence GPL ou Artistic au choix.&lt;br /&gt;
* Perl est un langage qui permet la programmation &#039;&#039;orientée objet&#039;&#039;. Cet aspect du langage dépasse largement le cadre de cet article.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== L&#039;installation ==&lt;br /&gt;
&lt;br /&gt;
Dans cette partie, je n&#039;aborde que l&#039;installation de Perl sur un système Linux, et ce quelle que soit la distribution. Enfin, j&#039;espère... ;-) &amp;lt;br /&amp;gt; &lt;br /&gt;
&lt;br /&gt;
=== Vérifions si Perl est présent ===&lt;br /&gt;
&lt;br /&gt;
Il y a des chances pour que Perl soit déjà installé avec notre distribution ou que celle-ci fournisse un package Perl. Pour vérifier si Perl est déjà sur notre système faisons, en console : &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;perl -v&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;Ceci doit nous retourner un message du genre: &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;This is perl, v5.6.1 built for i386-linux&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;Copyright 1987-2001, Larry Wall&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;Perl may be copied only under the terms of either the Artistic licence or the GNU General Public licence, which may be found in the Perl 5 source kit.&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;Complete documentation for Perl, including FAQ lists, should be found on this system using `man perl&#039; or `perldoc perl&#039;. If you have access to the Internet, point your browser at http://www.perl.com/, the Perl Home Page.&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Si c&#039;est le cas, nous pouvons sauter le paragraphe suivant.&lt;br /&gt;
&lt;br /&gt;
=== Installation de Perl ===&lt;br /&gt;
&lt;br /&gt;
Pas de chance... Donc allons voir si notre distribution fournit un package et si oui, installons-le. Sinon... &amp;lt;br /&amp;gt;Les binaires sont accessibles ici : &amp;lt;tt&amp;gt;[http://www.activestate.com/Products/Download/Get.plex?id=ActivePerl&amp;amp;_x=1 http://www.activestate.com/Products/Download/Get.plex?id=ActivePerl&amp;amp;_x=1]&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;Note : je viens de remarquer que maintenant il demande e-mail, prénom et nom pour télécharger Perl. &amp;lt;br /&amp;gt;Les sources sont accessibles ici : &amp;lt;tt&amp;gt;http://www.perl.com/pub/a/langage/info/software.html#sourcecode&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Maintenant détarons le package &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;tar -xvzf &amp;lt;votre package&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;Allons sous le répertoire créé.&lt;br /&gt;
&lt;br /&gt;
Si nous souhaitons choisir nos paramètres en répondant à des questions : &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;./Configure -Dprefix=/usr&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;make&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;En root (&amp;lt;tt&amp;gt;su&amp;lt;/tt&amp;gt;) &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;make install&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sinon, pour une installation par défaut : &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;./Configure -Dprefix=/usr -d -e&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;make&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;En root (&amp;lt;tt&amp;gt;su&amp;lt;/tt&amp;gt;) &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;make install&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vérifions que Perl est bien installé &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;perl -v&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Introduction au langage Perl ==&lt;br /&gt;
&lt;br /&gt;
=== Les principales règles du Perl ===&lt;br /&gt;
&lt;br /&gt;
* Les lignes de code se terminent par un point virgule.&lt;br /&gt;
* Les noms de variables doivent être précédés par un caractère pour les identifier : &lt;br /&gt;
** une variable scalaire (nombre, chaîne de caractères...) est identifié par le symbole &#039;&amp;lt;tt&amp;gt;$&amp;lt;/tt&amp;gt;&#039;, par exemple &amp;lt;tt&amp;gt;$chaine&amp;lt;/tt&amp;gt;,&lt;br /&gt;
** un tableau par le symbole &#039;&amp;lt;tt&amp;gt;@&amp;lt;/tt&amp;gt;&#039;, par exemple &amp;lt;tt&amp;gt;@tableau&amp;lt;/tt&amp;gt;, et &amp;lt;tt&amp;gt;$tableau[12]&amp;lt;/tt&amp;gt; représente l&#039;élément n° 12. Un tableau est toujours unidimensionnel, c&#039;est pourquoi on parle aussi de liste (voir plus bas pour les&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt; [#structurescomplexes tableaux multidimensionnels])&amp;lt;/font&amp;gt;. Afin de définir un tableau, on écrit : &amp;lt;tt&amp;gt;@tableau = (val1, val2, ... , valn);&amp;lt;/tt&amp;gt;&lt;br /&gt;
** un &#039;&#039;hachage&#039;&#039; (&#039;&#039;hash&#039;&#039; en anglais) est identifié par le symbole &#039;&amp;lt;tt&amp;gt;%&amp;lt;/tt&amp;gt;&#039;, par exemple &amp;lt;tt&amp;gt;%hash&amp;lt;/tt&amp;gt;. Un hachage une structure indexée par des chaînes de caractères. &amp;lt;tt&amp;gt;$hash{&#039;prenom&#039;}&amp;lt;/tt&amp;gt; et &amp;lt;tt&amp;gt;$hash{&#039;nom&#039;}&amp;lt;/tt&amp;gt; serviront à enregistrer le prénom et le nom de quelqu&#039;un de façon explicite. Un hachage est défini de la manière suivante : &amp;lt;tt&amp;gt;%hash = ( prenom =&amp;gt; &#039;jice&#039;, nom =&amp;gt; &#039;cardot&#039; );&amp;lt;/tt&amp;gt;&lt;br /&gt;
* La déclaration des variables est non typée. C&#039;est à dire que nous n&#039;avons pas besoin de dire si cette variable va contenir une chaîne de caractère ou un entier. D&#039;ailleurs, une même variable pourrait contenir à un moment un entier et à un autre une chaîne, mais ce n&#039;est pas conseillé pour la relecture du code.&lt;br /&gt;
* Il y a deux sortes de chaînes de caractères. La chaîne de caractère définie entre simples cotes (&#039;) n&#039;est pas interpolée. La chaîne de caractères définie entre guillemets (&amp;quot;) est interpolée. Lorsque le Perl interprète une chaîne, il va regarder le contenu de celle-ci pour remplacer les variables qu&#039;il trouvera par leurs valeurs. &amp;lt;br /&amp;gt;&amp;lt;u&amp;gt;Notation&amp;lt;/u&amp;gt; : &amp;lt;tt&amp;gt;q(chaîne)&amp;lt;/tt&amp;gt; est synonyme de &amp;lt;tt&amp;gt;&#039;chaîne&#039;&amp;lt;/tt&amp;gt; et &amp;lt;tt&amp;gt;qq(chaîne)&amp;lt;/tt&amp;gt; de &amp;lt;tt&amp;gt;&amp;quot;chaîne&amp;quot;&amp;lt;/tt&amp;gt;. Remarquons que les parenthèses dans cette notation peuvent être remplacées par tout autre caractère, comme par exemple &amp;lt;tt&amp;gt;qq|chaîne|&amp;lt;/tt&amp;gt; ou &amp;lt;tt&amp;gt;qq!chaîne!&amp;lt;/tt&amp;gt;.&lt;br /&gt;
* La déclaration des variables n&#039;est pas obligatoire. Il y a une commande pour nous obliger à déclarer les variables et d&#039;autres choses. &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&#039;&#039;&#039;use&#039;&#039;&#039; strict;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;Je conseille très fortement d&#039;utiliser ceci, afin d&#039;écrire un code source plus propre et lisible. En effet, cette directive impose de déclarer les variables, et interdit certaines constructions dangereuses... Ceci facilite la recherche d&#039;erreurs, et le débutant prend ainsi dès le début de bonnes habitudes de programmation.&lt;br /&gt;
* Un &#039;&#039;&#039;bloc&#039;&#039;&#039; est une suite d&#039;instructions, séparées par des points virgules, et entourée d&#039;accolades. Par exemple : &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;{&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;    $toto = 12;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;    print $toto;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;}&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;est un bloc.&lt;br /&gt;
&lt;br /&gt;
=== Définir l&#039;interpréteur ===&lt;br /&gt;
&lt;br /&gt;
Le fait de définir l&#039;interpréteur dans le script permet de l&#039;exécuter directement. Pour ce faire il faut placer la ligne suivante au tout début du script : &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;#!/usr/bin/perl&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;Ce qui permettra d&#039;exécuter le script directement par : &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;./script.pl&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;Sans cette ligne il faudrait exécuter le script comme ceci : &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&#039;&#039;&#039;perl&#039;&#039;&#039; script.pl&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;En ajoutant l&#039;option &amp;lt;tt&amp;gt;-W&amp;lt;/tt&amp;gt;, nous obtenons la liste des toutes les erreurs et de tous les avertissements lors de l&#039;interprétation du script. &amp;lt;br /&amp;gt; &lt;br /&gt;
&lt;br /&gt;
=== Les commentaires ===&lt;br /&gt;
&lt;br /&gt;
Un commentaire débute par un caractère dièse (#). Tout ce qui suit ce caractère jusqu&#039;à la fin de la ligne sera considéré comme du commentaire. &amp;lt;br /&amp;gt;Par exemple : &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Ceci est un exemple de commentaire&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;print &amp;quot;test&amp;quot;; # un 2ème commentaire&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt; &lt;br /&gt;
&lt;br /&gt;
=== Utiliser une libraire particulière ===&lt;br /&gt;
&lt;br /&gt;
L&#039;extension des fichiers librairies (ou module) est &amp;lt;tt&amp;gt;pm&amp;lt;/tt&amp;gt;. &amp;lt;tt&amp;gt;pm&amp;lt;/tt&amp;gt; signifie Perl Module. &amp;lt;br /&amp;gt;Pour appeler une librairie, on ajoute la directive : &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&#039;&#039;&#039;use&#039;&#039;&#039; la_librairie;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;Pour indiquer à perl où chercher nos librairies personnelles, on utilise la directive : &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&#039;&#039;&#039;use&#039;&#039;&#039; &#039;&#039;&#039;lib&#039;&#039;&#039; &amp;quot;le chemin d&#039;accès&amp;quot;;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Remarque&amp;lt;/u&amp;gt; : les chemins de recherche des librairies sont définis dans le tableau &amp;lt;tt&amp;gt;@INC&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Déclarer une variable ===&lt;br /&gt;
&lt;br /&gt;
==== Variable globale : ====&lt;br /&gt;
&lt;br /&gt;
Cela se fait automatiquement lors de la première utilisation de la variable. Cependant, lorsqu&#039;on utilise &amp;lt;tt&amp;gt;use strict&amp;lt;/tt&amp;gt;, il faut déclarer les variables globales par la directive suivante : &amp;lt;tt&amp;gt;&#039;&#039;&#039;use vars qw(&#039;&#039;&#039;$var1 $var2 @tab1 %hash1&#039;&#039;&#039;);&#039;&#039;&#039;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Remarque&amp;lt;/u&amp;gt; : le mot clef &amp;lt;tt&amp;gt;local&amp;lt;/tt&amp;gt; s&#039;applique à une variable globale (&amp;lt;tt&amp;gt;&#039;&#039;&#039;local &#039;&#039;&#039;$variable;&amp;lt;/tt&amp;gt;). Il permet à l&#039;intérieur d&#039;un bloc de cacher une variable globale par une autre valeur. La variable reste globale, c&#039;est à dire que dans les procédures appelées dans le bloc, la nouvelle valeur est utilisée ; à la fin du bloc, l&#039;ancienne valeur est restaurée.&lt;br /&gt;
&lt;br /&gt;
==== Variable lexicale : ====&lt;br /&gt;
&lt;br /&gt;
Une variable lexicale n&#039;existe qu&#039;à l&#039;intérieur d&#039;un bloc. On parle aussi de variable locale. &amp;lt;br /&amp;gt;On la déclare par &amp;lt;tt&amp;gt;&#039;&#039;&#039;my&#039;&#039;&#039; $variable&amp;lt;/tt&amp;gt; ou &amp;lt;tt&amp;gt;&#039;&#039;&#039;my&#039;&#039;&#039; @tableau&amp;lt;/tt&amp;gt;...&lt;br /&gt;
&lt;br /&gt;
Pour déclarer plusieurs variables et un tableau en une seule commande, faire : &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&#039;&#039;&#039;my &#039;&#039;&#039;($var1, $var2, @tab);&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt; &lt;br /&gt;
&lt;br /&gt;
=== Les opérateurs ===&lt;br /&gt;
&lt;br /&gt;
Voici les opérateurs les plus couramment utilisés. Pour plus d&#039;info sur les opérateurs : &amp;lt;tt&amp;gt;man perlop&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Opérateurs unaires ====&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|- valign=&amp;quot;TOP&amp;quot;&lt;br /&gt;
| &amp;lt;tt&amp;gt;!&amp;lt;/tt&amp;gt;&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;: négation logique. Si &amp;lt;/nowiki&amp;gt;&amp;lt;tt&amp;gt;$a&amp;lt;/tt&amp;gt; vaut vrai, &amp;lt;tt&amp;gt;!$a&amp;lt;/tt&amp;gt; vaudra faux.&lt;br /&gt;
|- valign=&amp;quot;TOP&amp;quot;&lt;br /&gt;
| &amp;lt;tt&amp;gt;-&amp;lt;/tt&amp;gt;&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;: négation arithmétique. Si &amp;lt;/nowiki&amp;gt;&amp;lt;tt&amp;gt;$a&amp;lt;/tt&amp;gt; vaut 2, &amp;lt;tt&amp;gt;-$a&amp;lt;/tt&amp;gt; vaudra -2.&lt;br /&gt;
|- valign=&amp;quot;TOP&amp;quot;&lt;br /&gt;
| &amp;lt;tt&amp;gt;~&amp;lt;/tt&amp;gt;&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;: négation binaire ou complément à 1.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;TOP&amp;quot;&lt;br /&gt;
| &amp;lt;tt&amp;gt;++&amp;lt;/tt&amp;gt;&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;: incrémentation ; si ++ est placé avant la variable, l&#039;interpréteur l&#039;incrémente avant de retourner la valeur, si ++ est placé après, il retourne la valeur puis l&#039;incrémente. Exemple : &amp;lt;/nowiki&amp;gt;&amp;lt;tt&amp;gt;[http://paris.mongueurs.net/aplusplus.html $A++]&amp;lt;/tt&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;TOP&amp;quot;&lt;br /&gt;
| &amp;lt;tt&amp;gt;--&amp;lt;/tt&amp;gt;&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;: décrémentation ; idem.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Opérateurs binaires ====&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|- valign=&amp;quot;TOP&amp;quot;&lt;br /&gt;
| &amp;lt;tt&amp;gt;+ - * / % **&amp;lt;/tt&amp;gt;&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;: opérations arithmétiques (% est le modulo, ** est l&#039;exponentiation).&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;TOP&amp;quot;&lt;br /&gt;
| &amp;lt;tt&amp;gt;.&amp;lt;/tt&amp;gt;&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;: concatène deux chaînes : &amp;lt;/nowiki&amp;gt;&amp;lt;tt&amp;gt;&amp;quot;aze&amp;quot;.&amp;quot;rty&amp;quot;&amp;lt;/tt&amp;gt; vaut &amp;lt;tt&amp;gt;&amp;quot;azerty&amp;quot;&amp;lt;/tt&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;x&amp;lt;/tt&amp;gt;&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;: &amp;quot;multiplie&amp;quot; une chaîne : &amp;lt;/nowiki&amp;gt;&amp;lt;tt&amp;gt;&amp;quot;to&amp;quot; x 2&amp;lt;/tt&amp;gt; vaut &amp;lt;tt&amp;gt;&amp;quot;toto&amp;quot;&amp;lt;/tt&amp;gt;.&lt;br /&gt;
|- valign=&amp;quot;TOP&amp;quot;&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;amp;#x26; &amp;amp;#x7C; ^ &amp;lt;&amp;lt; &amp;gt;&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;: opérations sur les bits : et, ou, ou exclusif (&amp;lt;/nowiki&amp;gt;&#039;&#039;xor&#039;&#039;), décalage à gauche, à droite.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;amp;&amp;amp; &amp;lt;nowiki&amp;gt;||&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;: et logique, ou logique.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Opérateur ternaire ====&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|- valign=&amp;quot;TOP&amp;quot;&lt;br /&gt;
| &amp;lt;tt&amp;gt;?: &amp;lt;/tt&amp;gt;&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;: cet opérateur particulier est nommé &amp;quot;opérateur conditionnel&amp;quot;. Il fonctionne à la manière d&#039;un &amp;lt;/nowiki&amp;gt;&#039;&#039;si alors sinon&#039;&#039;. Si l&#039;expression à gauche du ? est vraie, l&#039;argument avant le : est retourné, sinon l&#039;argument après le : est retourné. Mieux vaut un exemple : &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;print (($n&amp;gt;1)?&#039;s&#039;:&#039;&#039;);&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;affichera &amp;lt;tt&amp;gt;&#039;s&#039;&amp;lt;/tt&amp;gt; si &amp;lt;tt&amp;gt;$n&amp;lt;/tt&amp;gt; est plus grand que 1, et n&#039;affichera rien (&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;&#039;&#039;&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;) sinon.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Opérateurs de comparaison numériques ====&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|- valign=&amp;quot;TOP&amp;quot;&lt;br /&gt;
| &amp;lt; &amp;lt;= &amp;gt; &amp;gt;=&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;: plus petit, plus petit ou égal, plus grand, plus grand ou égal&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;TOP&amp;quot;&lt;br /&gt;
| &amp;lt;tt&amp;gt;== !=&amp;lt;/tt&amp;gt;&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;: égal, différent&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Opérateurs de comparaison pour les chaînes de caractères ====&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|- valign=&amp;quot;TOP&amp;quot;&lt;br /&gt;
| &amp;lt;tt&amp;gt;lt le gt ge&amp;lt;/tt&amp;gt;&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;: plus petit, plus petit ou égal, plus grand, plus grand ou égal&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;TOP&amp;quot;&lt;br /&gt;
| &amp;lt;tt&amp;gt;eq ne&amp;lt;/tt&amp;gt;&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;: égal, différent&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;=~ !~&amp;lt;/tt&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;nowiki&amp;gt;: teste si une chaîne de caractères correspond à une expression régulière. Voir le paragraphe &amp;lt;/nowiki&amp;gt;[#expressions_regulieres expressions régulières].&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== L&#039;affectation d&#039;une variable ===&lt;br /&gt;
&lt;br /&gt;
L&#039;opérateur d&#039;affectation &amp;quot;normal&amp;quot; est &#039;&amp;lt;tt&amp;gt;=&amp;lt;/tt&amp;gt;&#039;. Par exemple : &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;$variable &#039;&#039;&#039;=&#039;&#039;&#039; mavaleur;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;affecte la valeur &amp;lt;tt&amp;gt;mavaleur&amp;lt;/tt&amp;gt; à la variable &amp;lt;tt&amp;gt;$variable&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
D&#039;autres opérateurs d&#039;affectation sont un raccourci pour les opérations binaires. &amp;lt;br /&amp;gt;Par exemple &amp;lt;tt&amp;gt;$a &#039;&#039;&#039;+=&#039;&#039;&#039; 2&amp;lt;/tt&amp;gt; est un raccourci pour &amp;lt;tt&amp;gt;$a = $a &#039;&#039;&#039;+&#039;&#039;&#039; 2&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Les opérateurs d&#039;affectation les plus couramment utilisés sont :&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|- valign=&amp;quot;TOP&amp;quot;&lt;br /&gt;
| &amp;lt;tt&amp;gt;  =&amp;lt;/tt&amp;gt;&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;: affectation &amp;quot;standard&amp;quot;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;TOP&amp;quot;&lt;br /&gt;
| &amp;lt;tt&amp;gt; +=  -=  *=  /=   %=&amp;lt;/tt&amp;gt;&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;: pour les opérations arithmétiques (+, -, *, / et modulo)&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;&amp;amp;&amp;amp;= ||=  !=&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;: pour les opérations logiques (et logique, ou logique, non logique)&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt; &amp;amp;=  |=  ^=  ~=  &amp;lt;&amp;lt;=  &amp;gt;&amp;gt;=&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;: pour les opérations logiques sur les bits (et, ou, ou exclusif, complément à 1, décalages gauche et droite)&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt; .=&amp;lt;/tt&amp;gt;&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;: pour les opérations sur les chaînes de caractères (concaténation)&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt; =~  !~&amp;lt;/tt&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;nowiki&amp;gt;: pour les expressions régulières (voir &amp;lt;/nowiki&amp;gt;[[#Les expressions régulières, ou regex|plus bas]]).&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Quelques variables particulières prédéfinies ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;use English;&amp;lt;/tt&amp;gt; permet d&#039;utiliser les noms des variables au lieu des noms standards des variables spéciales (ex : &amp;lt;tt&amp;gt;$ARG&amp;lt;/tt&amp;gt; au lieu de &amp;lt;tt&amp;gt;$_&amp;lt;/tt&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;@_&amp;lt;/tt&amp;gt; ou &amp;lt;tt&amp;gt;@ARG&amp;lt;/tt&amp;gt; : Tableau d&#039;arguments. Sert pour le passage de paramètres. &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;$_&amp;lt;/tt&amp;gt; ou &amp;lt;tt&amp;gt;$ARG&amp;lt;/tt&amp;gt; : Variable par défaut des fonctions unaires entrées/sorties, recherche... &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;$/&amp;lt;/tt&amp;gt; ou &amp;lt;tt&amp;gt;$RS&amp;lt;/tt&amp;gt; ou &amp;lt;tt&amp;gt;$INPUT_RECORD_SEPARATOR&amp;lt;/tt&amp;gt; : fin de ligne lorsqu&#039;on lit un fichier, &amp;lt;tt&amp;gt;\n&amp;lt;/tt&amp;gt; par défaut sous unix et &amp;lt;tt&amp;gt;\r\n&amp;lt;/tt&amp;gt; sous windows. &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;$!&amp;lt;/tt&amp;gt; ou &amp;lt;tt&amp;gt;$ERRNO&amp;lt;/tt&amp;gt; : suivant le contexte d&#039;utilisation, retourne le numéro de la dernière erreur système, ou le message d&#039;erreur système. &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;$0&amp;lt;/tt&amp;gt; ou &amp;lt;tt&amp;gt;$PROGRAM_NAME&amp;lt;/tt&amp;gt; : Nom du fichier qui contient le script Perl. &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;$^0&amp;lt;/tt&amp;gt; ou &amp;lt;tt&amp;gt;$OSNAME&amp;lt;/tt&amp;gt; : Nom du système d&#039;exploitation. &amp;lt;br /&amp;gt;Utiliser une variable d&#039;environnement &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;$variable = $ENV{&amp;quot;nom de la variable d&#039;environnement&amp;quot;};&amp;lt;/tt&amp;gt; Remarque, ce n&#039;est que l&#039;utilisation du &#039;&#039;hachage&#039;&#039; &amp;lt;tt&amp;gt;%ENV&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Pour plus d&#039;information sur ces variables : &amp;lt;tt&amp;gt;man perlvar&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt; &lt;br /&gt;
&lt;br /&gt;
=== Branchements conditionnels ===&lt;br /&gt;
&lt;br /&gt;
Ce test classique peut s&#039;écrire de la manière suivante : &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&#039;&#039;&#039;if&#039;&#039;&#039; (test) {bloc}&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&#039;&#039;&#039;if&#039;&#039;&#039; (test) {bloc} &#039;&#039;&#039;else&#039;&#039;&#039; {bloc}&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&#039;&#039;&#039;if&#039;&#039;&#039; (test) {bloc} &#039;&#039;&#039;elsif&#039;&#039;&#039; (test) {bloc} ... &#039;&#039;&#039;else&#039;&#039;&#039; {bloc}&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;test&amp;lt;/tt&amp;gt; étant toute expression qui retourne une valeur. &amp;lt;br /&amp;gt;&amp;lt;u&amp;gt;exemple&amp;lt;/u&amp;gt; : &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;if (!open(F,$FICHIER)) { die &amp;quot;impossible d&#039;ouvrir $FICHIER: $!&amp;quot;; }&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il y a d&#039;autres manières de faire la même chose, vous pouvez utiliser par exemple : &amp;lt;br /&amp;gt; &lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|- valign=&amp;quot;TOP&amp;quot;&lt;br /&gt;
| &amp;lt;tt&amp;gt;instruction &#039;&#039;&#039;if&#039;&#039;&#039; test;&amp;lt;/tt&amp;gt;&lt;br /&gt;
| exécute l&#039;instruction si le test est vrai. &amp;lt;br /&amp;gt;&amp;lt;u&amp;gt;exemple&amp;lt;/u&amp;gt; : &amp;lt;tt&amp;gt;die &amp;quot;impossible d&#039;ouvrir $FICHIER: $!&amp;quot; &#039;&#039;&#039;if&#039;&#039;&#039; !open(F,$FICHIER);&amp;lt;/tt&amp;gt;&lt;br /&gt;
|- valign=&amp;quot;TOP&amp;quot;&lt;br /&gt;
| &amp;lt;tt&amp;gt;instruction &#039;&#039;&#039;unless&#039;&#039;&#039; test;&amp;lt;/tt&amp;gt;&lt;br /&gt;
| exécute l&#039;instruction si le test est faux. &amp;lt;br /&amp;gt;&amp;lt;u&amp;gt;exemple&amp;lt;/u&amp;gt; : &amp;lt;tt&amp;gt;die &amp;quot;impossible d&#039;ouvrir $FICHIER: $!&amp;quot; &#039;&#039;&#039;unless&#039;&#039;&#039; open(F,$FICHIER);&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;commande1 &#039;&#039;&#039;or&#039;&#039;&#039; commande2;&amp;lt;/tt&amp;gt;&lt;br /&gt;
| exécute la commande1 ; si elle retourne faux, alors la commande2 sera exécutée. Sinon on passe à la suite. &amp;lt;br /&amp;gt;&amp;lt;u&amp;gt;exemple&amp;lt;/u&amp;gt; : &amp;lt;tt&amp;gt;open(F,$FICHIER) &#039;&#039;&#039;or&#039;&#039;&#039; die &amp;quot;impossible d&#039;ouvrir $FICHIER: $!&amp;quot;;&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;test&#039;&#039;&#039;?&#039;&#039;&#039;commande1&#039;&#039;&#039;&amp;lt;nowiki&amp;gt;:&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;commande2;&amp;lt;/tt&amp;gt;&lt;br /&gt;
| exécute la commande1 si la condition du test est remplie, sinon il exécute la commande2.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Note&amp;lt;/u&amp;gt; : Pour ceux qui connaissent, il n&#039;y a pas d&#039;équivalent au &#039;&amp;lt;tt&amp;gt;case&amp;lt;/tt&amp;gt;&#039; ou &#039;&amp;lt;tt&amp;gt;switch&amp;lt;/tt&amp;gt;&#039;. Il y a plusieurs façons de faire, notamment utiliser &amp;lt;tt&amp;gt;if elsif ... else&amp;lt;/tt&amp;gt;. &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;man perlsyn&amp;lt;/tt&amp;gt; vous donnera plus d&#039;informations. &amp;lt;br /&amp;gt; &lt;br /&gt;
&lt;br /&gt;
=== Les boucles ===&lt;br /&gt;
&lt;br /&gt;
==== For et foreach ====&lt;br /&gt;
&lt;br /&gt;
Il y a deux types de boucles for, le for &#039;style C&#039;, et le for/foreach Perl.&lt;br /&gt;
&lt;br /&gt;
===== for/foreach Perl =====&lt;br /&gt;
&lt;br /&gt;
Dans ce cas, for et foreach sont synonymes. On peut utiliser l&#039;un ou l&#039;autre pour améliorer la lecture, par habitude, etc.&lt;br /&gt;
&lt;br /&gt;
Pour aller de 1 à 9 : &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&#039;&#039;&#039;for&#039;&#039;&#039; $cpt (1 .. 9) {bloc} &amp;lt;/tt&amp;gt;ou&amp;lt;tt&amp;gt; &#039;&#039;&#039;foreach&#039;&#039;&#039; $cpt (1 .. 9) {bloc}&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;(dans &amp;lt;tt&amp;gt;{bloc}&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;$cpt&amp;lt;/tt&amp;gt; prend successivement les valeurs de 1 à 9) &amp;lt;br /&amp;gt;ou &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&#039;&#039;&#039;for&#039;&#039;&#039; (1 .. 9) {bloc}&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;ici, à chaque itération, la variable par défaut &amp;lt;tt&amp;gt;$_&amp;lt;/tt&amp;gt; prend la valeur suivante.&lt;br /&gt;
&lt;br /&gt;
Pour parcourir chaque éléments d&#039;un tableau : &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&#039;&#039;&#039;foreach&#039;&#039;&#039; $variable (@tableau) {bloc}&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;A chaque itération, &amp;lt;tt&amp;gt;$variable&amp;lt;/tt&amp;gt; prendra la valeur suivante de &amp;lt;tt&amp;gt;@tableau&amp;lt;/tt&amp;gt;. &amp;lt;br /&amp;gt;Si on omet &amp;lt;tt&amp;gt;$variable&amp;lt;/tt&amp;gt;, alors la valeur de l&#039;élément sera stocké dans la variable &amp;lt;tt&amp;gt;$_&amp;lt;/tt&amp;gt; : &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&#039;&#039;&#039;foreach&#039;&#039;&#039; (@tableau) {bloc}&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Remarque&amp;lt;/u&amp;gt; : l&#039;écriture &amp;lt;tt&amp;gt;1..9&amp;lt;/tt&amp;gt; définit en réalité un tableau de 9 éléments (1,2,3,4,5,6,7,8,9).&lt;br /&gt;
&lt;br /&gt;
===== for &#039;style C&#039; =====&lt;br /&gt;
&lt;br /&gt;
La construction &#039;classique&#039; à la C est possible, mais tellement moins Perl... &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&#039;&#039;&#039;for&#039;&#039;&#039; ($cpt=1 ; $cpt &amp;lt; 10 ; $cpt++) {bloc}&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;Cette construction est néanmoins très puissante, et permet de faire beaucoup plus de choses que de simples itérations... A vous de voir !&lt;br /&gt;
&lt;br /&gt;
A noter que dans les exemples ci-dessus, les variables $cpt ou $variable sont locales à la boucle. Si elles doivent être déclarées, vous pouvez les faire précéder du mot clef &amp;lt;tt&amp;gt;my&amp;lt;/tt&amp;gt; : &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;for &#039;&#039;&#039;my&#039;&#039;&#039; $cpt (1 .. 9) {bloc}&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;for (&#039;&#039;&#039;my&#039;&#039;&#039; $cpt=1 ; $cpt &amp;lt; 10 ; $cpt++) {bloc}&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== While ====&lt;br /&gt;
&lt;br /&gt;
Les boucles while se construisent comme suit : &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&#039;&#039;&#039;while&#039;&#039;&#039; (test) {bloc1}&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&#039;&#039;&#039;while&#039;&#039;&#039; (test) {bloc1} &#039;&#039;&#039;continue&#039;&#039;&#039; {bloc2}&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le bloc1 puis le bloc2 sera exécuté tant que le test est vrai.&lt;br /&gt;
&lt;br /&gt;
L&#039;exécution des boucles peut être pilotée à l&#039;intérieur des blocs par les commandes &amp;lt;tt&amp;gt;next&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;last&amp;lt;/tt&amp;gt; et &amp;lt;tt&amp;gt;redo&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;next&amp;lt;/tt&amp;gt; lance l&#039;itération suivante de la boucle. Le bloc continue est exécuté puis la boucle redémarre.&lt;br /&gt;
* &amp;lt;tt&amp;gt;last&amp;lt;/tt&amp;gt; sort de la boucle, sans exécuter le bloc continue.&lt;br /&gt;
* &amp;lt;tt&amp;gt;redo&amp;lt;/tt&amp;gt; relance l&#039;itération de la boucle, sans exécuter le bloc continue ni le test.&lt;br /&gt;
&lt;br /&gt;
Par exemple, le code suivant lit l&#039;entrée standard, et ignore les commentaires (lignes commençant par #)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;lt;tt&amp;gt;&#039;&#039;&#039;while&#039;&#039;&#039; (&amp;lt;STDIN&amp;gt;) {&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;    &#039;&#039;&#039;next&#039;&#039;&#039; if /^#/;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;    ...&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;}&amp;lt;/tt&amp;gt;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Autre exemple, une itération de 1 à 9&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;lt;tt&amp;gt;$cpt = 1;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&#039;&#039;&#039;while&#039;&#039;&#039; ($cpt &amp;lt; 10) {&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  ...&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  $cpt++;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;}&amp;lt;/tt&amp;gt;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ou bien :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;lt;tt&amp;gt;$cpt = 1;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&#039;&#039;&#039;while&#039;&#039;&#039; ($cpt &amp;lt; 10) {&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  ...&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;}&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&#039;&#039;&#039;continue&#039;&#039;&#039; {&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  $cpt++;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;}&amp;lt;/tt&amp;gt;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour plus d&#039;information sur ces constructions : &amp;lt;tt&amp;gt;man perlsyn&amp;lt;/tt&amp;gt;. &amp;lt;br /&amp;gt; &lt;br /&gt;
&lt;br /&gt;
=== Les fonctions et procédures ===&lt;br /&gt;
&lt;br /&gt;
==== Déclaration des fonctions ====&lt;br /&gt;
&lt;br /&gt;
Une fonction peut être déclarée n&#039;importe où dans le script Perl, mais pour des questions de lisibilité, il est préférable de déclarer les fonctions regroupées soit en début, soit en fin de script. &amp;lt;br /&amp;gt;On peut pré-déclarer les fonctions par : &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&#039;&#039;&#039;sub&#039;&#039;&#039; mafonction;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;ou les déclarer directement par : &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&#039;&#039;&#039;sub&#039;&#039;&#039; mafonction {bloc}&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Passage de paramètres ====&lt;br /&gt;
&lt;br /&gt;
Les paramètres sont passés comme une liste de valeurs scalaires (nombre, chaîne...) &amp;lt;u&amp;gt;à plat&amp;lt;/u&amp;gt;. &amp;lt;br /&amp;gt;Par exemple : &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;ma_fonction($variable, &amp;quot;chaîne&amp;quot;);&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour lire valeur des paramètres passés dans la fonction, il suffit de lire la variable &amp;lt;tt&amp;gt;@_ &amp;lt;/tt&amp;gt;qui est le tableau contenant les paramètres. &amp;lt;br /&amp;gt;Une façon simple de les lire est d&#039;écrire en début de fonction : &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&#039;&#039;&#039;my &#039;&#039;&#039;($variable, $chaine) = @_;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;On peut aussi récupérer les arguments en dépilant les éléments du tableau &amp;lt;tt&amp;gt;@_&amp;lt;/tt&amp;gt; avec la commande &amp;lt;tt&amp;gt;shift&amp;lt;/tt&amp;gt;. &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;my $variable = shift @_;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;qui peut s&#039;abréger en &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;my $variable = shift;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;car le tableau &amp;lt;tt&amp;gt;@_&amp;lt;/tt&amp;gt; est l&#039;argument par défaut de shift.&lt;br /&gt;
&lt;br /&gt;
Les paramètres sont passés &#039;&#039;&#039;par valeur&#039;&#039;&#039;. Pour pouvoir modifier le contenu d&#039;une variable passée en paramètre à une fonction, il faut passer à cette fonction une &#039;&#039;référence&#039;&#039; sur la variable (on parle de passage &#039;&#039;&#039;par référence&#039;&#039;&#039;). Une référence est un type scalaire particulier qui permet de se &#039;&#039;référer&#039;&#039; à une variable. La notation consiste à faire précéder la variable par un caractère &#039;&amp;lt;tt&amp;gt;\&amp;lt;/tt&amp;gt;&#039;. Pour récupérer la variable cachée derrière la référence (ou &#039;&#039;déréférencer&#039;&#039;), il faut faire précéder la référence du caractère de type correspondant, et optionnellement entourer la référence d&#039;accolades. &amp;lt;br /&amp;gt;&amp;lt;u&amp;gt;Exemple&amp;lt;/u&amp;gt; : &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;$a = 1;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;$b = \$a;       # $b&amp;lt;/tt&amp;gt; est une référence à &amp;lt;tt&amp;gt;$a&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;$c = $$b + 1;   # $c = 2&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;$c = ${$b} + 1; # &amp;lt;/tt&amp;gt;synonyme&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Démonstration&amp;lt;/u&amp;gt; : &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;sub test&#039;&#039;&#039;1&#039;&#039;&#039; {&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;    my $a=shift; &amp;lt;/tt&amp;gt;&amp;lt;nowiki&amp;gt;# récupération du paramètre &amp;lt;/nowiki&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;    $a += 1;     &amp;lt;/tt&amp;gt;&amp;lt;nowiki&amp;gt;# on ajoute un &amp;lt;/nowiki&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;}&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;sub test&#039;&#039;&#039;2&#039;&#039;&#039; {&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;    my $ref_a=shift;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&#039;&#039;&#039;    $&#039;&#039;&#039;$ref_a += 1; &amp;lt;/tt&amp;gt;&amp;lt;nowiki&amp;gt;# le premier $ déréférence la référence &amp;lt;/nowiki&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;}&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;$a = 1;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;print $a;   &amp;lt;/tt&amp;gt;&amp;lt;nowiki&amp;gt;# affiche 1 &amp;lt;/nowiki&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;test&#039;&#039;&#039;1&#039;&#039;&#039;($a);&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;print $a;   &amp;lt;/tt&amp;gt;&amp;lt;nowiki&amp;gt;# affiche 1 &amp;lt;/nowiki&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;test&#039;&#039;&#039;2&#039;&#039;&#039;(&#039;&#039;&#039;\&#039;&#039;&#039;$a); &amp;lt;/tt&amp;gt;&amp;lt;nowiki&amp;gt;# &amp;lt;/nowiki&amp;gt;&amp;lt;tt&amp;gt;&#039;&#039;&#039;\&#039;&#039;&#039;$a&amp;lt;/tt&amp;gt; est une référence sur &amp;lt;tt&amp;gt;$a&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;print $a;   &amp;lt;/tt&amp;gt;&amp;lt;nowiki&amp;gt;# affiche 2 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le passage par référence a aussi pour d&#039;intérêt de pouvoir passer des tableaux ou des hachages en paramètres à une fonction. En effet, on a vu que les paramètres d&#039;une fonction sont passés comme une &#039;&#039;&#039;liste de valeurs scalaires&#039;&#039;&#039; &amp;lt;u&amp;gt;à plat&amp;lt;/u&amp;gt;. Si on désire passer 2 tableaux &amp;lt;tt&amp;gt;@tab1=(1,1,1)&amp;lt;/tt&amp;gt; et &amp;lt;tt&amp;gt;@tab2=(2,2)&amp;lt;/tt&amp;gt; à une fonction, et que l&#039;on écrit : &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;mafonction (@tab1, @tab2);&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;alors perl traduira cela comme : &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;mafonction (1,1,1,2,2);&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;car il met toutes les valeurs à plat dans une liste. Une fois dans la fonction on sera bien embêté pour savoir distinguer les éléments du premier tableau de ceux du deuxième. &amp;lt;br /&amp;gt;On va donc passer une référence sur chaque tableau : &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;mafonction (&#039;&#039;&#039;\&#039;&#039;&#039;@tab1, &#039;&#039;&#039;\&#039;&#039;&#039;@tab2);&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Exemple&amp;lt;/u&amp;gt; : &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;sub liste_gt {&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;    my ($l1ref, $l2ref) = @_;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;    $n1 = &#039;&#039;&#039;@&#039;&#039;&#039;$l1ref; #&amp;lt;/tt&amp;gt; &amp;lt;tt&amp;gt;@$l1ref&amp;lt;/tt&amp;gt; représente le tableau référencé par &amp;lt;tt&amp;gt;$l1ref&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;    $n2 = &#039;&#039;&#039;@&#039;&#039;&#039;$l2ref;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;    #&amp;lt;/tt&amp;gt; (affecter un tableau dans un scalaire retourne le nombre d&#039;éléments) &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;    if ($n1 &amp;gt; $n2) { return 1; }&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;    else { return 0; }&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;}&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;@tab1 = (1,2,3);&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;@tab2 = (&amp;quot;a&amp;quot;,2,&amp;quot;r&amp;quot;,5);&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;if (liste_gt(&#039;&#039;&#039;\&#039;&#039;&#039;@tab1, &#039;&#039;&#039;\&#039;&#039;&#039;@tab2)) {&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;    print &amp;quot;tab1 a plus d&#039;éléments que tab2\n&amp;quot;;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;} else {&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;    print &amp;quot;tab2 a plus d&#039;éléments que tab1\n&amp;quot;;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;}&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tout cela s&#039;applique de la même façon aux hachages. &amp;lt;br /&amp;gt;Pour plus d&#039;informations sur les références, voir &amp;lt;tt&amp;gt;man perlreftut&amp;lt;/tt&amp;gt; (tutoriel) et &amp;lt;tt&amp;gt;man perlref&amp;lt;/tt&amp;gt; (références).&lt;br /&gt;
&lt;br /&gt;
==== Retour de valeurs ====&lt;br /&gt;
&lt;br /&gt;
Une fonction peut renvoyer une ou des valeurs, grâce à la commande &amp;lt;tt&amp;gt;return&amp;lt;/tt&amp;gt; : &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&#039;&#039;&#039;sub&#039;&#039;&#039; ecrire&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;{&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  ...&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  &#039;&#039;&#039;return&#039;&#039;&#039; $valeur;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  ...      &amp;lt;/tt&amp;gt;&amp;lt;nowiki&amp;gt;# renvoie une valeur unique &amp;lt;/nowiki&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  &#039;&#039;&#039;return&#039;&#039;&#039; $valeur1, $valeur2;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  ...      &amp;lt;/tt&amp;gt;&amp;lt;nowiki&amp;gt;# renvoie une liste de valeurs &amp;lt;/nowiki&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;}&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;Cette commande provoque la sortie immédiate du sous-programme pour retourner dans le programme appelant.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;tt&amp;gt;return&amp;lt;/tt&amp;gt;&#039;&#039;&#039; permet de renvoyer une valeur ou une liste de valeurs. Cela permet donc à une fonction de retourner soit un tableau : &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;@resultat = ma_fonction;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;soit plusieurs valeurs : &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;($a, $b) = ma_fonction;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
De même que pour le passage de paramètres, la liste de valeur est une liste &amp;quot;à plat&amp;quot;, ce qui signifie que pour retourner plusieurs tableaux, il faut également passer par les références : &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;($ref_a, $ref_b) = ma_fonction;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;où &amp;lt;tt&amp;gt;$ref_a&amp;lt;/tt&amp;gt; est une référence sur le tableau &amp;lt;tt&amp;gt;@$ref_a&amp;lt;/tt&amp;gt; et où ma_fonction retourne une liste de deux références. &amp;lt;br /&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Pour plus d&#039;information sur les fonctions de Perl, voir &amp;lt;tt&amp;gt;man perlsub&amp;lt;/tt&amp;gt;. &amp;lt;br /&amp;gt;  &amp;lt;br /&amp;gt; &lt;br /&gt;
&lt;br /&gt;
=== Les expressions régulières, ou regex ===&lt;br /&gt;
&lt;br /&gt;
Perl est un langage très pratique pour manipuler du texte. Un des éléments qui le rend si adapté à cet usage est la présence des &#039;&#039;expressions régulières&#039;&#039;, qui permettent de déterminer si une chaîne de caractère correspond à un masque prédéfini, d&#039;extraire des éléments d&#039;une chaîne de caractères suivant un masque, de remplacer des parties d&#039;une chaîne suivant un masque, etc. C&#039;est ce masque, défini sous forme d&#039;une chaîne de caractères, que l&#039;on appelle &#039;&#039;expression régulière&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Par exemple, &amp;lt;tt&amp;gt;$a =~ /lea/&amp;lt;/tt&amp;gt; teste si la chaîne &amp;quot;lea&amp;quot; est dans la chaîne $a, &amp;lt;tt&amp;gt;$a =~ /^lea/&amp;lt;/tt&amp;gt; si $a commence par &amp;quot;lea&amp;quot;, &amp;lt;tt&amp;gt;$a =~ /l[eé]a/&amp;lt;/tt&amp;gt; si la chaîne $a contient &amp;quot;lea&amp;quot; ou &amp;quot;léa&amp;quot;...&lt;br /&gt;
&lt;br /&gt;
De prime abord, ce sont des sortes de formules qui semblent ne rien vouloir dire, mais une fois que nous les maîtrisons, elles se révèlent extrêmement pratiques et puissantes.&lt;br /&gt;
&lt;br /&gt;
==== Les éléments composant une expression régulière ====&lt;br /&gt;
&lt;br /&gt;
Les éléments les plus utilisés sont :&lt;br /&gt;
&lt;br /&gt;
* les caractères standards : majuscules, minuscules, chiffres, etc.&lt;br /&gt;
* les méta-caractères : &lt;br /&gt;
** &amp;lt;tt&amp;gt;. &amp;lt;/tt&amp;gt; : représente un caractère quelconque&lt;br /&gt;
** &amp;lt;tt&amp;gt;^ &amp;lt;/tt&amp;gt; : début de la chaîne&lt;br /&gt;
** &amp;lt;tt&amp;gt;$ &amp;lt;/tt&amp;gt; : fin de la chaîne&lt;br /&gt;
** &amp;lt;tt&amp;gt;()&amp;lt;/tt&amp;gt; : groupement et capture (la chaîne qui correspond au masque présent entre les parenthèses est affectée à la variable $1 pour la première parenthèse, $2 pour la seconde, etc. On peut ensuite utiliser ces variables normalement, notamment dans la substitution, voir plus bas)&lt;br /&gt;
** &amp;lt;tt&amp;gt;(?:)&amp;lt;/tt&amp;gt; : groupement sans capture (pas d&#039;affectation aux variables $1, $2...)&lt;br /&gt;
** &amp;lt;tt&amp;gt;[]&amp;lt;/tt&amp;gt; : classe de caractères (c&#039;est à dire l&#039;un des caractères présent entre les crochets ; on peut de plus spécifier des plages de caractères, par exemple &amp;lt;tt&amp;gt;[a-e]&amp;lt;/tt&amp;gt; correspond à tous les caractères entre a et e ; &amp;lt;tt&amp;gt;[aeiou]&amp;lt;/tt&amp;gt; aux voyelles ; &amp;lt;tt&amp;gt;[aeiou0-9]&amp;lt;/tt&amp;gt; aux voyelles plus aux chiffres...)&lt;br /&gt;
** &amp;lt;tt&amp;gt;| &amp;lt;/tt&amp;gt; : alternance (sorte de ou logique)&lt;br /&gt;
** &amp;lt;tt&amp;gt;\ &amp;lt;/tt&amp;gt; : permet de protéger un caractère réservé (voir ci-dessus) lorsqu&#039;on veut l&#039;utiliser comme caractère standard dans la regex.&lt;br /&gt;
* les caractères spéciaux : &lt;br /&gt;
** &amp;lt;tt&amp;gt;\s&amp;lt;/tt&amp;gt; : représente un espace&lt;br /&gt;
** &amp;lt;tt&amp;gt;\S&amp;lt;/tt&amp;gt; : caractère autre que espace&lt;br /&gt;
** &amp;lt;tt&amp;gt;\n&amp;lt;/tt&amp;gt; : saut de ligne&lt;br /&gt;
** &amp;lt;tt&amp;gt;\r&amp;lt;/tt&amp;gt; : retour chariot (les lignes des fichiers Windows se terminent par \r\n, et par \n sous Unix). Pour faire du code portable, il vaut mieux utiliser &amp;lt;tt&amp;gt;$/&amp;lt;/tt&amp;gt; qui représente la fin de ligne (voir [[#Quelques variables particulières prédéfinies]]).&lt;br /&gt;
** &amp;lt;tt&amp;gt;\t&amp;lt;/tt&amp;gt; : tabulation&lt;br /&gt;
** &amp;lt;tt&amp;gt;\d&amp;lt;/tt&amp;gt; : un chiffre (=&amp;lt;tt&amp;gt;[0-9]&amp;lt;/tt&amp;gt;)&lt;br /&gt;
** &amp;lt;tt&amp;gt;\w&amp;lt;/tt&amp;gt; : alphanumérique (=&amp;lt;tt&amp;gt;[0-9a-zA-Z_]&amp;lt;/tt&amp;gt; plus les accents, etc. si on précise &amp;lt;tt&amp;gt;use locale;&amp;lt;/tt&amp;gt;)&lt;br /&gt;
** plus de nombreux autres...&lt;br /&gt;
* les quantifieurs (ils suivent un caractère ou un méta-caractère afin d&#039;en représenter le nombre que l&#039;on cherche) : &lt;br /&gt;
** &amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt; : de 0 à n&lt;br /&gt;
** + : de 1 à n&lt;br /&gt;
** ? : 0 ou 1&lt;br /&gt;
** {n} : exactement n&lt;br /&gt;
** {n,} : au moins n&lt;br /&gt;
** {n,m} : entre n et m par défaut, les quantifieurs sont &amp;quot;gourmands&amp;quot;, c&#039;est à dire qu&#039;ils recherchent un maximum de caractères tant que le reste du masque correspond. Afin de rechercher un minimum de caractère, il faut faire suivre le quantifieur de &#039;?&#039;, par exemple &amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;*?&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;{n,}?&amp;lt;/tt&amp;gt;, etc. &lt;br /&gt;
* les assertions de largeur nulle (i.e. ne représentant pas un caractère) &lt;br /&gt;
** \b : correspond à une limite de mot&lt;br /&gt;
** \B : correspond à une non limite de mot (i.e. intérieur !)&lt;br /&gt;
** (?!pattern) : assertion négative en avant. Par exemple, /toto(?!titi)/ teste si la chaîne contient &amp;quot;toto&amp;quot;, non &amp;lt;u&amp;gt;suivi&amp;lt;/u&amp;gt; de &amp;quot;titi&amp;quot;. &lt;br /&gt;
** (?&amp;lt;!pattern) : assertion négative en arrière. Par exemple, /(?&amp;lt;!titi)toto/ teste si la chaîne contient &amp;quot;toto&amp;quot;, non &amp;lt;u&amp;gt;précédé&amp;lt;/u&amp;gt; de &amp;quot;titi&amp;quot;. La largeur de &amp;quot;titi&amp;quot; doit être fixe (i.e. toujours le même nombre de caractères). &lt;br /&gt;
** ...&lt;br /&gt;
&lt;br /&gt;
==== Les différentes utilisations des expressions régulières ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&#039;&#039;&#039;m&#039;&#039;&#039;/regex/&amp;lt;/tt&amp;gt; ou &amp;lt;tt&amp;gt;/regex/&amp;lt;/tt&amp;gt; (sans le &#039;&#039;&#039;m&#039;&#039;&#039;) &#039;&#039;&#039;teste&#039;&#039;&#039; si une chaîne correspond (&#039;&#039;match&#039;&#039;) à une regex donnée. &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&#039;&#039;&#039;s&#039;&#039;&#039;/regex/substitution/&amp;lt;/tt&amp;gt; &#039;&#039;&#039;remplace&#039;&#039;&#039; la partie de la chaîne correspondant à la regex par la substitution.&lt;br /&gt;
&lt;br /&gt;
Pour appliquer un test m// ou une substitution s/// à une chaîne de caractères, on utilise l&#039;opérateur =~ ou !~. &amp;lt;br /&amp;gt;&amp;lt;u&amp;gt;Par exemple&amp;lt;/u&amp;gt; : &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;if ($s &#039;&#039;&#039;=~&#039;&#039;&#039; /win(dows)?/) { kickban(); }&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;teste si la chaîne $s contient &amp;quot;win&amp;quot; ou &amp;quot;windows&amp;quot;. &amp;lt;br /&amp;gt;Si on ne précise pas de chaîne, le test se fait sur la variable par défaut $_ : &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;if (/win(dows)?/) { kickban(); }&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;teste si $_ contient &amp;quot;win&amp;quot; ou &amp;quot;windows&amp;quot;. &amp;lt;br /&amp;gt;L&#039;opérateur &amp;lt;tt&amp;gt;!~&amp;lt;/tt&amp;gt; correspond quant à lui à la négation : &amp;lt;tt&amp;gt;$s !~ /coin/&amp;lt;/tt&amp;gt; teste si la chaîne $s ne contient pas &amp;quot;coin&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===== options =====&lt;br /&gt;
&lt;br /&gt;
Les expressions régulières peuvent de plus être suivies de modifieurs ou options, qui en modifient le comportement, notamment :&lt;br /&gt;
&lt;br /&gt;
* g : recherche globalement, i.e. ne s&#039;arrête pas à la première occurrence.&lt;br /&gt;
* i : recherche insensible à la casse des caractères (i.e. majuscules/minuscules)&lt;br /&gt;
* m : traite la chaîne comme des lignes multiples (lorsqu&#039;elle contient des retours à la ligne). ^ et $ correspondent dans ce cas à un début de ligne et une fin de ligne.&lt;br /&gt;
* s : traite la chaîne comme une seule ligne. Dans ce cas, le méta-caractère &amp;quot;.&amp;quot; peut correspondre à &amp;quot;\n&amp;quot; ce qui n&#039;est pas le cas normalement.&lt;br /&gt;
* x : permet d&#039;insérer des espaces voire des commentaires dans un masque.&lt;br /&gt;
* e : uniquement pour s///, traite la substitution comme du code perl : elle est interprétée par perl avant d&#039;être substituée.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Par exemple&amp;lt;/u&amp;gt; : &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;quot;Bonjour Léa&amp;quot; =~ m/jour/; # correspond&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;quot;Bonjour Léa&amp;quot; =~ m/Jour/; # ne correspond pas&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;quot;Bonjour Léa&amp;quot; =~ m/Jour/i; # correspond&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== groupement et capture =====&lt;br /&gt;
&lt;br /&gt;
Si une partie d&#039;une regex est entre parenthèses, alors la partie de la chaîne qui correspond à cette parenthèse sera affectée à la variable $1 (on dit &amp;quot;capturée&amp;quot;). Si une deuxième parenthèse est présente dans la regex, la variable $2 sera utilisée, et ainsi de suite. Si la parenthèse commence par ?: alors il n&#039;y aura pas d&#039;affectation à une variable $1, $2, etc. &amp;lt;br /&amp;gt;Ainsi : &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;if (/win&#039;&#039;&#039;(?:&#039;&#039;&#039;dows&#039;&#039;&#039;)&#039;&#039;&#039;?\s&#039;&#039;&#039;(&#039;&#039;&#039;..&#039;&#039;&#039;)&#039;&#039;&#039;/i) {&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  if (&#039;&#039;&#039;$1&#039;&#039;&#039; eq &amp;quot;xp&amp;quot;) { kickban(); }&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  else { kick(); }&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;}&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;teste si $_ contient &amp;quot;win&amp;quot; ou &amp;quot;windows&amp;quot;, suivi d&#039;un espace, puis de 2 caractères, que l&#039;on va capturer dans &amp;lt;tt&amp;gt;$1&amp;lt;/tt&amp;gt;. La première parenthèse &amp;lt;tt&amp;gt;(?:dows)&amp;lt;/tt&amp;gt; permet de regrouper les quatre caractères &amp;quot;dows&amp;quot; afin de leur appliquer le quantifieur &#039;?&#039; (0 ou 1).&lt;br /&gt;
&lt;br /&gt;
Les captures $1, $2... peuvent être utilisées lors d&#039;une substitution : &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;$s =~ /win&#039;&#039;&#039;(?:&#039;&#039;&#039;dows&#039;&#039;&#039;)&#039;&#039;&#039;?\s&#039;&#039;&#039;(&#039;&#039;&#039;..&#039;&#039;&#039;)&#039;&#039;&#039;/winblows $1/&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt; &lt;br /&gt;
&lt;br /&gt;
==== Tester si une chaîne correspond à un masque donné : m// ou // ====&lt;br /&gt;
&lt;br /&gt;
Par exemple, pour tester si une chaîne contient le mot &amp;quot;lea&amp;quot; (le &amp;lt;tt&amp;gt;i&amp;lt;/tt&amp;gt; de la fin permet de ne pas différencier majuscules et minuscules) : &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;if (/lea/i) ...&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour tester si une chaîne commence par la lettre &#039;a&#039;, on peut faire : &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;if (/&#039;&#039;&#039;^&#039;&#039;&#039;a/) ...&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour tester si une chaîne se termine par &#039;z&#039; : &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;if (/z&#039;&#039;&#039;$&#039;&#039;&#039;/) ...&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Enfin pour tester si une chaîne contient un quadruplet héxadécimal (i.e. 4 chiffres de 0 à 9 ou A à F) : &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;if (/[0-9A-F]{4}/) ...&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ici, par défaut, c&#039;est la valeur contenu dans &amp;lt;tt&amp;gt;$_&amp;lt;/tt&amp;gt; qui est utilisée pour le test. Et bien entendu, nous pouvons compliquer à loisir l&#039;expression régulière, et utiliser le groupement (voir plus haut) afin de récupérer les valeurs trouvées dans les chaînes pour s&#039;en servir par la suite. &amp;lt;br /&amp;gt; &lt;br /&gt;
&lt;br /&gt;
==== Substituer une partie d&#039;une chaîne à une autre : s/// ====&lt;br /&gt;
&lt;br /&gt;
Rappel : la syntaxe est &amp;lt;tt&amp;gt;s/regex décrivant l&#039;élément à remplacer/élément remplaçant/options&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Exemples&amp;lt;/u&amp;gt; : &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;$variable &#039;&#039;&#039;=~&#039;&#039;&#039; &#039;&#039;&#039;s&#039;&#039;&#039;/a/b/;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;Cette commande va remplacer le premier &#039;a&#039; de la ligne par &#039;b&#039;. Pour remplacer tous les &#039;a&#039; faire : &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;$variable &#039;&#039;&#039;=~&#039;&#039;&#039; &#039;&#039;&#039;s&#039;&#039;&#039;/a/b/&#039;&#039;&#039;g&#039;&#039;&#039;&amp;lt;nowiki&amp;gt;;&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;Si en plus nous voulons que cela ne fasse pas la différence entre les majuscules et les minuscules (&#039;&#039;case sensitive&#039;&#039;), faire &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;$variable &#039;&#039;&#039;=~&#039;&#039;&#039; &#039;&#039;&#039;s&#039;&#039;&#039;/a/b/&#039;&#039;&#039;gi&#039;&#039;&#039;&amp;lt;nowiki&amp;gt;;&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;Pour remplacer tous les ensembles de caractères commençant par &#039;a&#039;, finissant par &#039;e&#039; et avec au moins un caractère au milieu sans être sensitif par &#039;toto&#039;, faire : &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;$variable &#039;&#039;&#039;=~&#039;&#039;&#039; &#039;&#039;&#039;s&#039;&#039;&#039;/a&#039;&#039;&#039;.*&#039;&#039;&#039;e/toto/&#039;&#039;&#039;gi&#039;&#039;&#039;&amp;lt;nowiki&amp;gt;;&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt; &lt;br /&gt;
&lt;br /&gt;
==== La traduction : tr/// ====&lt;br /&gt;
&lt;br /&gt;
Cette construction &amp;quot;à la regex&amp;quot; permet de remplacer des caractères par d&#039;autres dans une chaîne, à la manière de la commande unix &#039;tr&#039;. &amp;lt;br /&amp;gt;La syntaxe est &amp;lt;tt&amp;gt;&#039;&#039;&#039;tr&#039;&#039;&#039;/éléments à traduire/éléments traduits/&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;Ou &amp;lt;tt&amp;gt;&#039;&#039;&#039;y&#039;&#039;&#039;/éléments à traduire/éléments traduits/&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Exemple : &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;$variable &#039;&#039;&#039;=~&#039;&#039;&#039; &#039;&#039;&#039;tr&#039;&#039;&#039;/a-b/A-B/;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;Cela va transformer tous les &#039;a&#039; et &#039;b&#039; minuscules en majuscules.&lt;br /&gt;
&lt;br /&gt;
Plus d&#039;info sur : &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;man perlre&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;man perlretut&amp;lt;/tt&amp;gt; (le tutoriel sur les regex, une bonne lecture !) &amp;lt;br /&amp;gt; &lt;br /&gt;
&lt;br /&gt;
=== Structures de données complexes ===&lt;br /&gt;
&lt;br /&gt;
==== Tableaux et tables de hachage multidimensionnels ====&lt;br /&gt;
&lt;br /&gt;
On a vu plus haut que les tableaux Perl ne possèdent qu&#039;une seule dimension (il ne peuvent contenir que des éléments de type scalaire). On a aussi vu [[#Passage de paramètres|plus haut]] l&#039;existence de références, type scalaire particulier qui permet de se &#039;&#039;référer&#039;&#039; à une variable, donc en l&#039;occurence à un tableau. &amp;lt;br /&amp;gt;Ainsi pour représenter la matrice &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt; 0 1 2&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt; 3 4 5&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt; 6 7 8&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;Nous allons pouvoir faire : &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;@ligne1 = (0, 1, 2);&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;@ligne2 = (3, 4, 5);&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;@ligne3 = (6, 7, 8);&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;@matrice = (&#039;&#039;&#039;\&#039;&#039;&#039;@ligne1, &#039;&#039;&#039;\&#039;&#039;&#039;@ligne2, &#039;&#039;&#039;\&#039;&#039;&#039;@ligne3);&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;Perl introduit une nouvelle notation pour ce faire : au lieu d&#039;entourer la liste avec des parenthèses, nous allons le faire avec des crochets, ce qui aura pour effet de retourner une référence : &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;$ligne1_ref = [0, 1, 2];&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;etc...&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;ou plus simplement : &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;@matrice = (&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt; [0, 1, 2],&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt; [3, 4, 5],&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt; [6, 7, 8],&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;);&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;Dans tous ces cas, @matrice est un tableau de trois éléments, qui sont chacun une référence vers un autre tableau. &amp;lt;tt&amp;gt;$matrice[1]&amp;lt;/tt&amp;gt; est une référence sur la 2&amp;lt;sup&amp;gt;ème&amp;lt;/sup&amp;gt; ligne de la matrice.&lt;br /&gt;
&lt;br /&gt;
Afin d&#039;accéder aux éléments de la matrice, nous pouvons utiliser une nouvelle notation : la flèche &#039;&amp;lt;tt&amp;gt;-&amp;gt;&amp;lt;/tt&amp;gt;&#039;. &amp;lt;br /&amp;gt;En effet, afin d&#039;accéder au 3&amp;lt;sup&amp;gt;ème&amp;lt;/sup&amp;gt; élément de &amp;lt;tt&amp;gt;$ligne1_ref&amp;lt;/tt&amp;gt; définie plus haut, nous utiliserons &amp;lt;tt&amp;gt;$ligne1_ref&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;[2]&amp;lt;/tt&amp;gt; (ce qui est synonyme de &amp;lt;tt&amp;gt;${$ligne1_ref}[2]&amp;lt;/tt&amp;gt;.) &amp;lt;br /&amp;gt;Ainsi, afin d&#039;accéder au &#039;5&#039; dans notre matrice, nous ferons : &amp;lt;tt&amp;gt;$matrice[1]&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;[2]&amp;lt;/tt&amp;gt;. &amp;lt;br /&amp;gt;Mais... Perl est gentil avec nous, car entre deux indices de tableau, la flèche est optionnelle ! Donc nous pouvons écrire : &amp;lt;tt&amp;gt;$matrice[1][2]&amp;lt;/tt&amp;gt;, ce qui ressemble maintenant à un tableau bi-dimensionnel.&lt;br /&gt;
&lt;br /&gt;
De même, si $hash_ref est une référence vers un hachage, &amp;lt;tt&amp;gt;$hash_ref-&amp;gt;{&#039;nom&#039;}&amp;lt;/tt&amp;gt; renverra l&#039;élément du hachage indexé par &#039;nom&#039;.&lt;br /&gt;
&lt;br /&gt;
L&#039;ensemble tableaux, hachages et références peut bien sûr être mixé dans l&#039;ordre qui vous plaira. Par exemple, pour réaliser un tableau de personnes, nous écrirons : &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;@staff = (&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt; [ prenom =&amp;gt; &amp;quot;jice&amp;quot;, nom =&amp;gt; &amp;quot;cardot&amp;quot; ],&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt; [ prenom =&amp;gt; &amp;quot;fred&amp;quot;, nom =&amp;gt; &amp;quot;bonnaud&amp;quot; ],&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt; [ prenom =&amp;gt; &amp;quot;serge&amp;quot;, nom =&amp;gt; &amp;quot;tchesmeli&amp;quot; ],&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;);&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;et pour accéder au prénom de la première personne, nous ferons : &amp;lt;tt&amp;gt;$staff[0]&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;{&#039;prenom&#039;}&amp;lt;/tt&amp;gt;(meuh non je ne suis pas mégalo ;) ou &amp;lt;tt&amp;gt;$staff[0]{&#039;prenom&#039;}&amp;lt;/tt&amp;gt; car ici aussi la flèche est optionnelle.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Notes&amp;lt;/u&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
* pour manipuler les tableaux, les fonctions intéressantes sont notamment : &amp;lt;tt&amp;gt;push&amp;lt;/tt&amp;gt; pour ajouter un élément en fin de tableau, &amp;lt;tt&amp;gt;pop&amp;lt;/tt&amp;gt; pour récupérer le dernier élément et &amp;lt;tt&amp;gt;shift&amp;lt;/tt&amp;gt; pour récupérer le premier élément. &amp;lt;tt&amp;gt;pop&amp;lt;/tt&amp;gt; et &amp;lt;tt&amp;gt;shift&amp;lt;/tt&amp;gt; retournent cet élément, et le suppriment du tableau.&lt;br /&gt;
* en contexte scalaire, évaluer un tableau ou un hachage retourne son nombre d&#039;éléments. Ainsi &amp;lt;tt&amp;gt;$nb_elem = @tableau&amp;lt;/tt&amp;gt; mettra dans &amp;lt;tt&amp;gt;$nb_elem&amp;lt;/tt&amp;gt; le nombre d&#039;éléments de &amp;lt;tt&amp;gt;@tableau&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Les références symboliques ===&lt;br /&gt;
&lt;br /&gt;
On a vu [[#Passage de paramètres|ci-dessus]] une utilisation des références, pour le passage et le retour de valeurs dans les fonctions. On [[#Structures de données complexes|vient de voir]] également leur utilité pour travailler avec des structures de données complexes.&lt;br /&gt;
&lt;br /&gt;
Les références peuvent aussi servir dans un autre contexte : si vous déréférencez une variable contenant une valeur scalaire plutôt qu&#039;un référence vers une autre variable, elle sera considérée comme une référence symbolique, c&#039;est à dire que la valeur scalaire sera utilisée en tant que nom de la variable. &amp;lt;br /&amp;gt;&amp;lt;u&amp;gt;Exemple&amp;lt;/u&amp;gt; : &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;$test = &amp;quot;toto&amp;quot;;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;$$test = 144;     #&amp;lt;/tt&amp;gt; affecte 144 à $toto &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;${$test} = 12;    #&amp;lt;/tt&amp;gt; affecte 12 à $toto &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;$test-&amp;gt;[1] = 12;  #&amp;lt;/tt&amp;gt; affecte 12 à $toto[1] &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;@$test = (1,2,3); #&amp;lt;/tt&amp;gt; affecte le tableau @toto&lt;br /&gt;
&lt;br /&gt;
Cela peut aller beaucoup plus loin, car vous pouvez mettre une chaîne de caractères entre les accolades : &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;${$test x 2} = 12;   #&amp;lt;/tt&amp;gt; affecte 12 à $totototo &amp;lt;br /&amp;gt;$titi = 2; &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;${&amp;quot;$toto$titi&amp;quot;} = 2; #&amp;lt;/tt&amp;gt; affecte 2 à $toto2 &amp;lt;br /&amp;gt;etc.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Remarque&amp;lt;/u&amp;gt; : l&#039;utilisation des références symboliques avec &amp;lt;tt&amp;gt;use strict;&amp;lt;/tt&amp;gt; (tel que préconisé au début de l&#039;article) n&#039;est pas possible. Pour contourner ce problème, il faut appeler l&#039;instruction &amp;lt;tt&amp;gt;no strict &#039;refs&#039;;&amp;lt;/tt&amp;gt; dans le bloc où on veut utiliser les références symboliques.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Autre exemple d&#039;utilisation&amp;lt;/u&amp;gt; : &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;$min = 12;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;$max = 144;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;while (&amp;lt;FICHIER&amp;gt;) {&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  if (/^([A-Z]+)\ (\d+)\ (\d+)\ (\d+)$/) {&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;    #&amp;lt;/tt&amp;gt; les masques ont affecté $1, $2, $3 et $4 (voir [#regex_capture groupement/capture]) &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;    print &amp;quot;$1: &amp;quot;;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;    #&amp;lt;/tt&amp;gt; on va effectuer une même opération sur $2, $3 et $4 : &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;    for $i (2 .. 4) {&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;      no strict &#039;refs&#039;;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;      #&amp;lt;/tt&amp;gt; on utilise les références symboliques : si $i = 2, alors $$i est $2 &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;      if (&#039;&#039;&#039;$$i&#039;&#039;&#039; &amp;gt; $max) print &amp;quot;sup &amp;quot;;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;      elseif (&#039;&#039;&#039;$$i&#039;&#039;&#039; &amp;lt; $min) print &amp;quot;inf &amp;quot;;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;      else print &amp;quot;ok &amp;quot;;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;    }&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  }&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;}&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Manipulation de fichiers ===&lt;br /&gt;
&lt;br /&gt;
Comme toujours en Perl, il y a plusieurs moyens de faire une même opération.&lt;br /&gt;
&lt;br /&gt;
==== Ouverture &amp;quot;à la shell&amp;quot; : ====&lt;br /&gt;
&lt;br /&gt;
Cette façon de faire offrant un moyen simple d&#039;ouvrir un fichier en lecture / écriture est empruntée du shell. &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&#039;&#039;&#039;open&#039;&#039;&#039;(FILE, &amp;quot;&amp;lt; nom du fichier&amp;quot;); &amp;lt;/tt&amp;gt;&amp;lt;nowiki&amp;gt;# ouvre en lecture &amp;lt;/nowiki&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&#039;&#039;&#039;open&#039;&#039;&#039;(FILE, &amp;quot;  nom du fichier&amp;quot;); &amp;lt;/tt&amp;gt;&amp;lt;nowiki&amp;gt;# idem &amp;lt;/nowiki&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&#039;&#039;&#039;open&#039;&#039;&#039;(FILE, &amp;quot;&amp;gt; nom du fichier&#039;); &amp;lt;/tt&amp;gt;&amp;lt;nowiki&amp;gt;# ouvre en écriture &amp;lt;/nowiki&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&#039;&#039;&#039;open&#039;&#039;&#039;(FILE, &amp;quot;&amp;gt;&amp;gt;nom du fichier&#039;); &amp;lt;/tt&amp;gt;&amp;lt;nowiki&amp;gt;# ouvre en ajout &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Remarque : le fichier &amp;quot;moins&amp;quot; correspond à l&#039;entrée standard &#039;&#039;stdin&#039;&#039; en lecture et à la sortie standard &#039;&#039;stdout&#039;&#039; en écriture. Par exemple  &amp;lt;tt&amp;gt;open(SORTIE,&amp;quot;&amp;gt;-&amp;quot;)&amp;lt;/tt&amp;gt; ouvre la sortie standard.&lt;br /&gt;
&lt;br /&gt;
==== Ouverture &amp;quot;à la C&amp;quot; : ====&lt;br /&gt;
&lt;br /&gt;
La fonction &#039;&#039;&#039;&amp;lt;tt&amp;gt;sysopen&amp;lt;/tt&amp;gt;&#039;&#039;&#039; de Perl correspond à l&#039;appel système open(2) du C. Cela permet une plus grande maîtrise sur l&#039;ouverture des fichiers, au prix d&#039;une plus grande complexité. &amp;lt;br /&amp;gt;Synoptique : &amp;lt;tt&amp;gt;sysopen DESCRIPTEUR, CHEMIN, FLAGS, [MASQUE]&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;MASQUE&amp;lt;/tt&amp;gt; correspond au masque octal des permissions du fichier (utile pour la création d&#039;un fichier), combiné avec l&#039;umask du processus perl. voir [../admin/permissions.php3 l&#039;article sur les permissions]. &amp;lt;br /&amp;gt;Je vous renvoie vers un cours de C pour la signification des exemples suivants, et vous donne la correspondance avec l&#039;open &amp;quot;à la shell&amp;quot;. &amp;lt;br /&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;80%&amp;quot; border=&amp;quot;BORDER&amp;quot;&lt;br /&gt;
! à la Shell&lt;br /&gt;
! à la C&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;open(F, &amp;quot;&amp;lt; $chemin&amp;quot;);&amp;lt;/tt&amp;gt;&lt;br /&gt;
| &amp;lt;tt&amp;gt;sysopen(F, $chemin, O_RDONLY);&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;open(F, &amp;quot;&amp;gt; $chemin&amp;quot;);&amp;lt;/tt&amp;gt;&lt;br /&gt;
| &amp;lt;tt&amp;gt;sysopen(F, $chemin, O_WRONLY | O_TRUNC | O_CREAT);&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;open(F, &amp;quot;&amp;gt;&amp;gt; $chemin&amp;quot;);&amp;lt;/tt&amp;gt;&lt;br /&gt;
| &amp;lt;tt&amp;gt;sysopen(F, $chemin, O_WRONLY | O_APPEND | O_CREAT);&amp;lt;/tt&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Bien sûr, sysopen permet de faire plus de choses que le simple open(), en jouant sur les flags ci-dessus et O_RDWR, O_RDONLY, O_EXCL, O_NONBLOCK, O_BINARY. Pour plus d&#039;informations, voir &amp;lt;tt&amp;gt;man perlopentut&amp;lt;/tt&amp;gt; ou &amp;lt;tt&amp;gt;man 2 open&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== Fermer un fichier ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&#039;&#039;&#039;close&#039;&#039;&#039;(FILE);&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;FILE&amp;lt;/tt&amp;gt; étant le descripteur du fichier ouvert.&lt;br /&gt;
&lt;br /&gt;
==== Descripteurs de fichier spéciaux ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;STDIN&amp;lt;/tt&amp;gt; et &amp;lt;tt&amp;gt;STDOUT&amp;lt;/tt&amp;gt; sont définis dès le lancement de votre programme. Ils correspondent respectivement à l&#039;entrée et à la sortie standard. Rien ne vous empêche de les redéfinir, en les ouvrant sur un autre fichier, par exemple : &amp;lt;tt&amp;gt;open(STDIN, &amp;quot;mon_fichier&amp;quot;);&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Lire dans un fichier (l&#039;opérateur diamant) ====&lt;br /&gt;
&lt;br /&gt;
À chaque appel, &amp;lt;tt&amp;gt;&#039;&#039;&#039;&amp;lt;&#039;&#039;&#039;DESCRIPTEUR DE FICHIER&#039;&#039;&#039;&amp;gt;&#039;&#039;&#039;&amp;lt;/tt&amp;gt; (on appelle &#039;&#039;&#039;&amp;lt;tt&amp;gt;&amp;lt;&amp;gt;&amp;lt;/tt&amp;gt;&#039;&#039;&#039; l&#039;opérateur &amp;quot;diamant&amp;quot;) retourne la ligne suivante du fichier (en fait jusqu&#039;à la fin de ligne définie par $/, voir le paragraphe sur les [#var_particulieres variables prédéfinies].), ou renvoie &#039;&#039;faux&#039;&#039; en fin de fichier. &amp;lt;br /&amp;gt;&amp;lt;u&amp;gt;exemple&amp;lt;/u&amp;gt; : &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;open (F, &amp;quot;mon_fichier&amp;quot;);&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;$premiere_ligne = &#039;&#039;&#039;&amp;lt;&#039;&#039;&#039;F&#039;&#039;&#039;&amp;gt;&#039;&#039;&#039;&amp;lt;nowiki&amp;gt;;&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;while (&#039;&#039;&#039;&amp;lt;&#039;&#039;&#039;F&#039;&#039;&#039;&amp;gt;&#039;&#039;&#039;) {&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  ... &amp;lt;/tt&amp;gt;traitement en fonction de $_&amp;lt;tt&amp;gt; ...&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;}&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;close(F);&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;exemple&amp;lt;/u&amp;gt; : pour lire tout un fichier dans une variable : &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;open (F, &amp;quot;mon_fichier&amp;quot;);&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;undef $/;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;$contenu_fichier = &#039;&#039;&#039;&amp;lt;&#039;&#039;&#039;F&#039;&#039;&#039;&amp;gt;&#039;&#039;&#039;&amp;lt;nowiki&amp;gt;;&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;close(F);&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La lecture sur l&#039;entrée standard est extrêmement simplifiée, car &amp;lt;tt&amp;gt;STDIN&amp;lt;/tt&amp;gt; est déjà ouvert, et &amp;lt;tt&amp;gt;&amp;lt;STDIN&amp;gt;&amp;lt;/tt&amp;gt; et &amp;lt;tt&amp;gt;&amp;lt;&amp;gt;&amp;lt;/tt&amp;gt; sont synonymes. Ainsi, il suffit de faire : &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;while (&#039;&#039;&#039;&amp;lt;&amp;gt;&#039;&#039;&#039;) {&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  ... traitement de la ligne en cours ...&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;}&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Écrire dans un fichier ====&lt;br /&gt;
&lt;br /&gt;
Il suffit de spécifier à la commande &amp;lt;tt&amp;gt;print&amp;lt;/tt&amp;gt; ou &amp;lt;tt&amp;gt;printf&amp;lt;/tt&amp;gt; le descripteur de fichier à utiliser. &amp;lt;br /&amp;gt;&amp;lt;u&amp;gt;Exemple&amp;lt;/u&amp;gt; : &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;open(FLOG, &amp;quot;&amp;gt;&amp;gt; fichier.log&amp;quot;);&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;print &#039;&#039;&#039;FLOG&#039;&#039;&#039; &amp;quot;nouveau log\n&amp;quot;;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;close(FLOG);&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt; &lt;br /&gt;
&lt;br /&gt;
== Quelques autres commandes utiles ==&lt;br /&gt;
&lt;br /&gt;
voir &amp;lt;tt&amp;gt;man perlfunc&amp;lt;/tt&amp;gt; pour la liste exhaustive des commandes intégrées de Perl.&lt;br /&gt;
&lt;br /&gt;
=== split ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;split&amp;lt;/tt&amp;gt; correspond en partie à la fonction &amp;lt;tt&amp;gt;cut&amp;lt;/tt&amp;gt; en shell. Elle permet de découper une chaîne de caractères. &amp;lt;br /&amp;gt;Exemple : &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;($variable, @tableau) = &#039;&#039;&#039;split&#039;&#039;&#039; (&amp;quot;:&amp;quot;, &amp;quot;prenom:nom:age:adresse:ville:telephone&amp;quot;);&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;Renvoie &amp;quot;prenom&amp;quot; dans &amp;lt;tt&amp;gt;$variable&amp;lt;/tt&amp;gt; et le reste dans des cases distinctes du tableau &amp;lt;tt&amp;gt;@tableau&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== systeme ou exec ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;exec&amp;lt;/tt&amp;gt; permet de lancer un programme extérieur. &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;system&amp;lt;/tt&amp;gt; de même que &amp;lt;tt&amp;gt;exec&amp;lt;/tt&amp;gt;, mais produit un &#039;&#039;fork&#039;&#039;, processus fils. &amp;lt;br /&amp;gt;Exemple : &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;@args = (&amp;quot;ls&amp;quot;, &amp;quot;-lrt&amp;quot;, &amp;quot;toto*&amp;quot;);&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&#039;&#039;&#039;system&#039;&#039;&#039;(@args);&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;Cela va lancer la commande : &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;ls -lrt toto*&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;Attention, l&#039;utilisation de ces commandes rend votre script beaucoup moins portable ! En général, il y a moyen de tout faire en Perl, il faut éviter de recourir à ces fonctions.&lt;br /&gt;
&lt;br /&gt;
=== chomp ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;chomp&amp;lt;/tt&amp;gt; supprime tous les caractères de fin de ligne d&#039;une chaîne de caractères et renvoie le nombre de caractères supprimés. &amp;lt;br /&amp;gt;Exemple : &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;$nb_car = chomp($chaine);&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;Contrairement à &amp;lt;tt&amp;gt;chop&amp;lt;/tt&amp;gt; qui enlève seulement le dernier caractère de fin de ligne. &amp;lt;br /&amp;gt; &lt;br /&gt;
&lt;br /&gt;
== Exemple d&#039;un script Perl ==&lt;br /&gt;
&lt;br /&gt;
Le [perl_script.pl script] va se lire lui-même et sortir à l&#039;écran son contenu modifié : &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;#!/usr/bin/perl -W&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# Fichier script.pl&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&#039;&#039;&#039;use&#039;&#039;&#039; strict &#039;&#039;&#039;qw&#039;&#039;&#039;(subs vars refs);&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&#039;&#039;&#039;my &#039;&#039;&#039;$file = &amp;quot;$0&amp;quot;;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&#039;&#039;&#039;open&#039;&#039;&#039;(FILE, &amp;quot;&amp;lt;$file&amp;quot;);&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;#Lecture du fichier ligne par ligne jusqu&#039;à la fin du fichier.&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&#039;&#039;&#039;while&#039;&#039;&#039; (&amp;lt;FILE&amp;gt;) {&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  #Remplace tous les mots &#039;file&#039; par &#039;fichier&#039;.&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  $_ &#039;&#039;&#039;=~&#039;&#039;&#039; &#039;&#039;&#039;s&#039;&#039;&#039;/file/fichier/&#039;&#039;&#039;ig&#039;&#039;&#039;&amp;lt;nowiki&amp;gt;;&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  #Transforme les lettres minuscules de &#039;a&#039; à &#039;e&#039; en majuscules.&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  $_ &#039;&#039;&#039;=~&#039;&#039;&#039; &#039;&#039;&#039;tr&#039;&#039;&#039;/a-e/A-E/;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  #Affiche le résultat des transformations à l&#039;écran.&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;  &#039;&#039;&#039;print&#039;&#039;&#039; $_;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;}&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&#039;&#039;&#039;close&#039;&#039;&#039;(FILE);&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;#Fin script.pl&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;Ce script est totalement inutile mais je crois que cela montre la facilité d&#039;utilisation. &amp;lt;br /&amp;gt;Oui, j&#039;en conviens, en shell cela tiens en une ligne : &amp;lt;tt&amp;gt;&#039;&#039;&#039;cat&#039;&#039;&#039; script.pl | &#039;&#039;&#039;sed&#039;&#039;&#039; -e &#039;s/file/fichier/ig&#039; | &#039;&#039;&#039;sed&#039;&#039;&#039; y/a-e/A-E/&amp;lt;/tt&amp;gt;. Bizarre, cela ressemble au Perl !? ;-)&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Obtenir de l&#039;aide ou en savoir plus ==&lt;br /&gt;
&lt;br /&gt;
=== Sur notre machine ===&lt;br /&gt;
&lt;br /&gt;
Et oui ! Sur notre propre machine il y a plein de sources de documentation sans même le savoir. &amp;lt;br /&amp;gt;La première qui viens à l&#039;esprit &#039;&#039;naturellement&#039;&#039; c&#039;est LE &amp;lt;tt&amp;gt;man&amp;lt;/tt&amp;gt;. &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;man perl&amp;lt;/tt&amp;gt; vous donne quelques généralités, ainsi que la liste de toutes les sections du manuel de perl (&amp;lt;tt&amp;gt;perlsyn&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;perlre&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;perlvar&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;perlop&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;perlfun&amp;lt;/tt&amp;gt;...).&lt;br /&gt;
&lt;br /&gt;
Ensuite, il y a le &amp;lt;tt&amp;gt;man&amp;lt;/tt&amp;gt; propre à Perl, qui est &amp;lt;tt&amp;gt;perldoc&amp;lt;/tt&amp;gt;. Le meilleur moyen de voir comment cela marche, c&#039;est d&#039;essayer : &amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;perldoc perldoc&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Bon, l&#039;inconvénient, c&#039;est que tout ceci est en anglais...&lt;br /&gt;
&lt;br /&gt;
=== Sur Internet ===&lt;br /&gt;
&lt;br /&gt;
Sur Internet, nous trouverons plein de sites parlant de Perl. En général, ils parlent des scripts CGI (scripts Perl pour serveur web). Mais néanmoins, il y a&lt;br /&gt;
&lt;br /&gt;
* le [http://www.perl.com site officiel], bien sûr.&lt;br /&gt;
* les groupes (français et anglais) marchent bien : &lt;br /&gt;
** [http://groups.google.com/groups?hl=en&amp;amp;group=fr.comp.lang.perl fr.comp.lang.perl]&lt;br /&gt;
** [http://groups.google.com/groups?hl=en&amp;amp;group=comp.lang.perl comp.lang.perl]&lt;br /&gt;
* les sites des &#039;&#039;mongueurs&#039;&#039; Perl, suivez mon regard ! ;-) &lt;br /&gt;
** &amp;lt;u&amp;gt;Note de Jice&amp;lt;/u&amp;gt; : je me dois de citer les deux sites suivants, vu que le regard de Jonesy est sur moi ;)&lt;br /&gt;
** les [http://paris.mongueurs.net Paris Perl Mongueurs],&lt;br /&gt;
** et les [http://www.mongueurs.net Mongueurs de Perl] qui fédèrent les groupes locaux (Paris, Lyon, Toulouse...).&lt;br /&gt;
* la [http://perl.enstimac.fr/ traduction] de la documentation en français.&lt;br /&gt;
* une [http://perl.developpez.com/faq/ faq] sur developpez.com, visiter aussi le [http://www.developpez.net/forums/viewforum.php?f=83 forum] .&lt;br /&gt;
* et enfin, l&#039;intarissable source, [http://www.google.com Google] ! ;-)&lt;br /&gt;
&lt;br /&gt;
Sinon, si on a les moyens les livres O&#039;Reilly sur Perl sont très bien écrits et sont la référence en la matière. &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Le mot de la fin ==&lt;br /&gt;
&lt;br /&gt;
Surtout n&#039;hésitez pas à m&#039;envoyer vos remarques, vos corrections et vos idées, merci.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;b&amp;gt;[[Dev-index|@ Retour à la rubrique Développement]]&amp;lt;/b&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;merci&amp;quot;&amp;gt;Cette page est issue de la documentation &#039;pré-wiki&#039; de Léa a été convertie avec HTML::WikiConverter. Elle fut créée par Jonesy, Jice le 03/04/2002.&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Copyright =&lt;br /&gt;
Copyright &amp;amp;copy; 03/04/2002, Jonesy, Jice&lt;br /&gt;
{{CC-BY-NC-SA}}&lt;/div&gt;</summary>
		<author><name>LeaJice</name></author>
	</entry>
	<entry>
		<id>https://lea-linux.org/docs/index.php?title=Utilisateur:Jice&amp;diff=18636</id>
		<title>Utilisateur:Jice</title>
		<link rel="alternate" type="text/html" href="https://lea-linux.org/docs/index.php?title=Utilisateur:Jice&amp;diff=18636"/>
		<updated>2011-01-04T20:23:08Z</updated>

		<summary type="html">&lt;p&gt;LeaJice : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Bonjour à tous les pingouins et les autres !&lt;br /&gt;
&lt;br /&gt;
Co-fondateur de Léa avec Serge en 1999, j&#039;ai fait grandir le site qui est maintenant passé en de (bonnes) nouvelles mains. Ex-président de l&#039;association et toujours membre fondateur.&lt;br /&gt;
&lt;br /&gt;
N&#039;hésitez pas à m&#039;écrire : jice &amp;lt;chez&amp;gt; lea-linux &amp;lt;point&amp;gt; org.&lt;br /&gt;
&lt;br /&gt;
Pour plus d&#039;infos veuillez visiter [http://jice.free.fr ma page perso] ou le [http://blog.lilaetleloup.com blog de ma moitié].&lt;br /&gt;
&lt;br /&gt;
JC&lt;/div&gt;</summary>
		<author><name>LeaJice</name></author>
	</entry>
	<entry>
		<id>https://lea-linux.org/docs/index.php?title=Contact&amp;diff=18635</id>
		<title>Contact</title>
		<link rel="alternate" type="text/html" href="https://lea-linux.org/docs/index.php?title=Contact&amp;diff=18635"/>
		<updated>2011-01-04T20:20:18Z</updated>

		<summary type="html">&lt;p&gt;LeaJice : /* Contacts */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= A propos de Léa-Linux =&lt;br /&gt;
&lt;br /&gt;
[http://lea-linux.org Léa-Linux] est un site d&#039;aide collaboratif pour le système d&#039;exploitation GNU/Linux. Il contient des documentations et des tutoriels rédigés par de nombreux contributeurs francophones bénévoles. C&#039;est un site généraliste, qui n&#039;est dédié à aucune distribution en particulier.&lt;br /&gt;
&lt;br /&gt;
Depuis 1998, Léa-Linux tente de rendre GNU/Linux accessible au plus grand nombre. Le site étant un wiki, chacun est libre d&#039;éditer et de modifier le contenu, ou de proposer de nouveaux articles qui seront publiés après relecture. En plus de la documentation, Léa-Linux propose également des forums d&#039;aide en ligne, des listes de diffusion et un canal IRC.&lt;br /&gt;
&lt;br /&gt;
Léa-Linux est aujourd&#039;hui principalement animé par le conseil d&#039;administration de l&#039;association éponyme.&lt;br /&gt;
&lt;br /&gt;
= Contacts =&lt;br /&gt;
&lt;br /&gt;
 boîte générique : admin # lea-linux.org&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Bureau de l&#039;association Léa-Linux :&amp;lt;/u&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Président : Benjamin Gigon    (bgigon # lea-linux.org)&lt;br /&gt;
* Vice-Président : Stéphane Este-Gracias    (st # lea-linux.org)&lt;br /&gt;
* Secrétaire : [[Utilisateur:Jiel|Jiel Beaumadier]]    (jiel # lea-linux.org)&lt;br /&gt;
* Trésorier : Jean-Thomas Muyl    (jean-thomas.muyl # lea-linux.org)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Membres fondateurs :&amp;lt;/u&amp;gt;&lt;br /&gt;
* Frédéric Bonnaud    (fred # lea-linux.org)&lt;br /&gt;
* [[Utilisateur:LeaJice|Jean-Christophe Cardot]]    (jice # lea-linux.org)&lt;br /&gt;
* Anne Nicolas    (anne # lea-linux.org)&lt;br /&gt;
* Serge Tchesmeli    - démissionnaire&lt;br /&gt;
&lt;br /&gt;
Les contributeurs des tutoriels et des astuces sont mentionnés sur chaque page, ils sont trop nombreux pour les mentionner ici. Reportez-vous sur chaque page pour contacter le ou les auteurs.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Modérateur hyperactif :&amp;lt;/u&amp;gt; Emmanuel Fleury&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Logo :&amp;lt;/u&amp;gt; Jean-Jacques Perrocheau&lt;br /&gt;
&lt;br /&gt;
= IRC =&lt;br /&gt;
&lt;br /&gt;
Pour chatter en direct, Léa-Linux a un [http://www.lea-linux.org/documentations/index.php/Fiches:Internet-fichexchat canal IRC] : #lealinux sur le serveur irc.lea-linux.org.&lt;/div&gt;</summary>
		<author><name>LeaJice</name></author>
	</entry>
	<entry>
		<id>https://lea-linux.org/docs/index.php?title=Contact&amp;diff=18634</id>
		<title>Contact</title>
		<link rel="alternate" type="text/html" href="https://lea-linux.org/docs/index.php?title=Contact&amp;diff=18634"/>
		<updated>2011-01-04T20:19:29Z</updated>

		<summary type="html">&lt;p&gt;LeaJice : /* Contacts */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= A propos de Léa-Linux =&lt;br /&gt;
&lt;br /&gt;
[http://lea-linux.org Léa-Linux] est un site d&#039;aide collaboratif pour le système d&#039;exploitation GNU/Linux. Il contient des documentations et des tutoriels rédigés par de nombreux contributeurs francophones bénévoles. C&#039;est un site généraliste, qui n&#039;est dédié à aucune distribution en particulier.&lt;br /&gt;
&lt;br /&gt;
Depuis 1998, Léa-Linux tente de rendre GNU/Linux accessible au plus grand nombre. Le site étant un wiki, chacun est libre d&#039;éditer et de modifier le contenu, ou de proposer de nouveaux articles qui seront publiés après relecture. En plus de la documentation, Léa-Linux propose également des forums d&#039;aide en ligne, des listes de diffusion et un canal IRC.&lt;br /&gt;
&lt;br /&gt;
Léa-Linux est aujourd&#039;hui principalement animé par le conseil d&#039;administration de l&#039;association éponyme.&lt;br /&gt;
&lt;br /&gt;
= Contacts =&lt;br /&gt;
&lt;br /&gt;
 boîte générique : admin # lea-linux.org&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Bureau de l&#039;association Léa-Linux :&amp;lt;/u&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Président : Benjamin Gigon    (bgigon # lea-linux.org)&lt;br /&gt;
* Vice-Président : Stéphane Este-Gracias    (st # lea-linux.org)&lt;br /&gt;
* Secrétaire : [[Utilisateur:Jiel|Jiel Beaumadier]]    (jiel # lea-linux.org)&lt;br /&gt;
* Trésorier : Jean-Thomas Muyl    (jean-thomas.muyl # lea-linux.org)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Membres fondateurs :&amp;lt;/u&amp;gt;&lt;br /&gt;
* Frédéric Bonnaud    (fred # lea-linux.org)&lt;br /&gt;
* [[Utilisateur:Jice|Jean-Christophe Cardot]]    (jice # lea-linux.org)&lt;br /&gt;
* Anne Nicolas    (anne # lea-linux.org)&lt;br /&gt;
* Serge Tchesmeli    - démissionnaire&lt;br /&gt;
&lt;br /&gt;
Les contributeurs des tutoriels et des astuces sont mentionnés sur chaque page, ils sont trop nombreux pour les mentionner ici. Reportez-vous sur chaque page pour contacter le ou les auteurs.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Modérateur hyperactif :&amp;lt;/u&amp;gt; Emmanuel Fleury&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Logo :&amp;lt;/u&amp;gt; Jean-Jacques Perrocheau&lt;br /&gt;
&lt;br /&gt;
= IRC =&lt;br /&gt;
&lt;br /&gt;
Pour chatter en direct, Léa-Linux a un [http://www.lea-linux.org/documentations/index.php/Fiches:Internet-fichexchat canal IRC] : #lealinux sur le serveur irc.lea-linux.org.&lt;/div&gt;</summary>
		<author><name>LeaJice</name></author>
	</entry>
	<entry>
		<id>https://lea-linux.org/docs/index.php?title=Utilisateur:Leajice&amp;diff=18633</id>
		<title>Utilisateur:Leajice</title>
		<link rel="alternate" type="text/html" href="https://lea-linux.org/docs/index.php?title=Utilisateur:Leajice&amp;diff=18633"/>
		<updated>2011-01-04T20:17:11Z</updated>

		<summary type="html">&lt;p&gt;LeaJice : Page créée avec « Bonjour à tous les pingouins et les autres !  Co-fondateur de Léa avec Serge en 1999, j&amp;#039;ai fait grandir le site qui est maintenant passé en de (bonnes) nouvelles mains. Ex... »&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Bonjour à tous les pingouins et les autres !&lt;br /&gt;
&lt;br /&gt;
Co-fondateur de Léa avec Serge en 1999, j&#039;ai fait grandir le site qui est maintenant passé en de (bonnes) nouvelles mains. Ex-président de l&#039;association et toujours membre fondateur.&lt;br /&gt;
&lt;br /&gt;
N&#039;hésitez pas à m&#039;écrire : jice &amp;lt;chez&amp;gt; lea-linux &amp;lt;point&amp;gt; org.&lt;br /&gt;
&lt;br /&gt;
Pour plus d&#039;infos veuillez visiter [http://jice.free.fr ma page perso] ou le [http://blog.lilaetleloup.com blog de ma moitié].&lt;br /&gt;
&lt;br /&gt;
JC&lt;/div&gt;</summary>
		<author><name>LeaJice</name></author>
	</entry>
	<entry>
		<id>https://lea-linux.org/docs/index.php?title=EeePC&amp;diff=17920</id>
		<title>EeePC</title>
		<link rel="alternate" type="text/html" href="https://lea-linux.org/docs/index.php?title=EeePC&amp;diff=17920"/>
		<updated>2010-04-04T03:55:54Z</updated>

		<summary type="html">&lt;p&gt;LeaJice : /* logiciels */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Configurer votre matériel]]&lt;br /&gt;
= EeePC =&lt;br /&gt;
&amp;lt;div class=&amp;quot;leatitre&amp;quot;&amp;gt;l&#039;Eee PC d&#039;Asus&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;leapar&amp;quot;&amp;gt;par Jice&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;leadesc&amp;quot;&amp;gt;Un ultraportable sous Linux, et à ce prix là, Léa ne pouvait pas laisser passer ça, (surtout après avoir été la vedette du stand Léa du salon Solutions Linux 2008) !&amp;lt;/div&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Alors ca y est j&#039;ai craqué pour un [http://fr.wikipedia.org/wiki/EeePC Eee PC] (701). Enfin, ca fait un bout de temps déjà. Connaisseur de Linux depuis 1994, et aujourd&#039;hui utilisateur de Mandriva, je l&#039;ai pourtant laissé sous sa distribution de base, une Xandros modifiée par Asus, et en mode facile (Easy Mode) qui plus est. Pourquoi ? Car cela me convient ;-)&lt;br /&gt;
&lt;br /&gt;
Avec quelques outils dont on parlera plus bas, et quelques améliorations que je détaillerai aussi (par exemple l&#039;utilisation du bluetooth pour transférer des fichiers avec mon téléphone portable), c&#039;est parfait pour l&#039;utilisation que j&#039;en ai : surfer avec [http://www.mozilla-europe.org/fr/products/firefox/ Firefox], messagerie instantanée avec [http://www.pidgin.im/ Pidgin] et webcam avec Skype - je suis expatrié, bien sûr la bureautique avec [http://fr.openoffice.org/ OpenOffice.org] (le clavier est petit mais très utilisable). J&#039;ai aussi installé Google Earth, et je fragge même des bots avec [http://assault.cubers.net/ Assault cube] pour me défouler le soir... [http://amarok.kde.org/ Amarok] est parfait pour écouter ma musique (dois-je préciser que j&#039;ai ajouté une SDHC de 16 Go ?) ; j&#039;ai même visionné un film en avion depuis mon disque dur externe 2.5 pouces...&lt;br /&gt;
&lt;br /&gt;
Bref, finalement beaucoup d&#039;utilisation pour peu de bidouille, et aussi l&#039;irremplaçable [[La distribution Linux Xandros de l&#039;EeePC#Le démarrage (séquence de boot)|temps de démarrage de Xandros]] par rapport aux autres distributions sur EeePC me font pour le moment rester fidèle aux logiciels livrés avec mon joujou (ceci dit je testerai la Mandriva 2008.1 sur ma carte SD, car on en dit beaucoup de bien ; j&#039;en parlerai aussi ici :-)&lt;br /&gt;
&lt;br /&gt;
Si vous avez des idées d&#039;articles, vous pouvez participer en les écrivant ici (Léa est un wiki après tout !), ou poser des questions et faire des demandes dans la [[Discuter:EeePC|page de discussion]].&lt;br /&gt;
&lt;br /&gt;
== Anatomie ==&lt;br /&gt;
&lt;br /&gt;
[[Anatomie de l&#039;Eee PC]] : photos et caractéristiques techniques.&lt;br /&gt;
&lt;br /&gt;
== Outils ==&lt;br /&gt;
[[Launcher tools#Simple_UI_Editor|Simple UI Editor]] et [[Easy Mode Editor]] : l&#039;interface d&#039;Asus Easy Mode n&#039;est pas configurable simplement (ajouter une icône, créer un sous-répertoire...). Ces logiciels comblent ce manque.&lt;br /&gt;
&lt;br /&gt;
[[Launcher tools]] : créer une nouvelle icône au format EeePC, rafraîchir l&#039;interface Easy Mode sans relancer la machine ni même X Window...&lt;br /&gt;
&lt;br /&gt;
[[TweakEEE]] : plein de bidouilles automatisées, des installations de logiciels supplémentaires...&lt;br /&gt;
&lt;br /&gt;
[[Theeemer]] : changer le thème graphique de l&#039;EeePC (fond d&#039;écrans, gestionnaire de fenêtres, couleurs...)&lt;br /&gt;
&lt;br /&gt;
[[XanSet]] : un autre outil de personnalisation de Asus Launcher&lt;br /&gt;
&lt;br /&gt;
== Tutoriels et Trucs &amp;amp; astuces ==&lt;br /&gt;
&lt;br /&gt;
les outils présentés ci-dessus on rendus inutiles un grand nombre de tutoriels qu&#039;on trouve sur le net. Néanmoins, il reste quelques manipulations à faire manuellement.&lt;br /&gt;
&lt;br /&gt;
=== introduction à Linux ===&lt;br /&gt;
&lt;br /&gt;
[[Intro-index|Découvrir Linux]]&lt;br /&gt;
&lt;br /&gt;
[[Fiches:La ligne de commande|Introduction à la ligne de commande Linux]]. Tapez &amp;lt;key&amp;gt;Ctrl+Alt+T&amp;lt;/key&amp;gt;, le &amp;quot;terminal&amp;quot; va s&#039;ouvrir. Lisez l&#039;article pour le maîtriser ! Voir aussi [[Intro-faqdeb2#Connexion en mode texte, ou &amp;quot;de l&#039;utilité de connaître quelques notions de shell&amp;quot;|cet article]], ou l&#039;article plus complet sur le [[Shell]]&lt;br /&gt;
&lt;br /&gt;
[[La distribution Linux Xandros de l&#039;EeePC]] : plus d&#039;infos sur le Linux présent dans l&#039;EeePC et ses particularités.&lt;br /&gt;
&lt;br /&gt;
=== configuration de l&#039;EeePC ===&lt;br /&gt;
&lt;br /&gt;
[[Bluetooth sur EeePC]]&lt;br /&gt;
&lt;br /&gt;
[[Lancement automatique de logiciels au démarrage sur EeePC]]&lt;br /&gt;
&lt;br /&gt;
[[Rescue mode EeePC|Votre Eee PC ne démarre plus ? Démarrez-le en mode sans échec pour corriger les problèmes]]&lt;br /&gt;
&lt;br /&gt;
[[Modifier ou ajouter des raccourcis clavier sur l&#039;EeePC]]&lt;br /&gt;
&lt;br /&gt;
=== trucs et astuces EeePC ===&lt;br /&gt;
&lt;br /&gt;
[[Déplacer une fenêtre trop grande sur l&#039;EeePC]]&lt;br /&gt;
&lt;br /&gt;
[[Activer et désactiver la webcam de l&#039;EeePC]]&lt;br /&gt;
&lt;br /&gt;
[[Empêcher la détection automatique des périphériques USB et de la carte SD au démarrage de l&#039;EeePC]]&lt;br /&gt;
&lt;br /&gt;
[[Installer des logiciels sur un support externe (SD, USB), avec une icône dans le mode Easy de l&#039;EeePC apparaissant automatiquement]]&lt;br /&gt;
&lt;br /&gt;
=== logiciels ===&lt;br /&gt;
&lt;br /&gt;
[[Installer des logiciels sur EeePC et économiser de la place sur le disque principal]]&amp;lt;br /&amp;gt;&lt;br /&gt;
Exemples de xchat et Frozen-Bubble.&lt;br /&gt;
&lt;br /&gt;
Cas particuliers :&lt;br /&gt;
&lt;br /&gt;
* [[Un FPS sur l&#039;EeePC : Assault Cube]]&lt;br /&gt;
&lt;br /&gt;
* [[GoogleEarth sur l&#039;EeePC]]&lt;br /&gt;
&lt;br /&gt;
* [[Installer Firefox 3 ou 3.1 sur EeePC]]&lt;br /&gt;
&lt;br /&gt;
* [[Installer des logiciels sur EeePC et économiser de la place sur le disque principal#Installation normale de Frozen-Bubble|Installer Frozen-Bubble (Bulle gelée ;-) sur EeePC]]&lt;br /&gt;
&lt;br /&gt;
[[Mettre à jour vers Flash 10 sur EeePC Xandros]]&lt;br /&gt;
&lt;br /&gt;
== Liens ==&lt;br /&gt;
&lt;br /&gt;
=== Les blogs ===&lt;br /&gt;
Je les lis presque tous les jours, car le monde de l&#039;EeePC bouge vite.&lt;br /&gt;
* {{flag-fr}} [http://www.blogeee.net/ Blogeee.net]&lt;br /&gt;
* {{flag-fr}} [http://www.eeepc-logiciels.com/ EeePc Logiciels]&lt;br /&gt;
* {{flag-fr}} [http://blog.wikeee.fr/ Wikeee]&lt;br /&gt;
* {{flag-fr}} [http://www.eee-pc.fr/ EeePc-FR]&lt;br /&gt;
* {{flag-fr}} [http://leeenux.blogspot.com/ Leeenux]&lt;br /&gt;
* {{flag-fr}} [http://tuxeee.org/ Tuxeee]&lt;br /&gt;
* {{flag-fr}} [http://nawer.freecontrib.org/index.php BlogORabais]&lt;br /&gt;
* {{flag-en}} [http://www.eeeuser.com/ EeeUser.com]&lt;br /&gt;
* {{flag-en}} [http://www.3eportal.com/ 3eportal], des outils pour EeePC&lt;br /&gt;
&lt;br /&gt;
=== Les wikis ===&lt;br /&gt;
Ils regroupent des tutoriels pour aller plus loin.&lt;br /&gt;
* {{flag-fr}} [http://wikeee.fr/index.php/Accueil Wikeee]&lt;br /&gt;
* {{flag-en}} [http://wiki.eeeuser.com/ EeeUser wiki]&lt;br /&gt;
&lt;br /&gt;
=== Les Forums dediés === &lt;br /&gt;
Un bon endroit pour discutter avec d&#039;autre possesseurs d&#039;EEE PC et de netbook &lt;br /&gt;
*{{flag-fr}} [http://forum.eee-pc.fr/ Forum EEE-PC]&lt;br /&gt;
*{{flag-fr}} [http://www.blogeee.net/forum/ Forum BlogEEE]&lt;/div&gt;</summary>
		<author><name>LeaJice</name></author>
	</entry>
	<entry>
		<id>https://lea-linux.org/docs/index.php?title=Installer_Firefox_3_ou_3.1_sur_EeePC&amp;diff=17697</id>
		<title>Installer Firefox 3 ou 3.1 sur EeePC</title>
		<link rel="alternate" type="text/html" href="https://lea-linux.org/docs/index.php?title=Installer_Firefox_3_ou_3.1_sur_EeePC&amp;diff=17697"/>
		<updated>2010-03-19T04:08:59Z</updated>

		<summary type="html">&lt;p&gt;LeaJice : /* Installer Firefox 3 ou 3.1 sur EeePC */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Installer Firefox 3 ou 3.1 sur EeePC=&lt;br /&gt;
Le problème de l&#039;installation de Firefox 3 sur EeePC c&#039;est que la version de GTK (paquet libgtk2.0-0) présente dans l&#039;EeePC est trop ancienne (2.8.20-7 au lieu de 2.10) ; dans ces conditions, Firefox refusera de démarrer.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Note&amp;lt;/u&amp;gt; : ce tutoriel fonctionne toujours (19/3/2010) avec Firefox 3.6. La différence est juste de télécharger l&#039;archive de la dernière version de Firefox.&lt;br /&gt;
&lt;br /&gt;
==Méthode rapide==&lt;br /&gt;
Elle consiste à installer une version 2.10 de GTK, spécialement pour Firefox. C&#039;est à dire que les autres logiciels continueront à utiliser la version 2.8. De plus, elle ne désinstalle pas Firefox 2, mais s&#039;installe à côté.&lt;br /&gt;
&lt;br /&gt;
C&#039;est la méthode la moins intrusive, car vous pouvez revenir en arrière très simplement, et cela ne modifie pas votre système. De plus, si comme moi vous êtes un peu juste en disque &amp;quot;dur&amp;quot;, cela permet de l&#039;installer sur un support externe (carte SD, clef USB...) et d&#039;économiser quelques méga-octets.&lt;br /&gt;
&lt;br /&gt;
Comme dans les autres tutoriels, le symbole &amp;quot;$&amp;quot; ci-dessous en début de ligne représente l&#039;invite de commande du terminal, ouvert par &amp;lt;key&amp;gt;Ctrl+Alt+T&amp;lt;/key&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Installation de GTK 2.10===&lt;br /&gt;
Téléchargez dans le répertoire temporaire le paquet de la version 2.10,&lt;br /&gt;
&amp;lt;code multi&amp;gt;&lt;br /&gt;
$ cd /tmp&lt;br /&gt;
$ sudo wget http://download.tuxfamily.org/xepcrepo/pool-main/gtk-2.10/libgtk2.0-0_2.10.13-2~bpo.1_i386.deb&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
puis décompressez-le dans /opt, dans le sous-répertoire gtk2.10 (par exemple) :&lt;br /&gt;
&amp;lt;code multi&amp;gt;&lt;br /&gt;
$ cd /opt&lt;br /&gt;
$ sudo mkdir gtk2.10&lt;br /&gt;
$ dpkg-deb -x /tmp/libgtk2.0-0_2.10.13-2~bpo.1_i386.deb gtk2.10&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Installation de Firefox===&lt;br /&gt;
Téléchargez la dernière version de Firefox depuis http://www.mozilla-europe.org/fr/ ou la dernière version bêta depuis http://www.mozilla.com/en-US/firefox/all-beta.html (pour ma part j&#039;ai pris la bêta 3.1b2 depuis cette dernière page, qui dispose d&#039;une version en français), et l&#039;ai stockée dans /tmp.&lt;br /&gt;
&lt;br /&gt;
Décompressez-le dans /tmp&lt;br /&gt;
&amp;lt;code multi&amp;gt;&lt;br /&gt;
$ cd /tmp&lt;br /&gt;
$ tar jxf /tmp/firefox-3.1b2.tar.bz2&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
puis déplacez-le en le renommant vers /opt (car /opt/firefox existe déjà, c&#039;est la version 2 ; notez que remplacer ce répertoire par celui de Firefox 3 ne fera pas gagner de place, voir [[La distribution Linux Xandros de l&#039;EeePC#Le disque interne (UnionFS)|cet article]] pour plus d&#039;explications) :&lt;br /&gt;
&amp;lt;code multi&amp;gt;&lt;br /&gt;
$ mv /tmp/firefox /opt/firefox3 (par exemple).&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il ne reste qu&#039;à éditer le script &amp;lt;code&amp;gt;/opt/firefox3/firefox&amp;lt;/code&amp;gt; qui permet de lancer Firefox afin de lui dire d&#039;utiliser la version de GTK que nous venons d&#039;installer.&lt;br /&gt;
&amp;lt;code multi&amp;gt;&lt;br /&gt;
$ sudo kwrite /opt/firefox3/firefox&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
(pour ma part je préfère [[Software-soft edit-vi|l&#039;éditeur vi]] et chacun est ici libre de remplacer kwrite par vi, nano ou ce qu&#039;il préfère.)&lt;br /&gt;
&lt;br /&gt;
Bref, il suffit d&#039;insérer au début du fichier la ligne &amp;lt;code&amp;gt;export LD_LIBRARY_PATH=...&amp;lt;/code&amp;gt; comme ci-dessous, et de sauver le fichier.&lt;br /&gt;
&amp;lt;code multi&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
#&lt;br /&gt;
export LD_LIBRARY_PATH=&amp;quot;/opt/gtk2.10/usr/lib/&amp;quot;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Avant le premier lancement===&lt;br /&gt;
&lt;br /&gt;
Je vous conseille de faire un backup de votre profil Firefox 2 afin de pouvoir y revenir en cas de besoin, par les commandes ci-dessous :&lt;br /&gt;
&amp;lt;code multi&amp;gt;&lt;br /&gt;
$ cd /home/user&lt;br /&gt;
$ cp -Ra .mozilla .mozilla2&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ainsi en cas de problème, vous pourrez exécuter les commandes suivantes pour récupérer votre profil Firefox 2 :&lt;br /&gt;
&amp;lt;code multi&amp;gt;&lt;br /&gt;
$ cd /home/user&lt;br /&gt;
$ rm -Rf .mozilla&lt;br /&gt;
$ cp -Ra .mozilla2 .mozilla&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Voilà, vous pouvez maintenant lancer Firefox 3 par la commande :&lt;br /&gt;
&amp;lt;code multi&amp;gt;&lt;br /&gt;
$ /opt/firefox3/firefox&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
et profiter de ce navigateur, qui améliore vraiment la navigation sur l&#039;EeePC, en particulier grâce à la possibilité de zoomer une page avec &amp;lt;key&amp;gt;Ctrl+Alt+-&amp;lt;/key&amp;gt; et &amp;lt;key&amp;gt;Ctrl+Alt+plus&amp;lt;/key&amp;gt;, qui zoome le texte mais aussi les images, et permet, en combinaison avec &amp;lt;key&amp;gt;F11&amp;lt;/key&amp;gt; de faire rentrer les sites dans la largeur de l&#039;écran de l&#039;EeePC (voir l&#039;exemple ci-dessous). C&#039;est vraiment une possibilité fantastique pour notre petit écran. De plus, le navigateur se souvient du niveau de zoom utilisé pour chaque site !&lt;br /&gt;
&lt;br /&gt;
[[Image:ff3_rue89.png|center|500px|Le site rue89.com avec un zoom moindre]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Je vous conseille de plus d&#039;utiliser les [[Launcher tools]] afin de créer une jolie icône pour Firefox 3 dans votre onglet internet !&amp;lt;br /&amp;gt;&lt;br /&gt;
[[Image:internetff3.png|thumb|Le mode Easy de l&#039;EeePC, avec le nouvel icône Firefox]]&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Utiliser Firefox 2 ET Firefox 3 alternativement===&lt;br /&gt;
&lt;br /&gt;
Vu que les 2 Firefox restent installés, nous allons modifier les scripts de démarrage de chacun afin de pouvoir utiliser les 2 versions (mais pas en même temps) Les modifications concernent des vérifications afin de ne pas lancer en même temps les 2 versions, et le positionnement d&#039;un lien ~/.mozilla vers le répertoire contenant le profil de Firefox (en effet, le profil n&#039;est pas compatible entre les 2 versions, ce qui empêche de les lancer en même temps).&lt;br /&gt;
&lt;br /&gt;
Nous allons donc créer 2 répertoires de profil Firefox.&lt;br /&gt;
Si vous avez suivi le tutoriel jusqu&#039;ici, vous avez :&lt;br /&gt;
;~/.mozilla : profil de Firefox 3&lt;br /&gt;
;~/.mozilla2 : profil sauvegardé de Firefox 2&lt;br /&gt;
(sinon faites-le ;-)&lt;br /&gt;
&lt;br /&gt;
Nous allons donc renommer le profil de Firefox 3 en ~/.mozilla3 :&lt;br /&gt;
&amp;lt;code multi&amp;gt;&lt;br /&gt;
$ cd&lt;br /&gt;
$ mv .mozilla .mozilla3&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
puis faire un lien vers un profil :&lt;br /&gt;
&amp;lt;code multi&amp;gt;&lt;br /&gt;
$ ln -s .mozilla3 .mozilla&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Enfin, nous allons modifier le début des 2 scripts de lancement comme suit :&lt;br /&gt;
&lt;br /&gt;
;/opt/firefox/firefox (Firefox 2)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code multi&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
#&lt;br /&gt;
# début modifications Léa&lt;br /&gt;
# si Firefox 3 tourne déjà, lui repasser le boulot&lt;br /&gt;
if `ps x|grep -v grep|grep -q /opt/firefox3/firefox-bin` ; then&lt;br /&gt;
        echo Firefox 3 is already running. Cannot run Firefox 2 concurrenly.&lt;br /&gt;
        echo Running Firefox 3.&lt;br /&gt;
	exec /opt/firefox3/firefox $@&lt;br /&gt;
fi&lt;br /&gt;
# positionne le bon profil&lt;br /&gt;
if [ -L ~/.mozilla ] ; then&lt;br /&gt;
        rm ~/.mozilla&lt;br /&gt;
        ln -s ~/.mozilla2 ~/.mozilla&lt;br /&gt;
fi&lt;br /&gt;
# fin modifications Léa&lt;br /&gt;
&lt;br /&gt;
# ***** BEGIN LICENSE BLOCK *****&lt;br /&gt;
# Version: MPL 1.1/GPL 2.0/LGPL 2.1&lt;br /&gt;
#&lt;br /&gt;
(suite normale du script)&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;/opt/firefox3/firefox (Firefox 3)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code multi&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
#&lt;br /&gt;
# début modifications Léa&lt;br /&gt;
# si Firefox 2 tourne déjà, lui repasser le boulot&lt;br /&gt;
if `ps x|grep -v grep|grep -q /opt/firefox/firefox-bin` ; then&lt;br /&gt;
	echo Firefox 2 is already running. Cannot run Firefox 3 concurrenly.&lt;br /&gt;
	echo Running Firefox 2.&lt;br /&gt;
	exec /opt/firefox/firefox $@&lt;br /&gt;
fi&lt;br /&gt;
# utilise la nouvelle librairie GTK&lt;br /&gt;
export LD_LIBRARY_PATH=&amp;quot;/opt2/gtk2.10/usr/lib/&amp;quot;&lt;br /&gt;
# positionne le bon profil&lt;br /&gt;
if [ -L ~/.mozilla ] ; then&lt;br /&gt;
	rm ~/.mozilla&lt;br /&gt;
	ln -s ~/.mozilla3 ~/.mozilla&lt;br /&gt;
fi&lt;br /&gt;
# fin modifications Léa&lt;br /&gt;
# ***** BEGIN LICENSE BLOCK *****&lt;br /&gt;
# Version: MPL 1.1/GPL 2.0/LGPL 2.1&lt;br /&gt;
#&lt;br /&gt;
(suite normale du script)&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Et voilà ! Lorsque vous aurez Firefox 3 de lancé, et que vous cliquerez sur l&#039;icône Wikipedia (par exemple), ce site s&#039;ouvrira de façon normale dans Firefox 3 :-)&lt;br /&gt;
&lt;br /&gt;
==Méthode &amp;quot;propre&amp;quot;==&lt;br /&gt;
Le dépôt &#039;&#039;&#039;xepc&#039;&#039;&#039; (Voir [[La distribution Linux Xandros de l&#039;EeePC#Ajouter des dépôts de logiciels|qu&#039;est-ce qu&#039;un dépôt]] et [[La distribution Linux Xandros de l&#039;EeePC#Dépôts spécifiques EeePC|le dépôt xepc]]) dispose maintenant d&#039;une libgtk2.0-0 mise à jour, ainsi que de Firefox 3.0.&lt;br /&gt;
&lt;br /&gt;
Si vous avez installé ce dépôt, vous pouvez entrer les commandes suivantes afin de mettre à jour GTK puis Firefox.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code multi&amp;gt;&lt;br /&gt;
$ sudo apt-get install libgtk2.0-0 gtk2-engines&lt;br /&gt;
$ sudo apt-get install firefox&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cependant, contrairement à la première méthode présentée, le retour arrière est difficile, car les GTK et Firefox d&#039;origine ne seront plus accessibles...&lt;br /&gt;
&lt;br /&gt;
Vous pouvez également ne mettre à jour que GTK (ne faire que la première commande), puis installer manuellement (mais cette fois sans modifier le script qui lance Firefox) la dernière version de Firefox dans /opt, ainsi que nous l&#039;avons fait plus haut.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr /&amp;gt;&lt;br /&gt;
[[EeePC|Retour à la page EeePC]]&lt;br /&gt;
&amp;lt;hr /&amp;gt;&lt;/div&gt;</summary>
		<author><name>LeaJice</name></author>
	</entry>
	<entry>
		<id>https://lea-linux.org/docs/index.php?title=Installer_Firefox_3_ou_3.1_sur_EeePC&amp;diff=17696</id>
		<title>Installer Firefox 3 ou 3.1 sur EeePC</title>
		<link rel="alternate" type="text/html" href="https://lea-linux.org/docs/index.php?title=Installer_Firefox_3_ou_3.1_sur_EeePC&amp;diff=17696"/>
		<updated>2010-03-19T04:07:51Z</updated>

		<summary type="html">&lt;p&gt;LeaJice : /* Installer Firefox 3 ou 3.1 sur EeePC */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Installer Firefox 3 ou 3.1 sur EeePC=&lt;br /&gt;
Le problème de l&#039;installation de Firefox 3 sur EeePC c&#039;est que la version de GTK (paquet libgtk2.0-0) présente dans l&#039;EeePC est trop ancienne (2.8.20-7 au lieu de 2.10) ; dans ces conditions, Firefox refusera de démarrer.&lt;br /&gt;
&lt;br /&gt;
*Note* : ce tutoriel fonctionne toujours (19/3/2010) avec Firefox 3.6. La différence est juste de télécharger l&#039;archive de la dernière version de Firefox.&lt;br /&gt;
&lt;br /&gt;
==Méthode rapide==&lt;br /&gt;
Elle consiste à installer une version 2.10 de GTK, spécialement pour Firefox. C&#039;est à dire que les autres logiciels continueront à utiliser la version 2.8. De plus, elle ne désinstalle pas Firefox 2, mais s&#039;installe à côté.&lt;br /&gt;
&lt;br /&gt;
C&#039;est la méthode la moins intrusive, car vous pouvez revenir en arrière très simplement, et cela ne modifie pas votre système. De plus, si comme moi vous êtes un peu juste en disque &amp;quot;dur&amp;quot;, cela permet de l&#039;installer sur un support externe (carte SD, clef USB...) et d&#039;économiser quelques méga-octets.&lt;br /&gt;
&lt;br /&gt;
Comme dans les autres tutoriels, le symbole &amp;quot;$&amp;quot; ci-dessous en début de ligne représente l&#039;invite de commande du terminal, ouvert par &amp;lt;key&amp;gt;Ctrl+Alt+T&amp;lt;/key&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Installation de GTK 2.10===&lt;br /&gt;
Téléchargez dans le répertoire temporaire le paquet de la version 2.10,&lt;br /&gt;
&amp;lt;code multi&amp;gt;&lt;br /&gt;
$ cd /tmp&lt;br /&gt;
$ sudo wget http://download.tuxfamily.org/xepcrepo/pool-main/gtk-2.10/libgtk2.0-0_2.10.13-2~bpo.1_i386.deb&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
puis décompressez-le dans /opt, dans le sous-répertoire gtk2.10 (par exemple) :&lt;br /&gt;
&amp;lt;code multi&amp;gt;&lt;br /&gt;
$ cd /opt&lt;br /&gt;
$ sudo mkdir gtk2.10&lt;br /&gt;
$ dpkg-deb -x /tmp/libgtk2.0-0_2.10.13-2~bpo.1_i386.deb gtk2.10&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Installation de Firefox===&lt;br /&gt;
Téléchargez la dernière version de Firefox depuis http://www.mozilla-europe.org/fr/ ou la dernière version bêta depuis http://www.mozilla.com/en-US/firefox/all-beta.html (pour ma part j&#039;ai pris la bêta 3.1b2 depuis cette dernière page, qui dispose d&#039;une version en français), et l&#039;ai stockée dans /tmp.&lt;br /&gt;
&lt;br /&gt;
Décompressez-le dans /tmp&lt;br /&gt;
&amp;lt;code multi&amp;gt;&lt;br /&gt;
$ cd /tmp&lt;br /&gt;
$ tar jxf /tmp/firefox-3.1b2.tar.bz2&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
puis déplacez-le en le renommant vers /opt (car /opt/firefox existe déjà, c&#039;est la version 2 ; notez que remplacer ce répertoire par celui de Firefox 3 ne fera pas gagner de place, voir [[La distribution Linux Xandros de l&#039;EeePC#Le disque interne (UnionFS)|cet article]] pour plus d&#039;explications) :&lt;br /&gt;
&amp;lt;code multi&amp;gt;&lt;br /&gt;
$ mv /tmp/firefox /opt/firefox3 (par exemple).&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il ne reste qu&#039;à éditer le script &amp;lt;code&amp;gt;/opt/firefox3/firefox&amp;lt;/code&amp;gt; qui permet de lancer Firefox afin de lui dire d&#039;utiliser la version de GTK que nous venons d&#039;installer.&lt;br /&gt;
&amp;lt;code multi&amp;gt;&lt;br /&gt;
$ sudo kwrite /opt/firefox3/firefox&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
(pour ma part je préfère [[Software-soft edit-vi|l&#039;éditeur vi]] et chacun est ici libre de remplacer kwrite par vi, nano ou ce qu&#039;il préfère.)&lt;br /&gt;
&lt;br /&gt;
Bref, il suffit d&#039;insérer au début du fichier la ligne &amp;lt;code&amp;gt;export LD_LIBRARY_PATH=...&amp;lt;/code&amp;gt; comme ci-dessous, et de sauver le fichier.&lt;br /&gt;
&amp;lt;code multi&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
#&lt;br /&gt;
export LD_LIBRARY_PATH=&amp;quot;/opt/gtk2.10/usr/lib/&amp;quot;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Avant le premier lancement===&lt;br /&gt;
&lt;br /&gt;
Je vous conseille de faire un backup de votre profil Firefox 2 afin de pouvoir y revenir en cas de besoin, par les commandes ci-dessous :&lt;br /&gt;
&amp;lt;code multi&amp;gt;&lt;br /&gt;
$ cd /home/user&lt;br /&gt;
$ cp -Ra .mozilla .mozilla2&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ainsi en cas de problème, vous pourrez exécuter les commandes suivantes pour récupérer votre profil Firefox 2 :&lt;br /&gt;
&amp;lt;code multi&amp;gt;&lt;br /&gt;
$ cd /home/user&lt;br /&gt;
$ rm -Rf .mozilla&lt;br /&gt;
$ cp -Ra .mozilla2 .mozilla&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Voilà, vous pouvez maintenant lancer Firefox 3 par la commande :&lt;br /&gt;
&amp;lt;code multi&amp;gt;&lt;br /&gt;
$ /opt/firefox3/firefox&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
et profiter de ce navigateur, qui améliore vraiment la navigation sur l&#039;EeePC, en particulier grâce à la possibilité de zoomer une page avec &amp;lt;key&amp;gt;Ctrl+Alt+-&amp;lt;/key&amp;gt; et &amp;lt;key&amp;gt;Ctrl+Alt+plus&amp;lt;/key&amp;gt;, qui zoome le texte mais aussi les images, et permet, en combinaison avec &amp;lt;key&amp;gt;F11&amp;lt;/key&amp;gt; de faire rentrer les sites dans la largeur de l&#039;écran de l&#039;EeePC (voir l&#039;exemple ci-dessous). C&#039;est vraiment une possibilité fantastique pour notre petit écran. De plus, le navigateur se souvient du niveau de zoom utilisé pour chaque site !&lt;br /&gt;
&lt;br /&gt;
[[Image:ff3_rue89.png|center|500px|Le site rue89.com avec un zoom moindre]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Je vous conseille de plus d&#039;utiliser les [[Launcher tools]] afin de créer une jolie icône pour Firefox 3 dans votre onglet internet !&amp;lt;br /&amp;gt;&lt;br /&gt;
[[Image:internetff3.png|thumb|Le mode Easy de l&#039;EeePC, avec le nouvel icône Firefox]]&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Utiliser Firefox 2 ET Firefox 3 alternativement===&lt;br /&gt;
&lt;br /&gt;
Vu que les 2 Firefox restent installés, nous allons modifier les scripts de démarrage de chacun afin de pouvoir utiliser les 2 versions (mais pas en même temps) Les modifications concernent des vérifications afin de ne pas lancer en même temps les 2 versions, et le positionnement d&#039;un lien ~/.mozilla vers le répertoire contenant le profil de Firefox (en effet, le profil n&#039;est pas compatible entre les 2 versions, ce qui empêche de les lancer en même temps).&lt;br /&gt;
&lt;br /&gt;
Nous allons donc créer 2 répertoires de profil Firefox.&lt;br /&gt;
Si vous avez suivi le tutoriel jusqu&#039;ici, vous avez :&lt;br /&gt;
;~/.mozilla : profil de Firefox 3&lt;br /&gt;
;~/.mozilla2 : profil sauvegardé de Firefox 2&lt;br /&gt;
(sinon faites-le ;-)&lt;br /&gt;
&lt;br /&gt;
Nous allons donc renommer le profil de Firefox 3 en ~/.mozilla3 :&lt;br /&gt;
&amp;lt;code multi&amp;gt;&lt;br /&gt;
$ cd&lt;br /&gt;
$ mv .mozilla .mozilla3&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
puis faire un lien vers un profil :&lt;br /&gt;
&amp;lt;code multi&amp;gt;&lt;br /&gt;
$ ln -s .mozilla3 .mozilla&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Enfin, nous allons modifier le début des 2 scripts de lancement comme suit :&lt;br /&gt;
&lt;br /&gt;
;/opt/firefox/firefox (Firefox 2)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code multi&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
#&lt;br /&gt;
# début modifications Léa&lt;br /&gt;
# si Firefox 3 tourne déjà, lui repasser le boulot&lt;br /&gt;
if `ps x|grep -v grep|grep -q /opt/firefox3/firefox-bin` ; then&lt;br /&gt;
        echo Firefox 3 is already running. Cannot run Firefox 2 concurrenly.&lt;br /&gt;
        echo Running Firefox 3.&lt;br /&gt;
	exec /opt/firefox3/firefox $@&lt;br /&gt;
fi&lt;br /&gt;
# positionne le bon profil&lt;br /&gt;
if [ -L ~/.mozilla ] ; then&lt;br /&gt;
        rm ~/.mozilla&lt;br /&gt;
        ln -s ~/.mozilla2 ~/.mozilla&lt;br /&gt;
fi&lt;br /&gt;
# fin modifications Léa&lt;br /&gt;
&lt;br /&gt;
# ***** BEGIN LICENSE BLOCK *****&lt;br /&gt;
# Version: MPL 1.1/GPL 2.0/LGPL 2.1&lt;br /&gt;
#&lt;br /&gt;
(suite normale du script)&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;/opt/firefox3/firefox (Firefox 3)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code multi&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
#&lt;br /&gt;
# début modifications Léa&lt;br /&gt;
# si Firefox 2 tourne déjà, lui repasser le boulot&lt;br /&gt;
if `ps x|grep -v grep|grep -q /opt/firefox/firefox-bin` ; then&lt;br /&gt;
	echo Firefox 2 is already running. Cannot run Firefox 3 concurrenly.&lt;br /&gt;
	echo Running Firefox 2.&lt;br /&gt;
	exec /opt/firefox/firefox $@&lt;br /&gt;
fi&lt;br /&gt;
# utilise la nouvelle librairie GTK&lt;br /&gt;
export LD_LIBRARY_PATH=&amp;quot;/opt2/gtk2.10/usr/lib/&amp;quot;&lt;br /&gt;
# positionne le bon profil&lt;br /&gt;
if [ -L ~/.mozilla ] ; then&lt;br /&gt;
	rm ~/.mozilla&lt;br /&gt;
	ln -s ~/.mozilla3 ~/.mozilla&lt;br /&gt;
fi&lt;br /&gt;
# fin modifications Léa&lt;br /&gt;
# ***** BEGIN LICENSE BLOCK *****&lt;br /&gt;
# Version: MPL 1.1/GPL 2.0/LGPL 2.1&lt;br /&gt;
#&lt;br /&gt;
(suite normale du script)&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Et voilà ! Lorsque vous aurez Firefox 3 de lancé, et que vous cliquerez sur l&#039;icône Wikipedia (par exemple), ce site s&#039;ouvrira de façon normale dans Firefox 3 :-)&lt;br /&gt;
&lt;br /&gt;
==Méthode &amp;quot;propre&amp;quot;==&lt;br /&gt;
Le dépôt &#039;&#039;&#039;xepc&#039;&#039;&#039; (Voir [[La distribution Linux Xandros de l&#039;EeePC#Ajouter des dépôts de logiciels|qu&#039;est-ce qu&#039;un dépôt]] et [[La distribution Linux Xandros de l&#039;EeePC#Dépôts spécifiques EeePC|le dépôt xepc]]) dispose maintenant d&#039;une libgtk2.0-0 mise à jour, ainsi que de Firefox 3.0.&lt;br /&gt;
&lt;br /&gt;
Si vous avez installé ce dépôt, vous pouvez entrer les commandes suivantes afin de mettre à jour GTK puis Firefox.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code multi&amp;gt;&lt;br /&gt;
$ sudo apt-get install libgtk2.0-0 gtk2-engines&lt;br /&gt;
$ sudo apt-get install firefox&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cependant, contrairement à la première méthode présentée, le retour arrière est difficile, car les GTK et Firefox d&#039;origine ne seront plus accessibles...&lt;br /&gt;
&lt;br /&gt;
Vous pouvez également ne mettre à jour que GTK (ne faire que la première commande), puis installer manuellement (mais cette fois sans modifier le script qui lance Firefox) la dernière version de Firefox dans /opt, ainsi que nous l&#039;avons fait plus haut.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr /&amp;gt;&lt;br /&gt;
[[EeePC|Retour à la page EeePC]]&lt;br /&gt;
&amp;lt;hr /&amp;gt;&lt;/div&gt;</summary>
		<author><name>LeaJice</name></author>
	</entry>
	<entry>
		<id>https://lea-linux.org/docs/index.php?title=Accueil&amp;diff=16853</id>
		<title>Accueil</title>
		<link rel="alternate" type="text/html" href="https://lea-linux.org/docs/index.php?title=Accueil&amp;diff=16853"/>
		<updated>2009-03-06T16:59:06Z</updated>

		<summary type="html">&lt;p&gt;LeaJice : /* Bienvenue sur Léa */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;imglink align=center&amp;gt;http://eucd.info![[Image:Copier_différent_de_pirater.png|http://eucd.info]]&amp;lt;/imglink&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Bienvenue sur Léa =&lt;br /&gt;
6/3/2009 : suite à une forte vague de vandalisme sur les pages de Léa, l&#039;édition des pages n&#039;est maintenant permise que pour les utilisateurs identifiés. [http://www.lea-linux.org/documentations/index.php?title=Special:Connexion&amp;amp;returnto=Accueil Créez-vous un compte, c&#039;est rapide et gratuit !]&lt;br /&gt;
{{Lea_Linux:Les_nouvelles}}&lt;br /&gt;
&lt;br /&gt;
== Les pages d&#039;introduction à Linux ==&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot; border=&amp;quot;0&amp;quot;&lt;br /&gt;
! width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; align=&amp;quot;left&amp;quot; | Les pages suivantes constituent le point d&#039;entrée obligatoire à Léa.&lt;br /&gt;
! width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; align=&amp;quot;left&amp;quot; | Les pages suivantes sont des fiches spéciales débutant&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; | &amp;lt;DPL&amp;gt;category=Introduction à Linux&amp;lt;/DPL&amp;gt;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&amp;lt;DPL&amp;gt;category=Fiches pratiques&amp;lt;/DPL&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{DP}}&lt;/div&gt;</summary>
		<author><name>LeaJice</name></author>
	</entry>
	<entry>
		<id>https://lea-linux.org/docs/index.php?title=Accueil&amp;diff=16852</id>
		<title>Accueil</title>
		<link rel="alternate" type="text/html" href="https://lea-linux.org/docs/index.php?title=Accueil&amp;diff=16852"/>
		<updated>2009-03-06T16:58:26Z</updated>

		<summary type="html">&lt;p&gt;LeaJice : /* Bienvenue sur Léa */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;imglink align=center&amp;gt;http://eucd.info![[Image:Copier_différent_de_pirater.png|http://eucd.info]]&amp;lt;/imglink&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Bienvenue sur Léa =&lt;br /&gt;
6/3/2009 : suite à une forte vague de vandalisme sur les pages de Léa, l&#039;édition des pages n&#039;est maintenant permise que pour les utilisateurs identifiés. [http://www.lea-linux.org/documentations/index.php?title=Special:Connexion&amp;amp;returnto=Accueil Créez-vous un compte, c&#039;est rapide et gratuit !]&lt;br /&gt;
&lt;br /&gt;
{{Lea_Linux:Les_nouvelles}}&lt;br /&gt;
&lt;br /&gt;
== Les pages d&#039;introduction à Linux ==&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot; border=&amp;quot;0&amp;quot;&lt;br /&gt;
! width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; align=&amp;quot;left&amp;quot; | Les pages suivantes constituent le point d&#039;entrée obligatoire à Léa.&lt;br /&gt;
! width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; align=&amp;quot;left&amp;quot; | Les pages suivantes sont des fiches spéciales débutant&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; | &amp;lt;DPL&amp;gt;category=Introduction à Linux&amp;lt;/DPL&amp;gt;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&amp;lt;DPL&amp;gt;category=Fiches pratiques&amp;lt;/DPL&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{DP}}&lt;/div&gt;</summary>
		<author><name>LeaJice</name></author>
	</entry>
	<entry>
		<id>https://lea-linux.org/docs/index.php?title=Accueil&amp;diff=16851</id>
		<title>Accueil</title>
		<link rel="alternate" type="text/html" href="https://lea-linux.org/docs/index.php?title=Accueil&amp;diff=16851"/>
		<updated>2009-03-06T16:56:57Z</updated>

		<summary type="html">&lt;p&gt;LeaJice : /* Bienvenue sur Léa */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;imglink align=center&amp;gt;http://eucd.info![[Image:Copier_différent_de_pirater.png|http://eucd.info]]&amp;lt;/imglink&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Bienvenue sur Léa =&lt;br /&gt;
{{Lea_Linux:Les_nouvelles}}&lt;br /&gt;
&lt;br /&gt;
6/3/2009 : suite à une forte vague de vandalisme sur les pages de Léa, l&#039;édition des pages n&#039;est maintenant permise que pour les utilisateurs identifiés. [http://www.lea-linux.org/documentations/index.php?title=Special:Connexion&amp;amp;returnto=Accueil Créez-vous un compte, c&#039;est rapide et gratuit !]&lt;br /&gt;
&lt;br /&gt;
== Les pages d&#039;introduction à Linux ==&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot; border=&amp;quot;0&amp;quot;&lt;br /&gt;
! width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; align=&amp;quot;left&amp;quot; | Les pages suivantes constituent le point d&#039;entrée obligatoire à Léa.&lt;br /&gt;
! width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; align=&amp;quot;left&amp;quot; | Les pages suivantes sont des fiches spéciales débutant&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; | &amp;lt;DPL&amp;gt;category=Introduction à Linux&amp;lt;/DPL&amp;gt;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&amp;lt;DPL&amp;gt;category=Fiches pratiques&amp;lt;/DPL&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{DP}}&lt;/div&gt;</summary>
		<author><name>LeaJice</name></author>
	</entry>
	<entry>
		<id>https://lea-linux.org/docs/index.php?title=EGroupware&amp;diff=16834</id>
		<title>EGroupware</title>
		<link rel="alternate" type="text/html" href="https://lea-linux.org/docs/index.php?title=EGroupware&amp;diff=16834"/>
		<updated>2009-03-05T16:46:07Z</updated>

		<summary type="html">&lt;p&gt;LeaJice : A protégé « Leapro-pro appli-egroupware »: vandalisme (spam) [edit=autoconfirmed:move=autoconfirmed] (expire le 5 juin 2009 à 15:46)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Applications]]&lt;br /&gt;
= Une solution de groupware OpenSource =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;leatitre&amp;quot;&amp;gt;Une solution de groupware OpenSource&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;leapar&amp;quot;&amp;gt;Par [mailto:anne@lea-linux.org Anne]&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Quand l&#039;évolution des technologies impacte sur l&#039;organisation d&#039;entreprise ==&lt;br /&gt;
&lt;br /&gt;
Le schéma organisationnel des entreprises qui était plutôt de type hiérarchique et rigide il y a quelques années tend à s&#039;aplatir et se doter de nombreuses fonctionnalités transversales.&lt;br /&gt;
&lt;br /&gt;
Cette évolution implique donc un remaniement des modes de communication et d&#039;organisation, ainsi que du système d&#039;information. Un des outils clé de ce changement est le groupware qui dote l&#039;entreprise de moyens simples et efficaces pour permettre à  l&#039;ensemble de ses collaborateurs d&#039;y parvenir : partage de l&#039;information à travers de multiples calendriers privés ou non, de forums, d&#039;outils collaboratifs (de type wiki), de gestionnaire de contacts...&lt;br /&gt;
&lt;br /&gt;
Les quatre membres fondateurs d&#039;eGroupWare sont issus du projet phpGroupWare. Celui-ci n&#039;évoluant pas selon eux dans la bonne direction et ne collant pas assez aux besoins exprimés par les utilisateurs d&#039;un groupware, ils décidèrent de forker (partir et refaire) le projet et d&#039;initier ainsi eGroupWare.&lt;br /&gt;
&lt;br /&gt;
L&#039;objectif clairement annoncé est de concurrencer des solutions commerciales comme Notes et Exchange tout en respectant les principes de l&#039;Open Source. à cet effet l&#039;équipe d&#039;eGroupWare a donc orienté son outil en fonction de ce que doit apporter un logiciel de groupware dans une entreprise, une association,...&lt;br /&gt;
&lt;br /&gt;
Selon Reiner Jung, chef de projet eGroupWare : &amp;quot;Souvent les gens définissent le groupware comme un regroupement de fonctions comme le mail, une todo liste, des notes et un calendrier. Celà n&#039;est pas notre définition. Un groupware devrait offrir un espace de travail partagé. Cet espace doit mettre à  disposition un ensemble de modules pour le travail de tous les jours. Dans mon activité quotidienne, je partage aussi des fichiers, gère mes projets, les développeurs ont besoin d&#039;un wiki, d&#039;un forum pour les discussions... Quand je peux exécuter la plupart de mes tâches quotidiennes à travers un groupware, alors c&#039;en est un véritablement. Nous sommes sur la voie de ce genre de réalisation.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Dans de nombreux projets, les développeurs et/ou les entreprises créent une road map et décident des besoins des utilisateurs pour la version suivante. Celà n&#039;est pas la bonne façon de procéder. Nous voulons obtenir un groupware qui remplisse les besoins d&#039;utilisateurs dans le monde professionnel. Selon moi, ce sont les utilisateurs qui développent eGroupWare. Ils ont souvent des connaissances plus importantes que nous sur le fonctionnement d&#039;un groupware et savent pertinemment ce dont ils ont besoin. Le projet doit réaliser, coordonner les demandes, s&#039;assurer de sa viabilité, sa stabilité et sa sécurité.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Particularité de fonctionnement : le groupe propose à des entreprises qui souhaitent voir une ou plusieurs fonctionnalités aboutir plus rapidement de financer des heures de développement.. La méthode est de plus en plus courante et gage d&#039;adéquation du développement aux besoins réels.&lt;br /&gt;
&lt;br /&gt;
Un des avantages d&#039;eGroupWare est sa simplicité de mise en place. Elle ne doit toutefois pas occulter la complexité que représente la mise à plat du circuit de l&#039;information dans une organisation. En effet, le groupware ne sera finalement que le reflet de ce schéma organisationnel. L&#039;objet de cet article est de montrer pas à pas la solution technique. Nous n&#039;aborderons pas l&#039;étape préalable indispensable qui consiste à partir de l&#039;organigramme de l&#039;entreprise pour mettre en place des groupes d&#039;utilisateurs et organiser les différents niveaux d&#039;accès à  l&#039;information.&lt;br /&gt;
&lt;br /&gt;
eGroupWare est constitué d&#039;un ensemble de modules présentant les fonctionnalités suivantes :&lt;br /&gt;
&lt;br /&gt;
* webmail &lt;br /&gt;
* carnet de contacts &lt;br /&gt;
* calendrier partagé &lt;br /&gt;
* forum &lt;br /&gt;
* wiki &lt;br /&gt;
* CMS &lt;br /&gt;
* gestion de tickets d&#039;incident &lt;br /&gt;
* éditeur de site wysiwyg &lt;br /&gt;
* lient FTP et gestionnaire de fichiers &lt;br /&gt;
* messagerie instantanée &lt;br /&gt;
* gestionnaire de projets &lt;br /&gt;
* outil de sondage &lt;br /&gt;
* gestion graphique des utilisateurs et groupes, ainsi que de leur compte mail et LDAP&lt;br /&gt;
&lt;br /&gt;
Chacun de ces modules, on le verra, peut être partagé avec tout ou partie des utilisateurs accédant à eGroupWare. Passons aux choses concrètes : les pré-requis.&lt;br /&gt;
Passons maintenant à l&#039;installation de la plate-forme qui va supporter eGroupWare. Nous avons fait le choix d&#039;une Mandrake 10.0 pour supporter cette plate-forme.&lt;br /&gt;
&lt;br /&gt;
== Installer une plate-forme LAMP ==&lt;br /&gt;
L&#039;application nécessite au moins un serveur web, PHP et une base de données. Il est possible de l&#039;installer sur IIS, mais pour une raison on ne peut plus partisane, nous choisirons Apache sur Linux. L&#039;ensemble des informations du groupware et notamment le système d&#039;ACL (Access control List) est stocké dans une base de donnée, qui peut être MySQL ou PostgreSQL.&lt;br /&gt;
Nous allons décrire ci-dessous les modalités d&#039;installation de cette plate-forme LAMP (Linux, Apache, MySQL, PHP).&lt;br /&gt;
&#039;&#039;&#039;La première étape consiste à  installer Apache :&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# urpmi apache2&lt;br /&gt;
 Pour satisfaire les dépendances, les paquetages suivants vont être installés (1 Mo):&lt;br /&gt;
 apache-conf-2.0.48-2mdk.i586&lt;br /&gt;
 apache2-2.0.48-6mdk.i586&lt;br /&gt;
 apache2-common-2.0.48-6mdk.i586&lt;br /&gt;
 apache2-modules-2.0.48-6mdk.i586&lt;br /&gt;
 Est-ce correct ? (O/n)&lt;br /&gt;
 Préparation...              ##################################################&lt;br /&gt;
    1:apache-conf            ##################################################&lt;br /&gt;
    2:apache2-modules        ##################################################&lt;br /&gt;
    3:apache2-common         ##################################################&lt;br /&gt;
    4:apache2                ##################################################&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
Le fichier de configuration est /etc/httpd/conf/httpd.conf. (Mandrake a délocalisé une partie de ce fichier dans /etc/httpd/conf/commonhttpd.conf). La configuration par défaut permet de lancer dès maintenant le service Apache :&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# service httpd start&lt;br /&gt;
 Starting httpd:                                                 [  OK  ]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
La plate-forme nécessite également l&#039;installation de PHP :&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# urpmi php&lt;br /&gt;
 Un des paquetages suivants est nécessaire :&lt;br /&gt;
  1- apache2-mod_php-2.0.48_4.3.4-1mdk.i586&lt;br /&gt;
  2- mod_php-4.3.4-1mdk.i586&lt;br /&gt;
  3- php-cli-4.3.4-4mdk.i586&lt;br /&gt;
  4- php-cgi-4.3.4-4mdk.i586&lt;br /&gt;
 Que choisissez-vous ? (1-4)1&lt;br /&gt;
 Préparation...              ##################################################&lt;br /&gt;
    1:apache2-mod_php        ##################################################&lt;br /&gt;
 Shutting down httpd2: [  OK  ]&lt;br /&gt;
 Checking configuration sanity for Apache 2.0:  [  OK  ]&lt;br /&gt;
 Starting httpd2: [  OK  ]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
Là  encore la configuration proposée permet un fonctionnement immédiat de PHP. Il nous reste enfin à  installer le serveur MySQL :&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# urpmi mysql&lt;br /&gt;
 Un des paquetages suivants est nécessaire :&lt;br /&gt;
  1- MySQL-4.0.18-1.1.100mdk.i586&lt;br /&gt;
  2- MySQL-Max-4.0.18-1.1.100mdk.i586&lt;br /&gt;
 Que choisissez-vous ? (1-2)1&lt;br /&gt;
 Pour satisfaire les dépendances, les paquetages suivants vont être installés (18 Mo):&lt;br /&gt;
 MySQL-4.0.18-1.1.100mdk.i586&lt;br /&gt;
 MySQL-client-4.0.18-1.1.100mdk.i586&lt;br /&gt;
 MySQL-common-4.0.18-1.1.100mdk.i586&lt;br /&gt;
 libmysql12-4.0.18-1.1.100mdk.i586&lt;br /&gt;
 perl-Mysql-1.22_19-9mdk.i586&lt;br /&gt;
 Est-ce correct ? (O/n)&lt;br /&gt;
 Préparation...              ##################################################&lt;br /&gt;
    1:libmysql12             ##################################################&lt;br /&gt;
    2:MySQL-client           ##################################################&lt;br /&gt;
    3:perl-Mysql             ##################################################&lt;br /&gt;
    4:MySQL-common           ##################################################&lt;br /&gt;
    5:MySQL                  ##################################################&lt;br /&gt;
 040512 12:40:46  /usr/sbin/mysqld: Shutdown Complete&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
On procède ensuite au démarrage du service :&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# service mysql start&lt;br /&gt;
 Starting mysql:                                                 [  OK  ]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
L&#039;installation nécessite enfin un certain nombre de modules pour Apache, nécessaires au bon fonctionnement d&#039;eGroupWare.&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# urpmi php-mysql php-xml php-imap php-ldap&lt;br /&gt;
 Préparation...              ##################################################&lt;br /&gt;
    1:php-imap               ##################################################&lt;br /&gt;
    2:php-xml                ##################################################&lt;br /&gt;
    3:php-mysql              ##################################################&lt;br /&gt;
    4:php-ldap               ##################################################&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
Voilà  votre plate-forme prête à  fonctionner !&lt;br /&gt;
== L&#039;annuaire LDAP ==&lt;br /&gt;
Il est également possible d&#039;adosser le groupware à  un annuaire LDAP (site officiel : http://openldap.org). Avantage de la méthode : il va permettre de centraliser . C&#039;est l&#039;option qui sera présentée ici car elle permet d&#039;utiliser de manière optimale les fonctionnalités d&#039;eGroupWare. L&#039;installation du serveur LDAP est simple :&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# urpmi openldap-servers openldap-client&lt;br /&gt;
 Préparation...              ##################################################&lt;br /&gt;
    1:openldap-servers       ##################################################&lt;br /&gt;
    2:openldap-client        ##################################################&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
Le recours à  un annuaire LDAP présuppose deux choses : l&#039;installation du module php-ldap pour Apache (ce que nous avons fait dans le paragraphe précédent) et l&#039;intégration d&#039;une classe nécessaire pour inclure des paramètres eGroupWare dans la définition des comptes de groupes et d&#039;utilisateurs. Pour ce faire, copiez les schémas fournis dans les sources (les schémas seront ajoutés dès la prochaine version du RPM Mandrake), phpgwaccount.schema et phpgwcontact.schema dans l&#039;arborescence LDAP. Comme leurs noms l&#039;indiquent, l&#039;un permet de définir les comptes de groupes et d&#039;utilisateurs, l&#039;autre permet de définir le stockage des contacts dans l&#039;annuaire. Pour finir, déclarez l&#039;utilisation de ces schémas dans slapd.conf et redémarrez le serveur.&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# ls /etc/openldap/schema&amp;lt;/nowiki&amp;gt;&amp;lt;br /&amp;gt; local.schema phpgwaccount.schema phpgwcontact.schema&amp;lt;br /&amp;gt; # cat /etc/openldap/slapd.conf&amp;lt;br /&amp;gt; ...&amp;lt;br /&amp;gt; include /etc/openldap/schema/phpgwaccount.schema&amp;lt;br /&amp;gt; include /etc/openldap/schema/phpgwcontact.schema&amp;lt;br /&amp;gt; ...&amp;lt;br /&amp;gt; # service ldap restart&amp;lt;/div&amp;gt;&lt;br /&gt;
== Le support de la messagerie ==&lt;br /&gt;
Nous allons utiliser également un serveur SMTP et un serveur POP/IMAP. Les choix réalisés par l&#039;équipe d&#039;eGroupWare privilégient Postfix d&#039;un côté et Cyrus-IMAP de l&#039;autre. Il est tout à  fait envisageable d&#039;utiliser d&#039;autres produits mais ceux-ci ont l&#039;avantage de permettre ensuite la gestion du compte de messagerie à  travers l&#039;interface du groupware (gestion des boites mail, alias de mail, forwards, et bientôt les absences).&lt;br /&gt;
Attention : les requêtes sur les utilisateurs eGroupWare concernant la messagerie se basent sur la classe qmailUser et l&#039;attribut mailAlternateAddress. Ci-dessous un extrait du fichier de configuration de Postfix main.cf concernant la construction de la requête LDAP à  effectuer :&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# cat /etc/postfix/main.cf&amp;lt;/nowiki&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; virtual_alias_maps = ldap:ldapuser, ldap:ldapgroup&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; ldapuser_server_host = 127.0.0.1&amp;lt;br /&amp;gt; ldapuser_server_port = 389&amp;lt;br /&amp;gt; ldapuser_bind = yes&amp;lt;br /&amp;gt; ldapuser_bind_dn = cn=adminmail,dc=domain,dc=com&amp;lt;br /&amp;gt; ldapuser_bind_pw = Xd25./T&amp;lt;br /&amp;gt; ldapuser_search_base = ou=Personnes,dc=domain,dc=com&amp;lt;br /&amp;gt; ldapuser_timeout = 60&amp;lt;br /&amp;gt; ldapuser_query_filter = (&amp;amp;(objectclass=qmailUser)(mailAlternateAddress=%s))&amp;lt;br /&amp;gt; ldapuser_result_attribute = mail&amp;lt;br /&amp;gt; ldapuser_lookup_timeout = 60&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; ldapgroup_server_host = 127.0.0.1&amp;lt;br /&amp;gt; ldapgroup_server_port = 389&amp;lt;br /&amp;gt; ldapgroup_bind = yes&amp;lt;br /&amp;gt; ldapgroup_bind_dn = cn=adminmail,dc=domain,dc=com&amp;lt;br /&amp;gt; ldapgroup_bind_pw = Xd25./T&amp;lt;br /&amp;gt; ldapgroup_search_base = ou=Groupes,dc=domain,dc=com&amp;lt;br /&amp;gt; ldapgroup_timeout = 60&amp;lt;br /&amp;gt; ldapgroup_query_filter = (&amp;amp;(objectclass=mailRecipient)(mailAlternateAddress=%s))&amp;lt;br /&amp;gt; ldapgroup_result_attribute = rfc822MailMember&amp;lt;br /&amp;gt; ldapgroup_lookup_timeout = 60&amp;lt;br /&amp;gt; ....&amp;lt;/div&amp;gt;&lt;br /&gt;
On pourra bien sur affiner cette configuration mais ce n&#039;est pas l&#039;objet de l&#039;article. Consulter Postfix-Cyrus-Web-cyradm-HOWTO, un bon point de départ.&lt;br /&gt;
== L&#039;installation de eGroupWare ==&lt;br /&gt;
=== Les étapes de l&#039;installation ===&lt;br /&gt;
L&#039;installation peut se faire à  partir des sources :&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# cd /var/www/html&amp;lt;/nowiki&amp;gt;&amp;lt;br /&amp;gt; # tar xjf eGroupWare-0.9.99.015-1.tar.bz2&amp;lt;/div&amp;gt;&lt;br /&gt;
Comme nous travaillons sur une Mandrake, nous utiliserons les packages prévu à  cet effet. Il est possible de télécharger le package édité par l&#039;équipe d&#039;eGoupWare (eGroupWare-all-apps-0.9.99.015-1.noarch.rpm). Toutefois dans un soucis de cohérence, nous utiliserons les packages fournis par la source contrib de Mandrake. Pour installer eGroupWare et tous ses modules :&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# urpmi -a egroupware egroupware-&amp;lt;/nowiki&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
Par défaut les fichiers s&#039;installent dans /var/www/html/egroupware.&lt;br /&gt;
Le processus d&#039;installation d&#039;eGroupWare prévoit la création de la base de donnée pour MySQL et PostgreSQL. Nous reprenons ci-dessous les étapes qui permettent la création en ligne de commande de la base et d&#039;un utilisateur qui aura les droits sur cette base pour MySQL.&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# mysqladmin --user=root create egroupware&amp;lt;/nowiki&amp;gt;&amp;lt;br /&amp;gt; # mysql --user=root mysql&amp;lt;br /&amp;gt; mysql&amp;gt; GRANT ALL ON egroupware.* TO egroupware@localhost IDENTIFIED BY &#039;passwd&#039;;&amp;lt;br /&amp;gt; mysql&amp;gt; flush privileges;&amp;lt;/div&amp;gt;&lt;br /&gt;
Voilà , nous laissons de côté maintenant la ligne de commande pour passer à  l&#039;installeur web d&#039;eGroupWare. L&#039;installation va alors se faire en 3 étapes à  partir de l&#039;URL suivante dans notre cas : http://localhost/egroupware/setup.&lt;br /&gt;
=== Vérification de l&#039;installation ===&lt;br /&gt;
[[Image:egroupware-egw1.png]]&lt;br /&gt;
=== Génération du fichier header.inc.php ===&lt;br /&gt;
[[Image:egroupware-egw2.png]]&lt;br /&gt;
Ce fichier contient les paramètres de base d&#039;eGroupWare comme les paramètres de connexion à  la base de données mais aussi la possibilité d&#039;en générer plusieurs instances en définissant des domaines. Cette notion peut être utile si l&#039;on souhaite par exemple définir deux interfaces distinctes d&#039;eGroupWare, par exemple, l&#039;Intranet et les clients.&lt;br /&gt;
Vous allez également créer deux utilisateurs clés : l&#039;un vous servira à  rééditer cette page, l&#039;autre à  poursuivre la procédure d&#039;installation.&lt;br /&gt;
Il est recommandé de conserver une sauvegarde de ce fichier.&lt;br /&gt;
=== Installation des applications ===&lt;br /&gt;
[[Image:egroupware-egw3.png]]&lt;br /&gt;
Connectez-vous comme demandé.&lt;br /&gt;
L&#039;étape suivante consiste à  valider l&#039;installation des différents applications du groupware et créer les tables correspondantes dans votre base de données.&lt;br /&gt;
=== Configuration d&#039;eGroupWare ===&lt;br /&gt;
[[Image:egroupware-egw4.png]]&lt;br /&gt;
La configuration se présente ensuite comme une série de champs à  renseigner. L&#039;installation d&#039;eGroupWare nécessite la création d&#039;un répertoire, de préférence hors de l&#039;arborescence Apache qui contiendra notamment les fichiers uploadés par l&#039;intermédiaire du gestionnaire de fichiers. Ce répertoire devra être accessible à  l&#039;utilisateur exécutant l&#039;instance Apache (le répertoire est créé par défault, vérifiez qu&#039;il existe, sinon tapez le code ci desous).&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# mkdir /var/lib/egroupware&amp;lt;/nowiki&amp;gt;&amp;lt;br /&amp;gt; # chown -R apache:apache /var/lib/egroupware&amp;lt;/div&amp;gt;&lt;br /&gt;
Vous devrez également spécifier l&#039;IP ou le nom de votre serveur FTP si vous souhaitez utiliser le module FTP du groupware.&lt;br /&gt;
[[Image:egroupware-egw5.png]]&lt;br /&gt;
Nous voilà  maintenant arrivés à  la configuration de l&#039;authentification et des comptes utilisateurs. Plusieurs options s&#039;offrent à  vous. Si vous ne disposez pas d&#039;annuaire LDAP, choisissez de stocker les comptes dans la base de données. Dans notre cas, ayant recours à  LDAP, nous allons donc compléter les éléments nécessaires. Ils sont classiques pour ceux qui ont l&#039;habitude de manipuler ce service : home directory à  utiliser, shell, contexte des OU (Organizational Units) d&#039;utilisateurs et de groupes, manager de LDAP et mot de passe.&lt;br /&gt;
Il est indispensable également d&#039;autoriser l&#039;utilisation de LDAP v.3, que l&#039;on retrouve par défaut dans la majorité des distributions. Enregistrer la configuration obtenue.&lt;br /&gt;
Nous compléterons cette phase par la création d&#039;un compte administrateur qui sera utilisé ensuite pour l&#039;administration du groupware (gestion des ACL, gestion des utilisateurs et des applications). Il vous est d&#039;ailleurs proposé de créer des comptes de démonstration pour tester le bon fonctionnement de l&#039;application. Vous pouvez en vérifier la création dans l&#039;annuaire :&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# ldapsearch -x &amp;quot;uid=adminegw&amp;quot;&amp;lt;/nowiki&amp;gt;&amp;lt;br /&amp;gt; # adminegw, Users, domain, com&amp;lt;br /&amp;gt; dn: uid=adminegw,ou=Users,dc=domain,dc=com&amp;lt;br /&amp;gt; phpgwAccountType: u&amp;lt;br /&amp;gt; uidNumber: 2008&amp;lt;br /&amp;gt; objectClass: top&amp;lt;br /&amp;gt; objectClass: person&amp;lt;br /&amp;gt; objectClass: organizationalPerson&amp;lt;br /&amp;gt; objectClass: inetOrgPerson&amp;lt;br /&amp;gt; objectClass: posixAccount&amp;lt;br /&amp;gt; objectClass: shadowAccount&amp;lt;br /&amp;gt; objectClass: phpgwAccount&amp;lt;br /&amp;gt; cn: adminegw adminegw&amp;lt;br /&amp;gt; uid: adminegw&amp;lt;br /&amp;gt; sn: adminegw&amp;lt;br /&amp;gt; givenName: adminegw&amp;lt;br /&amp;gt; homeDirectory: /home/adminegw&amp;lt;br /&amp;gt; loginShell: /bin/false&amp;lt;br /&amp;gt; gidNumber: 2&amp;lt;br /&amp;gt; phpgwAccountStatus: A&amp;lt;br /&amp;gt; phpgwAccountExpires: -1&amp;lt;/div&amp;gt;&lt;br /&gt;
L&#039;utilisateur est bien créé et on retrouve la classe phpgwAccount ainsi que les attributs élémentaires : phpgwAccountType (u : user ou g : groupe), phpgwAccountStatus (A : compte actif), phpgwAccountExpires (-1 : jamais).&lt;br /&gt;
La configuration est maintenant terminée. Vous pouvez toutefois à  ce stade gérer les langues (ajouter / supprimer). 22 langues sont aujourd&#039;hui disponibles, par défaut sont sélectionnés l&#039;anglais et le français. Vous pouvez également gérer les applications. Le mode d&#039;installation que nous avons utilisé fournit toutes les applications disponibles, vous pouvez restreindre cette liste.&lt;br /&gt;
L&#039;installation et la configuration de base sont maintenant terminées, nous passons à  la configuration de l&#039;utilisation du groupware.&lt;br /&gt;
&lt;br /&gt;
== Configuration du groupware ==&lt;br /&gt;
Une fois connecté en tant qu&#039;administrateur du groupware, allez sur le paneau d&#039;administration . [[Image:egroupware-egw6.png]]&lt;br /&gt;
Il vous offre les fonctionnalités suivantes :&lt;br /&gt;
* gestion des applications&lt;br /&gt;
* gestion des utilisateurs&lt;br /&gt;
* configuration du site et paramétrage mail&lt;br /&gt;
* gestion des catégories et ACL&lt;br /&gt;
Avant de poursuivre il est indispensable de définir ces 2 dernières notions qui sous-tendent toute la configuration qui va suivre.&lt;br /&gt;
=== ACL et catégories globales ===&lt;br /&gt;
[[Image:egroupware-egw7.png]]&lt;br /&gt;
Les ACL sont un terme générique (Acces Control List) que l&#039;on retrouvera dans de nombreuses applications. Elles vont définir les droits d&#039;accès d&#039;un utilisateur et/ou d&#039;un groupe aux données d&#039;une application. Elles sont au nombre de quatre : lecture, ajout, modification, suppression.&lt;br /&gt;
Dans notre exemple, les membres du groupe commerciaux auront tous les droits sur les données du gestionnaire de fichiers relatives à  leur groupe. Seuls les membres du groupe techniciens auront un accès en lecture.&lt;br /&gt;
[[Image:egroupware-egw8.png]]&amp;lt;br /&amp;gt;&lt;br /&gt;
Les catégories globales permettent d&#039;organiser les données et sont communes à  toutes les applications. Il est possible également de créer des catégories spécifiques à  une application ainsi que des catégories personnelles. Elles sont importantes car elles permettent de rationaliser l&#039;affichage des données et de d&#039;organiser celles-ci plus clairement.&lt;br /&gt;
=== Une administration centralisée des utilisateurs ===&lt;br /&gt;
La gestion des utilisateurs et des groupes peut se faire à  plusieurs niveaux :&lt;br /&gt;
[[Image:egroupware-egw9.png]]&lt;br /&gt;
* le module de gestion de comptes utilisateurs : il permet de créer, modifier, supprimer un utilisateur. Les modifications portent sur les données de base du compte, la configuration mail, les applications attribuées spécifiquement à  un utilisateur.[[Image:egroupware-egw10.png]]&lt;br /&gt;
* le module de gestion de comptes de groupes : il permet de positionner les utilisateurs dans le groupe choisi. Pour pouvoir positionner les ACL, cliquer sur l&#039;application et sauvegarder puis cliquer à  nouveau sur la puce situé à  droite de la dite application.&amp;lt;br /&amp;gt; On conseille souvent d&#039;utiliser un groupe &amp;quot;Default&amp;quot; dans lequel on positionnera tous les utilisateurs. Celui-ci permettra de fixer les applications de base communes à  tous ainsi que des ACL. On affinera ensuite groupe par groupe ces ACL en fonction des besoins.&lt;br /&gt;
* On trouve enfin la gestion des préférences utilisateurs. Ces préférences agissent sur l&#039;ergonomie des applications, leur mode de visualisation, la possibilité ou non de personnaliser la configuration. Ces préférences peuvent être définies par les utilisateurs eux-mêmes mais restreintes par l&#039;administrateur qui positionnera des préférences forcées pour une ou plusieurs applications. Enfin on dispose également de la possibilité de fixer des préférences par défaut.&lt;br /&gt;
== Revue de détail des principales applications ==&lt;br /&gt;
Nous allons ici passer en revue les applications les plus courantes ainsi que leurs fonctionnalités dans le cadre du groupware.&lt;br /&gt;
* Messagerie&amp;lt;br /&amp;gt;[[Image:egroupware-egw11.png]]&amp;lt;br /&amp;gt; eGroupWare propose deux types de webmails qui offrent les fonctionnalités classiques de ce type de client. On trouve entre autres un lien avec le carnet de carnet d&#039;adresses.&lt;br /&gt;
* Carnet d&#039;adresses&amp;lt;br /&amp;gt; Il s&#039;agit la d&#039;une fonctionnalité classique. Il permet des importations et des exportations à  partir de différents formats standards. L&#039;ensemble des contacts est stockable dans une base LDAP.&lt;br /&gt;
* Calendrier&amp;lt;br /&amp;gt;[[Image:egroupware-egw12.png]]&amp;lt;br /&amp;gt; Le calendrier dispose de vues quotidienne, par semaine, mensuelle ou annuelle. On peut ajouter des événements pour soi-même, d&#039;autres utilisateurs ou des groupes. Il est possible alors de générer des alarmes par mail pour prévenir les différents participants. Ce calendrier est également doté d&#039;un système de confirmation pour chaque événement qui permet ainsi au mieux leur planification.&lt;br /&gt;
Egalement à  disposition, un planificateur de tâches, qui permet de visualiser rapidement les plages horaires disponibles pour fixer un rendez-vous pour une ou plusieurs personnes.&lt;br /&gt;
* Infolog &amp;lt;br /&amp;gt; C&#039;est un outil à  mi chemin entre le post-itÂ© et la mini gestion de projet. Il permet de programmer des tâches, en associant ou non d&#039;autres participants, des contacts, des événements du calendrier, des fichiers. Des indicateurs permettent ensuite de visualiser la progression du dit projet.&lt;br /&gt;
L&#039;application propose en tout une quinzaine de modules.&lt;br /&gt;
== Sécurisation et optimisation de l&#039;installation ==&lt;br /&gt;
La sécurisation de la plate-forme supportant eGroupWare relève des conseils habituels liés à  l&#039;administration d&#039;une plate-forme LAMP (Linux-Apache-MySQL-PHP).&lt;br /&gt;
Concernant le serveur MySQL, vérifiez que l&#039;utilisateur root dispose bien d&#039;un mot de passe. En effet, à  l&#039;installation du serveur, l&#039;utilisateur root est initialisé dans la base &amp;quot; mysql&amp;quot; sans aucun mot de passe :&lt;br /&gt;
De plus nous allons restreindre l&#039;accès au serveur MySQL aux seules requêtes lancées en local :&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# cat /etc/my.cnf&amp;lt;/nowiki&amp;gt;&amp;lt;br /&amp;gt; [mysqld]&amp;lt;br /&amp;gt; ...&amp;lt;br /&amp;gt; bind_address = 127.0.0.1&amp;lt;br /&amp;gt; ...&amp;lt;/div&amp;gt;&lt;br /&gt;
Concernant la configuration de PHP, les développeurs apportent quelques conseils pour en optimiser les performances :&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;max_execution_time ? 30&amp;lt;br /&amp;gt; memory_limit ? 16 Mo&amp;lt;br /&amp;gt; register_globals = Off&amp;lt;br /&amp;gt; safe_mode = On&amp;lt;/div&amp;gt;&lt;br /&gt;
Vous devrez également personnaliser le paramètre &amp;quot;upload_max_filesize&amp;quot; en fonction des besoins pour le gestionnaire de fichiers. C&#039;est à  ce niveau que la taille des uploads de fichiers de cette application sera limité et non par un paramètre propre au groupware.&lt;br /&gt;
Enfin eGroupWare peut gagner considérablement en rapidité d&#039;exécution grâce à  Turck MMCache. Il accélère l&#039;interprétation du code PHP et réduit la charge du serveur.&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# urpmi php-mmcache php-mmcache-admin&lt;br /&gt;
 installation de php-mmcache php-mmcache-admin&lt;br /&gt;
    1:php-mmcache            ##################################################&lt;br /&gt;
    2:php-mmcache-admin      ##################################################&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
Attribuer un mot de passe à  l&#039;administrateur de l&#039;interface de gestion du cache :&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# php -q /var/www/html/admin/php-mmcache/mmcache_password.php&amp;lt;/nowiki&amp;gt;&amp;lt;br /&amp;gt; Changing password for Turck MMCache Web Interface (mmcache.php)&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; Enter admin name: admincache&amp;lt;br /&amp;gt; New admin password: R3./po&amp;lt;br /&amp;gt; Retype new admin password: R3./po&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; Add the following lines into your php.ini and restart HTTPD&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; mmcache.admin.name=&amp;quot;admincache&amp;quot;&amp;lt;br /&amp;gt; mmcache.admin.password=&amp;quot;$1$BGhHjZ5A$wNPAxc3BfU12POJoxopBO/&amp;quot;&amp;lt;/div&amp;gt;&lt;br /&gt;
On accède ensuite à  l&#039;interface de gestion du cache : http://localhost/admin/php-mmcache&lt;br /&gt;
== eGroupWare, les projets ==&lt;br /&gt;
Le projet est aujourd&#039;hui disponible dans sa première version stable. Mais le groupe de développement travaille déjà  sur ce que sera la prochaine version stable, la 1.2. Dans cette optique, de nombreux d&#039;objectifs ont étés fixés et mis en avant.&lt;br /&gt;
Il est projeté de mettre à  disposition un moteur de workflow1&lt;br /&gt;
Dans les développements très attendus, on note aussi un certain nombre de connecteurs vers l&#039;extérieur qui permettront d&#039;inclure encore plus le groupware dans son environnement : une synchronisation avec les PDA (ou organiseurs personnels en bon français) disponible très prochainement, un connecteur pour Evolution, et un connecteur pour Outlook.&lt;br /&gt;
Il est prévu également de travailler sur l&#039;ergonomie de l&#039;interface utilisateur et notamment un assistant pour la configuration de celle ci. De nouveaux modèles de documents, ainsi que de nouvelles fonctionnalités comme le glisser-déposer sont également au programme.&lt;br /&gt;
Des applications vont être ré-écrites, soit totalement (carnet d&#039;adresses, gestion des accidents), soit partiellement(webmail, gestionnaire de fichiers, gestion de projets).&lt;br /&gt;
Enfin pour vérifier l&#039;identité de l&#039;utilisateur du groupware, celui-ci devrait inclure également une fonction d&#039;autorité de certification, tout ceci dans un souci de mieux répondre aux exigences de sécurisation du système.&lt;br /&gt;
== Liens ==&lt;br /&gt;
* [http://egroupware.org le site du projet] &lt;br /&gt;
* [http://sourceforge.net/mail/?group_id=78745 les listes de diffusion (utilisateurs, développeurs)] &lt;br /&gt;
* [http://linuxfrench.net/article.php?id_article=1403 Interview de Reiner JUNG, chef de projet ] &lt;br /&gt;
* [http://httpd.apache.org le site d&#039;Apache ] &lt;br /&gt;
* [http://www.mysql.com le site de MySQL ] &lt;br /&gt;
* [http://openldap.org le site de OpenLDAP ] &lt;br /&gt;
* [http://lea-linux.org/reseau/Apache_PHP_MySQL.html HOWTO plate-forme LAMP]&lt;br /&gt;
* [http://www.linux.com/howtos/Postfix-Cyrus-Web-cyradm-HOWTO/index.shtml HOWTO Postfix/Cyrus-IMAP]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;merci&amp;quot;&amp;gt;Cette page est issue de la documentation &#039;pré-wiki&#039; de Léa a été convertie avec HTML::WikiConverter. Elle fut créée par Anne le 05/09/2004.&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Copyright =&lt;br /&gt;
Copyright &amp;amp;copy; 05/09/2004, Anne&lt;br /&gt;
{{CC-BY-NC-SA}}&lt;/div&gt;</summary>
		<author><name>LeaJice</name></author>
	</entry>
	<entry>
		<id>https://lea-linux.org/docs/index.php?title=EGroupware&amp;diff=16833</id>
		<title>EGroupware</title>
		<link rel="alternate" type="text/html" href="https://lea-linux.org/docs/index.php?title=EGroupware&amp;diff=16833"/>
		<updated>2009-03-05T16:44:53Z</updated>

		<summary type="html">&lt;p&gt;LeaJice : /* Quand l&amp;#039;évolution des technologies impacte sur l&amp;#039;organisation d&amp;#039;entreprise */ pbm unicode?&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Applications]]&lt;br /&gt;
= Une solution de groupware OpenSource =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;leatitre&amp;quot;&amp;gt;Une solution de groupware OpenSource&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;leapar&amp;quot;&amp;gt;Par [mailto:anne@lea-linux.org Anne]&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Quand l&#039;évolution des technologies impacte sur l&#039;organisation d&#039;entreprise ==&lt;br /&gt;
&lt;br /&gt;
Le schéma organisationnel des entreprises qui était plutôt de type hiérarchique et rigide il y a quelques années tend à s&#039;aplatir et se doter de nombreuses fonctionnalités transversales.&lt;br /&gt;
&lt;br /&gt;
Cette évolution implique donc un remaniement des modes de communication et d&#039;organisation, ainsi que du système d&#039;information. Un des outils clé de ce changement est le groupware qui dote l&#039;entreprise de moyens simples et efficaces pour permettre à  l&#039;ensemble de ses collaborateurs d&#039;y parvenir : partage de l&#039;information à travers de multiples calendriers privés ou non, de forums, d&#039;outils collaboratifs (de type wiki), de gestionnaire de contacts...&lt;br /&gt;
&lt;br /&gt;
Les quatre membres fondateurs d&#039;eGroupWare sont issus du projet phpGroupWare. Celui-ci n&#039;évoluant pas selon eux dans la bonne direction et ne collant pas assez aux besoins exprimés par les utilisateurs d&#039;un groupware, ils décidèrent de forker (partir et refaire) le projet et d&#039;initier ainsi eGroupWare.&lt;br /&gt;
&lt;br /&gt;
L&#039;objectif clairement annoncé est de concurrencer des solutions commerciales comme Notes et Exchange tout en respectant les principes de l&#039;Open Source. à cet effet l&#039;équipe d&#039;eGroupWare a donc orienté son outil en fonction de ce que doit apporter un logiciel de groupware dans une entreprise, une association,...&lt;br /&gt;
&lt;br /&gt;
Selon Reiner Jung, chef de projet eGroupWare : &amp;quot;Souvent les gens définissent le groupware comme un regroupement de fonctions comme le mail, une todo liste, des notes et un calendrier. Celà n&#039;est pas notre définition. Un groupware devrait offrir un espace de travail partagé. Cet espace doit mettre à  disposition un ensemble de modules pour le travail de tous les jours. Dans mon activité quotidienne, je partage aussi des fichiers, gère mes projets, les développeurs ont besoin d&#039;un wiki, d&#039;un forum pour les discussions... Quand je peux exécuter la plupart de mes tâches quotidiennes à travers un groupware, alors c&#039;en est un véritablement. Nous sommes sur la voie de ce genre de réalisation.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Dans de nombreux projets, les développeurs et/ou les entreprises créent une road map et décident des besoins des utilisateurs pour la version suivante. Celà n&#039;est pas la bonne façon de procéder. Nous voulons obtenir un groupware qui remplisse les besoins d&#039;utilisateurs dans le monde professionnel. Selon moi, ce sont les utilisateurs qui développent eGroupWare. Ils ont souvent des connaissances plus importantes que nous sur le fonctionnement d&#039;un groupware et savent pertinemment ce dont ils ont besoin. Le projet doit réaliser, coordonner les demandes, s&#039;assurer de sa viabilité, sa stabilité et sa sécurité.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Particularité de fonctionnement : le groupe propose à des entreprises qui souhaitent voir une ou plusieurs fonctionnalités aboutir plus rapidement de financer des heures de développement.. La méthode est de plus en plus courante et gage d&#039;adéquation du développement aux besoins réels.&lt;br /&gt;
&lt;br /&gt;
Un des avantages d&#039;eGroupWare est sa simplicité de mise en place. Elle ne doit toutefois pas occulter la complexité que représente la mise à plat du circuit de l&#039;information dans une organisation. En effet, le groupware ne sera finalement que le reflet de ce schéma organisationnel. L&#039;objet de cet article est de montrer pas à pas la solution technique. Nous n&#039;aborderons pas l&#039;étape préalable indispensable qui consiste à partir de l&#039;organigramme de l&#039;entreprise pour mettre en place des groupes d&#039;utilisateurs et organiser les différents niveaux d&#039;accès à  l&#039;information.&lt;br /&gt;
&lt;br /&gt;
eGroupWare est constitué d&#039;un ensemble de modules présentant les fonctionnalités suivantes :&lt;br /&gt;
&lt;br /&gt;
* webmail &lt;br /&gt;
* carnet de contacts &lt;br /&gt;
* calendrier partagé &lt;br /&gt;
* forum &lt;br /&gt;
* wiki &lt;br /&gt;
* CMS &lt;br /&gt;
* gestion de tickets d&#039;incident &lt;br /&gt;
* éditeur de site wysiwyg &lt;br /&gt;
* lient FTP et gestionnaire de fichiers &lt;br /&gt;
* messagerie instantanée &lt;br /&gt;
* gestionnaire de projets &lt;br /&gt;
* outil de sondage &lt;br /&gt;
* gestion graphique des utilisateurs et groupes, ainsi que de leur compte mail et LDAP&lt;br /&gt;
&lt;br /&gt;
Chacun de ces modules, on le verra, peut être partagé avec tout ou partie des utilisateurs accédant à eGroupWare. Passons aux choses concrètes : les pré-requis.&lt;br /&gt;
Passons maintenant à l&#039;installation de la plate-forme qui va supporter eGroupWare. Nous avons fait le choix d&#039;une Mandrake 10.0 pour supporter cette plate-forme.&lt;br /&gt;
&lt;br /&gt;
== Installer une plate-forme LAMP ==&lt;br /&gt;
L&#039;application nécessite au moins un serveur web, PHP et une base de données. Il est possible de l&#039;installer sur IIS, mais pour une raison on ne peut plus partisane, nous choisirons Apache sur Linux. L&#039;ensemble des informations du groupware et notamment le système d&#039;ACL (Access control List) est stocké dans une base de donnée, qui peut être MySQL ou PostgreSQL.&lt;br /&gt;
Nous allons décrire ci-dessous les modalités d&#039;installation de cette plate-forme LAMP (Linux, Apache, MySQL, PHP).&lt;br /&gt;
&#039;&#039;&#039;La première étape consiste à  installer Apache :&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# urpmi apache2&lt;br /&gt;
 Pour satisfaire les dépendances, les paquetages suivants vont être installés (1 Mo):&lt;br /&gt;
 apache-conf-2.0.48-2mdk.i586&lt;br /&gt;
 apache2-2.0.48-6mdk.i586&lt;br /&gt;
 apache2-common-2.0.48-6mdk.i586&lt;br /&gt;
 apache2-modules-2.0.48-6mdk.i586&lt;br /&gt;
 Est-ce correct ? (O/n)&lt;br /&gt;
 Préparation...              ##################################################&lt;br /&gt;
    1:apache-conf            ##################################################&lt;br /&gt;
    2:apache2-modules        ##################################################&lt;br /&gt;
    3:apache2-common         ##################################################&lt;br /&gt;
    4:apache2                ##################################################&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
Le fichier de configuration est /etc/httpd/conf/httpd.conf. (Mandrake a délocalisé une partie de ce fichier dans /etc/httpd/conf/commonhttpd.conf). La configuration par défaut permet de lancer dès maintenant le service Apache :&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# service httpd start&lt;br /&gt;
 Starting httpd:                                                 [  OK  ]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
La plate-forme nécessite également l&#039;installation de PHP :&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# urpmi php&lt;br /&gt;
 Un des paquetages suivants est nécessaire :&lt;br /&gt;
  1- apache2-mod_php-2.0.48_4.3.4-1mdk.i586&lt;br /&gt;
  2- mod_php-4.3.4-1mdk.i586&lt;br /&gt;
  3- php-cli-4.3.4-4mdk.i586&lt;br /&gt;
  4- php-cgi-4.3.4-4mdk.i586&lt;br /&gt;
 Que choisissez-vous ? (1-4)1&lt;br /&gt;
 Préparation...              ##################################################&lt;br /&gt;
    1:apache2-mod_php        ##################################################&lt;br /&gt;
 Shutting down httpd2: [  OK  ]&lt;br /&gt;
 Checking configuration sanity for Apache 2.0:  [  OK  ]&lt;br /&gt;
 Starting httpd2: [  OK  ]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
Là  encore la configuration proposée permet un fonctionnement immédiat de PHP. Il nous reste enfin à  installer le serveur MySQL :&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# urpmi mysql&lt;br /&gt;
 Un des paquetages suivants est nécessaire :&lt;br /&gt;
  1- MySQL-4.0.18-1.1.100mdk.i586&lt;br /&gt;
  2- MySQL-Max-4.0.18-1.1.100mdk.i586&lt;br /&gt;
 Que choisissez-vous ? (1-2)1&lt;br /&gt;
 Pour satisfaire les dépendances, les paquetages suivants vont être installés (18 Mo):&lt;br /&gt;
 MySQL-4.0.18-1.1.100mdk.i586&lt;br /&gt;
 MySQL-client-4.0.18-1.1.100mdk.i586&lt;br /&gt;
 MySQL-common-4.0.18-1.1.100mdk.i586&lt;br /&gt;
 libmysql12-4.0.18-1.1.100mdk.i586&lt;br /&gt;
 perl-Mysql-1.22_19-9mdk.i586&lt;br /&gt;
 Est-ce correct ? (O/n)&lt;br /&gt;
 Préparation...              ##################################################&lt;br /&gt;
    1:libmysql12             ##################################################&lt;br /&gt;
    2:MySQL-client           ##################################################&lt;br /&gt;
    3:perl-Mysql             ##################################################&lt;br /&gt;
    4:MySQL-common           ##################################################&lt;br /&gt;
    5:MySQL                  ##################################################&lt;br /&gt;
 040512 12:40:46  /usr/sbin/mysqld: Shutdown Complete&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
On procède ensuite au démarrage du service :&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# service mysql start&lt;br /&gt;
 Starting mysql:                                                 [  OK  ]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
L&#039;installation nécessite enfin un certain nombre de modules pour Apache, nécessaires au bon fonctionnement d&#039;eGroupWare.&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# urpmi php-mysql php-xml php-imap php-ldap&lt;br /&gt;
 Préparation...              ##################################################&lt;br /&gt;
    1:php-imap               ##################################################&lt;br /&gt;
    2:php-xml                ##################################################&lt;br /&gt;
    3:php-mysql              ##################################################&lt;br /&gt;
    4:php-ldap               ##################################################&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
Voilà  votre plate-forme prête à  fonctionner !&lt;br /&gt;
== L&#039;annuaire LDAP ==&lt;br /&gt;
Il est également possible d&#039;adosser le groupware à  un annuaire LDAP (site officiel : http://openldap.org). Avantage de la méthode : il va permettre de centraliser . C&#039;est l&#039;option qui sera présentée ici car elle permet d&#039;utiliser de manière optimale les fonctionnalités d&#039;eGroupWare. L&#039;installation du serveur LDAP est simple :&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# urpmi openldap-servers openldap-client&lt;br /&gt;
 Préparation...              ##################################################&lt;br /&gt;
    1:openldap-servers       ##################################################&lt;br /&gt;
    2:openldap-client        ##################################################&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
Le recours à  un annuaire LDAP présuppose deux choses : l&#039;installation du module php-ldap pour Apache (ce que nous avons fait dans le paragraphe précédent) et l&#039;intégration d&#039;une classe nécessaire pour inclure des paramètres eGroupWare dans la définition des comptes de groupes et d&#039;utilisateurs. Pour ce faire, copiez les schémas fournis dans les sources (les schémas seront ajoutés dès la prochaine version du RPM Mandrake), phpgwaccount.schema et phpgwcontact.schema dans l&#039;arborescence LDAP. Comme leurs noms l&#039;indiquent, l&#039;un permet de définir les comptes de groupes et d&#039;utilisateurs, l&#039;autre permet de définir le stockage des contacts dans l&#039;annuaire. Pour finir, déclarez l&#039;utilisation de ces schémas dans slapd.conf et redémarrez le serveur.&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# ls /etc/openldap/schema&amp;lt;/nowiki&amp;gt;&amp;lt;br /&amp;gt; local.schema phpgwaccount.schema phpgwcontact.schema&amp;lt;br /&amp;gt; # cat /etc/openldap/slapd.conf&amp;lt;br /&amp;gt; ...&amp;lt;br /&amp;gt; include /etc/openldap/schema/phpgwaccount.schema&amp;lt;br /&amp;gt; include /etc/openldap/schema/phpgwcontact.schema&amp;lt;br /&amp;gt; ...&amp;lt;br /&amp;gt; # service ldap restart&amp;lt;/div&amp;gt;&lt;br /&gt;
== Le support de la messagerie ==&lt;br /&gt;
Nous allons utiliser également un serveur SMTP et un serveur POP/IMAP. Les choix réalisés par l&#039;équipe d&#039;eGroupWare privilégient Postfix d&#039;un côté et Cyrus-IMAP de l&#039;autre. Il est tout à  fait envisageable d&#039;utiliser d&#039;autres produits mais ceux-ci ont l&#039;avantage de permettre ensuite la gestion du compte de messagerie à  travers l&#039;interface du groupware (gestion des boites mail, alias de mail, forwards, et bientôt les absences).&lt;br /&gt;
Attention : les requêtes sur les utilisateurs eGroupWare concernant la messagerie se basent sur la classe qmailUser et l&#039;attribut mailAlternateAddress. Ci-dessous un extrait du fichier de configuration de Postfix main.cf concernant la construction de la requête LDAP à  effectuer :&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# cat /etc/postfix/main.cf&amp;lt;/nowiki&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; virtual_alias_maps = ldap:ldapuser, ldap:ldapgroup&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; ldapuser_server_host = 127.0.0.1&amp;lt;br /&amp;gt; ldapuser_server_port = 389&amp;lt;br /&amp;gt; ldapuser_bind = yes&amp;lt;br /&amp;gt; ldapuser_bind_dn = cn=adminmail,dc=domain,dc=com&amp;lt;br /&amp;gt; ldapuser_bind_pw = Xd25./T&amp;lt;br /&amp;gt; ldapuser_search_base = ou=Personnes,dc=domain,dc=com&amp;lt;br /&amp;gt; ldapuser_timeout = 60&amp;lt;br /&amp;gt; ldapuser_query_filter = (&amp;amp;(objectclass=qmailUser)(mailAlternateAddress=%s))&amp;lt;br /&amp;gt; ldapuser_result_attribute = mail&amp;lt;br /&amp;gt; ldapuser_lookup_timeout = 60&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; ldapgroup_server_host = 127.0.0.1&amp;lt;br /&amp;gt; ldapgroup_server_port = 389&amp;lt;br /&amp;gt; ldapgroup_bind = yes&amp;lt;br /&amp;gt; ldapgroup_bind_dn = cn=adminmail,dc=domain,dc=com&amp;lt;br /&amp;gt; ldapgroup_bind_pw = Xd25./T&amp;lt;br /&amp;gt; ldapgroup_search_base = ou=Groupes,dc=domain,dc=com&amp;lt;br /&amp;gt; ldapgroup_timeout = 60&amp;lt;br /&amp;gt; ldapgroup_query_filter = (&amp;amp;(objectclass=mailRecipient)(mailAlternateAddress=%s))&amp;lt;br /&amp;gt; ldapgroup_result_attribute = rfc822MailMember&amp;lt;br /&amp;gt; ldapgroup_lookup_timeout = 60&amp;lt;br /&amp;gt; ....&amp;lt;/div&amp;gt;&lt;br /&gt;
On pourra bien sur affiner cette configuration mais ce n&#039;est pas l&#039;objet de l&#039;article. Consulter Postfix-Cyrus-Web-cyradm-HOWTO, un bon point de départ.&lt;br /&gt;
== L&#039;installation de eGroupWare ==&lt;br /&gt;
=== Les étapes de l&#039;installation ===&lt;br /&gt;
L&#039;installation peut se faire à  partir des sources :&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# cd /var/www/html&amp;lt;/nowiki&amp;gt;&amp;lt;br /&amp;gt; # tar xjf eGroupWare-0.9.99.015-1.tar.bz2&amp;lt;/div&amp;gt;&lt;br /&gt;
Comme nous travaillons sur une Mandrake, nous utiliserons les packages prévu à  cet effet. Il est possible de télécharger le package édité par l&#039;équipe d&#039;eGoupWare (eGroupWare-all-apps-0.9.99.015-1.noarch.rpm). Toutefois dans un soucis de cohérence, nous utiliserons les packages fournis par la source contrib de Mandrake. Pour installer eGroupWare et tous ses modules :&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# urpmi -a egroupware egroupware-&amp;lt;/nowiki&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
Par défaut les fichiers s&#039;installent dans /var/www/html/egroupware.&lt;br /&gt;
Le processus d&#039;installation d&#039;eGroupWare prévoit la création de la base de donnée pour MySQL et PostgreSQL. Nous reprenons ci-dessous les étapes qui permettent la création en ligne de commande de la base et d&#039;un utilisateur qui aura les droits sur cette base pour MySQL.&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# mysqladmin --user=root create egroupware&amp;lt;/nowiki&amp;gt;&amp;lt;br /&amp;gt; # mysql --user=root mysql&amp;lt;br /&amp;gt; mysql&amp;gt; GRANT ALL ON egroupware.* TO egroupware@localhost IDENTIFIED BY &#039;passwd&#039;;&amp;lt;br /&amp;gt; mysql&amp;gt; flush privileges;&amp;lt;/div&amp;gt;&lt;br /&gt;
Voilà , nous laissons de côté maintenant la ligne de commande pour passer à  l&#039;installeur web d&#039;eGroupWare. L&#039;installation va alors se faire en 3 étapes à  partir de l&#039;URL suivante dans notre cas : http://localhost/egroupware/setup.&lt;br /&gt;
=== Vérification de l&#039;installation ===&lt;br /&gt;
[[Image:egroupware-egw1.png]]&lt;br /&gt;
=== Génération du fichier header.inc.php ===&lt;br /&gt;
[[Image:egroupware-egw2.png]]&lt;br /&gt;
Ce fichier contient les paramètres de base d&#039;eGroupWare comme les paramètres de connexion à  la base de données mais aussi la possibilité d&#039;en générer plusieurs instances en définissant des domaines. Cette notion peut être utile si l&#039;on souhaite par exemple définir deux interfaces distinctes d&#039;eGroupWare, par exemple, l&#039;Intranet et les clients.&lt;br /&gt;
Vous allez également créer deux utilisateurs clés : l&#039;un vous servira à  rééditer cette page, l&#039;autre à  poursuivre la procédure d&#039;installation.&lt;br /&gt;
Il est recommandé de conserver une sauvegarde de ce fichier.&lt;br /&gt;
=== Installation des applications ===&lt;br /&gt;
[[Image:egroupware-egw3.png]]&lt;br /&gt;
Connectez-vous comme demandé.&lt;br /&gt;
L&#039;étape suivante consiste à  valider l&#039;installation des différents applications du groupware et créer les tables correspondantes dans votre base de données.&lt;br /&gt;
=== Configuration d&#039;eGroupWare ===&lt;br /&gt;
[[Image:egroupware-egw4.png]]&lt;br /&gt;
La configuration se présente ensuite comme une série de champs à  renseigner. L&#039;installation d&#039;eGroupWare nécessite la création d&#039;un répertoire, de préférence hors de l&#039;arborescence Apache qui contiendra notamment les fichiers uploadés par l&#039;intermédiaire du gestionnaire de fichiers. Ce répertoire devra être accessible à  l&#039;utilisateur exécutant l&#039;instance Apache (le répertoire est créé par défault, vérifiez qu&#039;il existe, sinon tapez le code ci desous).&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# mkdir /var/lib/egroupware&amp;lt;/nowiki&amp;gt;&amp;lt;br /&amp;gt; # chown -R apache:apache /var/lib/egroupware&amp;lt;/div&amp;gt;&lt;br /&gt;
Vous devrez également spécifier l&#039;IP ou le nom de votre serveur FTP si vous souhaitez utiliser le module FTP du groupware.&lt;br /&gt;
[[Image:egroupware-egw5.png]]&lt;br /&gt;
Nous voilà  maintenant arrivés à  la configuration de l&#039;authentification et des comptes utilisateurs. Plusieurs options s&#039;offrent à  vous. Si vous ne disposez pas d&#039;annuaire LDAP, choisissez de stocker les comptes dans la base de données. Dans notre cas, ayant recours à  LDAP, nous allons donc compléter les éléments nécessaires. Ils sont classiques pour ceux qui ont l&#039;habitude de manipuler ce service : home directory à  utiliser, shell, contexte des OU (Organizational Units) d&#039;utilisateurs et de groupes, manager de LDAP et mot de passe.&lt;br /&gt;
Il est indispensable également d&#039;autoriser l&#039;utilisation de LDAP v.3, que l&#039;on retrouve par défaut dans la majorité des distributions. Enregistrer la configuration obtenue.&lt;br /&gt;
Nous compléterons cette phase par la création d&#039;un compte administrateur qui sera utilisé ensuite pour l&#039;administration du groupware (gestion des ACL, gestion des utilisateurs et des applications). Il vous est d&#039;ailleurs proposé de créer des comptes de démonstration pour tester le bon fonctionnement de l&#039;application. Vous pouvez en vérifier la création dans l&#039;annuaire :&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# ldapsearch -x &amp;quot;uid=adminegw&amp;quot;&amp;lt;/nowiki&amp;gt;&amp;lt;br /&amp;gt; # adminegw, Users, domain, com&amp;lt;br /&amp;gt; dn: uid=adminegw,ou=Users,dc=domain,dc=com&amp;lt;br /&amp;gt; phpgwAccountType: u&amp;lt;br /&amp;gt; uidNumber: 2008&amp;lt;br /&amp;gt; objectClass: top&amp;lt;br /&amp;gt; objectClass: person&amp;lt;br /&amp;gt; objectClass: organizationalPerson&amp;lt;br /&amp;gt; objectClass: inetOrgPerson&amp;lt;br /&amp;gt; objectClass: posixAccount&amp;lt;br /&amp;gt; objectClass: shadowAccount&amp;lt;br /&amp;gt; objectClass: phpgwAccount&amp;lt;br /&amp;gt; cn: adminegw adminegw&amp;lt;br /&amp;gt; uid: adminegw&amp;lt;br /&amp;gt; sn: adminegw&amp;lt;br /&amp;gt; givenName: adminegw&amp;lt;br /&amp;gt; homeDirectory: /home/adminegw&amp;lt;br /&amp;gt; loginShell: /bin/false&amp;lt;br /&amp;gt; gidNumber: 2&amp;lt;br /&amp;gt; phpgwAccountStatus: A&amp;lt;br /&amp;gt; phpgwAccountExpires: -1&amp;lt;/div&amp;gt;&lt;br /&gt;
L&#039;utilisateur est bien créé et on retrouve la classe phpgwAccount ainsi que les attributs élémentaires : phpgwAccountType (u : user ou g : groupe), phpgwAccountStatus (A : compte actif), phpgwAccountExpires (-1 : jamais).&lt;br /&gt;
La configuration est maintenant terminée. Vous pouvez toutefois à  ce stade gérer les langues (ajouter / supprimer). 22 langues sont aujourd&#039;hui disponibles, par défaut sont sélectionnés l&#039;anglais et le français. Vous pouvez également gérer les applications. Le mode d&#039;installation que nous avons utilisé fournit toutes les applications disponibles, vous pouvez restreindre cette liste.&lt;br /&gt;
L&#039;installation et la configuration de base sont maintenant terminées, nous passons à  la configuration de l&#039;utilisation du groupware.&lt;br /&gt;
&lt;br /&gt;
== Configuration du groupware ==&lt;br /&gt;
Une fois connecté en tant qu&#039;administrateur du groupware, allez sur le paneau d&#039;administration . [[Image:egroupware-egw6.png]]&lt;br /&gt;
Il vous offre les fonctionnalités suivantes :&lt;br /&gt;
* gestion des applications&lt;br /&gt;
* gestion des utilisateurs&lt;br /&gt;
* configuration du site et paramétrage mail&lt;br /&gt;
* gestion des catégories et ACL&lt;br /&gt;
Avant de poursuivre il est indispensable de définir ces 2 dernières notions qui sous-tendent toute la configuration qui va suivre.&lt;br /&gt;
=== ACL et catégories globales ===&lt;br /&gt;
[[Image:egroupware-egw7.png]]&lt;br /&gt;
Les ACL sont un terme générique (Acces Control List) que l&#039;on retrouvera dans de nombreuses applications. Elles vont définir les droits d&#039;accès d&#039;un utilisateur et/ou d&#039;un groupe aux données d&#039;une application. Elles sont au nombre de quatre : lecture, ajout, modification, suppression.&lt;br /&gt;
Dans notre exemple, les membres du groupe commerciaux auront tous les droits sur les données du gestionnaire de fichiers relatives à  leur groupe. Seuls les membres du groupe techniciens auront un accès en lecture.&lt;br /&gt;
[[Image:egroupware-egw8.png]]&amp;lt;br /&amp;gt;&lt;br /&gt;
Les catégories globales permettent d&#039;organiser les données et sont communes à  toutes les applications. Il est possible également de créer des catégories spécifiques à  une application ainsi que des catégories personnelles. Elles sont importantes car elles permettent de rationaliser l&#039;affichage des données et de d&#039;organiser celles-ci plus clairement.&lt;br /&gt;
=== Une administration centralisée des utilisateurs ===&lt;br /&gt;
La gestion des utilisateurs et des groupes peut se faire à  plusieurs niveaux :&lt;br /&gt;
[[Image:egroupware-egw9.png]]&lt;br /&gt;
* le module de gestion de comptes utilisateurs : il permet de créer, modifier, supprimer un utilisateur. Les modifications portent sur les données de base du compte, la configuration mail, les applications attribuées spécifiquement à  un utilisateur.[[Image:egroupware-egw10.png]]&lt;br /&gt;
* le module de gestion de comptes de groupes : il permet de positionner les utilisateurs dans le groupe choisi. Pour pouvoir positionner les ACL, cliquer sur l&#039;application et sauvegarder puis cliquer à  nouveau sur la puce situé à  droite de la dite application.&amp;lt;br /&amp;gt; On conseille souvent d&#039;utiliser un groupe &amp;quot;Default&amp;quot; dans lequel on positionnera tous les utilisateurs. Celui-ci permettra de fixer les applications de base communes à  tous ainsi que des ACL. On affinera ensuite groupe par groupe ces ACL en fonction des besoins.&lt;br /&gt;
* On trouve enfin la gestion des préférences utilisateurs. Ces préférences agissent sur l&#039;ergonomie des applications, leur mode de visualisation, la possibilité ou non de personnaliser la configuration. Ces préférences peuvent être définies par les utilisateurs eux-mêmes mais restreintes par l&#039;administrateur qui positionnera des préférences forcées pour une ou plusieurs applications. Enfin on dispose également de la possibilité de fixer des préférences par défaut.&lt;br /&gt;
== Revue de détail des principales applications ==&lt;br /&gt;
Nous allons ici passer en revue les applications les plus courantes ainsi que leurs fonctionnalités dans le cadre du groupware.&lt;br /&gt;
* Messagerie&amp;lt;br /&amp;gt;[[Image:egroupware-egw11.png]]&amp;lt;br /&amp;gt; eGroupWare propose deux types de webmails qui offrent les fonctionnalités classiques de ce type de client. On trouve entre autres un lien avec le carnet de carnet d&#039;adresses.&lt;br /&gt;
* Carnet d&#039;adresses&amp;lt;br /&amp;gt; Il s&#039;agit la d&#039;une fonctionnalité classique. Il permet des importations et des exportations à  partir de différents formats standards. L&#039;ensemble des contacts est stockable dans une base LDAP.&lt;br /&gt;
* Calendrier&amp;lt;br /&amp;gt;[[Image:egroupware-egw12.png]]&amp;lt;br /&amp;gt; Le calendrier dispose de vues quotidienne, par semaine, mensuelle ou annuelle. On peut ajouter des événements pour soi-même, d&#039;autres utilisateurs ou des groupes. Il est possible alors de générer des alarmes par mail pour prévenir les différents participants. Ce calendrier est également doté d&#039;un système de confirmation pour chaque événement qui permet ainsi au mieux leur planification.&lt;br /&gt;
Egalement à  disposition, un planificateur de tâches, qui permet de visualiser rapidement les plages horaires disponibles pour fixer un rendez-vous pour une ou plusieurs personnes.&lt;br /&gt;
* Infolog &amp;lt;br /&amp;gt; C&#039;est un outil à  mi chemin entre le post-itÂ© et la mini gestion de projet. Il permet de programmer des tâches, en associant ou non d&#039;autres participants, des contacts, des événements du calendrier, des fichiers. Des indicateurs permettent ensuite de visualiser la progression du dit projet.&lt;br /&gt;
L&#039;application propose en tout une quinzaine de modules.&lt;br /&gt;
== Sécurisation et optimisation de l&#039;installation ==&lt;br /&gt;
La sécurisation de la plate-forme supportant eGroupWare relève des conseils habituels liés à  l&#039;administration d&#039;une plate-forme LAMP (Linux-Apache-MySQL-PHP).&lt;br /&gt;
Concernant le serveur MySQL, vérifiez que l&#039;utilisateur root dispose bien d&#039;un mot de passe. En effet, à  l&#039;installation du serveur, l&#039;utilisateur root est initialisé dans la base &amp;quot; mysql&amp;quot; sans aucun mot de passe :&lt;br /&gt;
De plus nous allons restreindre l&#039;accès au serveur MySQL aux seules requêtes lancées en local :&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# cat /etc/my.cnf&amp;lt;/nowiki&amp;gt;&amp;lt;br /&amp;gt; [mysqld]&amp;lt;br /&amp;gt; ...&amp;lt;br /&amp;gt; bind_address = 127.0.0.1&amp;lt;br /&amp;gt; ...&amp;lt;/div&amp;gt;&lt;br /&gt;
Concernant la configuration de PHP, les développeurs apportent quelques conseils pour en optimiser les performances :&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;max_execution_time ? 30&amp;lt;br /&amp;gt; memory_limit ? 16 Mo&amp;lt;br /&amp;gt; register_globals = Off&amp;lt;br /&amp;gt; safe_mode = On&amp;lt;/div&amp;gt;&lt;br /&gt;
Vous devrez également personnaliser le paramètre &amp;quot;upload_max_filesize&amp;quot; en fonction des besoins pour le gestionnaire de fichiers. C&#039;est à  ce niveau que la taille des uploads de fichiers de cette application sera limité et non par un paramètre propre au groupware.&lt;br /&gt;
Enfin eGroupWare peut gagner considérablement en rapidité d&#039;exécution grâce à  Turck MMCache. Il accélère l&#039;interprétation du code PHP et réduit la charge du serveur.&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# urpmi php-mmcache php-mmcache-admin&lt;br /&gt;
 installation de php-mmcache php-mmcache-admin&lt;br /&gt;
    1:php-mmcache            ##################################################&lt;br /&gt;
    2:php-mmcache-admin      ##################################################&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
Attribuer un mot de passe à  l&#039;administrateur de l&#039;interface de gestion du cache :&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# php -q /var/www/html/admin/php-mmcache/mmcache_password.php&amp;lt;/nowiki&amp;gt;&amp;lt;br /&amp;gt; Changing password for Turck MMCache Web Interface (mmcache.php)&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; Enter admin name: admincache&amp;lt;br /&amp;gt; New admin password: R3./po&amp;lt;br /&amp;gt; Retype new admin password: R3./po&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; Add the following lines into your php.ini and restart HTTPD&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; mmcache.admin.name=&amp;quot;admincache&amp;quot;&amp;lt;br /&amp;gt; mmcache.admin.password=&amp;quot;$1$BGhHjZ5A$wNPAxc3BfU12POJoxopBO/&amp;quot;&amp;lt;/div&amp;gt;&lt;br /&gt;
On accède ensuite à  l&#039;interface de gestion du cache : http://localhost/admin/php-mmcache&lt;br /&gt;
== eGroupWare, les projets ==&lt;br /&gt;
Le projet est aujourd&#039;hui disponible dans sa première version stable. Mais le groupe de développement travaille déjà  sur ce que sera la prochaine version stable, la 1.2. Dans cette optique, de nombreux d&#039;objectifs ont étés fixés et mis en avant.&lt;br /&gt;
Il est projeté de mettre à  disposition un moteur de workflow1&lt;br /&gt;
Dans les développements très attendus, on note aussi un certain nombre de connecteurs vers l&#039;extérieur qui permettront d&#039;inclure encore plus le groupware dans son environnement : une synchronisation avec les PDA (ou organiseurs personnels en bon français) disponible très prochainement, un connecteur pour Evolution, et un connecteur pour Outlook.&lt;br /&gt;
Il est prévu également de travailler sur l&#039;ergonomie de l&#039;interface utilisateur et notamment un assistant pour la configuration de celle ci. De nouveaux modèles de documents, ainsi que de nouvelles fonctionnalités comme le glisser-déposer sont également au programme.&lt;br /&gt;
Des applications vont être ré-écrites, soit totalement (carnet d&#039;adresses, gestion des accidents), soit partiellement(webmail, gestionnaire de fichiers, gestion de projets).&lt;br /&gt;
Enfin pour vérifier l&#039;identité de l&#039;utilisateur du groupware, celui-ci devrait inclure également une fonction d&#039;autorité de certification, tout ceci dans un souci de mieux répondre aux exigences de sécurisation du système.&lt;br /&gt;
== Liens ==&lt;br /&gt;
* [http://egroupware.org le site du projet] &lt;br /&gt;
* [http://sourceforge.net/mail/?group_id=78745 les listes de diffusion (utilisateurs, développeurs)] &lt;br /&gt;
* [http://linuxfrench.net/article.php?id_article=1403 Interview de Reiner JUNG, chef de projet ] &lt;br /&gt;
* [http://httpd.apache.org le site d&#039;Apache ] &lt;br /&gt;
* [http://www.mysql.com le site de MySQL ] &lt;br /&gt;
* [http://openldap.org le site de OpenLDAP ] &lt;br /&gt;
* [http://lea-linux.org/reseau/Apache_PHP_MySQL.html HOWTO plate-forme LAMP]&lt;br /&gt;
* [http://www.linux.com/howtos/Postfix-Cyrus-Web-cyradm-HOWTO/index.shtml HOWTO Postfix/Cyrus-IMAP]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;merci&amp;quot;&amp;gt;Cette page est issue de la documentation &#039;pré-wiki&#039; de Léa a été convertie avec HTML::WikiConverter. Elle fut créée par Anne le 05/09/2004.&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Copyright =&lt;br /&gt;
Copyright &amp;amp;copy; 05/09/2004, Anne&lt;br /&gt;
{{CC-BY-NC-SA}}&lt;/div&gt;</summary>
		<author><name>LeaJice</name></author>
	</entry>
	<entry>
		<id>https://lea-linux.org/docs/index.php?title=EGroupware&amp;diff=16832</id>
		<title>EGroupware</title>
		<link rel="alternate" type="text/html" href="https://lea-linux.org/docs/index.php?title=EGroupware&amp;diff=16832"/>
		<updated>2009-03-05T16:41:01Z</updated>

		<summary type="html">&lt;p&gt;LeaJice : Annulation des modifications 16828 par 86.105.181.238 (Discuter)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Applications]]&lt;br /&gt;
= Une solution de groupware OpenSource =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;leatitre&amp;quot;&amp;gt;Une solution de groupware OpenSource&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;leapar&amp;quot;&amp;gt;Par [mailto:anne@lea-linux.org Anne]&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Quand l&#039;évolution des technologies impacte sur l&#039;organisation d&#039;entreprise ==&lt;br /&gt;
&lt;br /&gt;
Le schéma organisationnel des entreprises qui était plutôt de type hiérarchique et rigide il y a quelques années tend à  s&#039;aplatir et se doter de nombreuses fonctionnalités transversales.&lt;br /&gt;
&lt;br /&gt;
Cette évolution implique donc un remaniement des modes de communication et d&#039;organisation, ainsi que du système d&#039;information. Un des outils clé de ce changement est le groupware qui dote l&#039;entreprise de moyens simples et efficaces pour permettre à  l&#039;ensemble de ses collaborateurs d&#039;y parvenir : partage de l&#039;information à  travers de multiples calendriers privés ou non, de forums, d&#039; outils collaboratifs (de type wiki), de gestionnaire de contacts...&lt;br /&gt;
&lt;br /&gt;
Les quatre membres fondateurs d&#039;eGroupWare sont issus du projet phpGroupWare. Celui-ci n&#039;évoluant pas selon eux dans la bonne direction et ne collant pas assez aux besoins exprimés par les utilisateurs d&#039;un groupware, ils décidèrent de forker(partir et refaire) le projet et d&#039;initier ainsi eGroupWare.&lt;br /&gt;
&lt;br /&gt;
L&#039;objectif clairement annoncé est de concurrencer des solutions commerciales comme Notes et Exchange tout en respectant les principes de l&#039;Open Source. à cet effet l&#039;équipe d&#039;eGroupWare a donc orienté son outil en fonction de ce que doit apporter un logiciel de groupware dans une entreprise, une association,...&lt;br /&gt;
&lt;br /&gt;
Selon Reiner Jung, chef de projet eGroupWare : &amp;quot;Souvent les gens définissent le groupware comme un regroupement de fonctions comme le mail, une todo liste, des notes et un calendrier. àa n&#039;est pas notre définition. Un groupware devrait offrir un espace de travail partagé. Cet espace doit mettre à  disposition un ensemble de modules pour le travail de tous les jours. Dans mon activité quotidienne, je partage aussi des fichiers, gère mes projets, les développeurs ont besoin d&#039;un wiki, d&#039;un forum pour les discussions... Quand je peux exécuter la plupart de mes tâches quotidiennes à  travers un groupware, alors c&#039;en est un véritablement. Nous sommes sur la voie de ce genre de réalisation.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Dans de nombreux projets, les développeurs et/ou les entreprises créent un road map et décident des besoins des utilisateurs à  la version suivante. àa n&#039;est pas la bonne façon de procéder. Nous voulons obtenir un groupware qui remplisse les besoins d&#039;utilisateurs dans le monde professionnel. Selon moi, ce sont les utilisateurs qui développent eGroupWare. Ils ont souvent des connaissances plus importantes que nous sur le fonctionnement d&#039;un groupware et savent pertinemment ce dont ils ont besoin. Le projet doit réaliser, coordonner les demandes, s&#039;assurer de sa viabilité, sa stabilité et sa sécurité.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Particularité de fonctionnement : le groupe propose à  des entreprises qui souhaitent voir une ou plusieurs fonctionnalités aboutir plus rapidement de financer des heures de développement.. La méthode est de plus en plus courante et gage d&#039;adéquation du développement aux besoins réels.&lt;br /&gt;
&lt;br /&gt;
Un des avantages d&#039;eGroupWare est sa simplicité de mise en place. Elle ne doit toutefois pas occulter la complexité que représente la mise à  plat du circuit de l&#039;information dans une organisation. En effet, le groupware ne sera finalement que le reflet de ce schéma organisationnel. L&#039;objet de cet article est de montrer pas à  pas la solution technique. Nous n&#039;aborderons pas l&#039;étape préalable indispensable qui consiste à  partir de l&#039;organigramme de l&#039;entreprise pour mettre en place des groupes d&#039;utilisateurs et organiser les différents niveaux d&#039;accès à  l&#039;information.&lt;br /&gt;
&lt;br /&gt;
eGroupWare est constitué d&#039;un ensemble de modules présentant les fonctionnalités suivantes :&lt;br /&gt;
&lt;br /&gt;
* webmail &lt;br /&gt;
* carnet de contacts &lt;br /&gt;
* calendrier partagé &lt;br /&gt;
* forum &lt;br /&gt;
* wiki &lt;br /&gt;
* CMS &lt;br /&gt;
* gestion de tickets d&#039;incident &lt;br /&gt;
* éditeur de site wysiwyg &lt;br /&gt;
* lient FTP et gestionnaire de fichiers &lt;br /&gt;
* messagerie instantanée &lt;br /&gt;
* gestionnaire de projets &lt;br /&gt;
* outil de sondage &lt;br /&gt;
* gestion graphique des utilisateurs et groupes, ainsi que de leur compte mail et LDAP &lt;br /&gt;
Chacun de ces modules, on le verra, peut être partagé avec tout ou partie des utilisateurs accédant à  eGroupWare. Passons aux choses concrètes : les prérequis&lt;br /&gt;
Passons maintenant à  l&#039;installation de la plate-forme qui va supporter eGroupWare. Nous avons fait le choix d&#039;une Mandrake 10.0 pour supporter cette plate-forme.&lt;br /&gt;
== Installer une plate-forme LAMP ==&lt;br /&gt;
L&#039;application nécessite au moins un serveur web, PHP et une base de données. Il est possible de l&#039;installer sur IIS, mais pour une raison on ne peut plus partisane, nous choisirons Apache sur Linux. L&#039;ensemble des informations du groupware et notamment le système d&#039;ACL (Access control List) est stocké dans une base de donnée, qui peut être MySQL ou PostgreSQL.&lt;br /&gt;
Nous allons décrire ci-dessous les modalités d&#039;installation de cette plate-forme LAMP (Linux, Apache, MySQL, PHP).&lt;br /&gt;
&#039;&#039;&#039;La première étape consiste à  installer Apache :&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# urpmi apache2&lt;br /&gt;
 Pour satisfaire les dépendances, les paquetages suivants vont être installés (1 Mo):&lt;br /&gt;
 apache-conf-2.0.48-2mdk.i586&lt;br /&gt;
 apache2-2.0.48-6mdk.i586&lt;br /&gt;
 apache2-common-2.0.48-6mdk.i586&lt;br /&gt;
 apache2-modules-2.0.48-6mdk.i586&lt;br /&gt;
 Est-ce correct ? (O/n)&lt;br /&gt;
 Préparation...              ##################################################&lt;br /&gt;
    1:apache-conf            ##################################################&lt;br /&gt;
    2:apache2-modules        ##################################################&lt;br /&gt;
    3:apache2-common         ##################################################&lt;br /&gt;
    4:apache2                ##################################################&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
Le fichier de configuration est /etc/httpd/conf/httpd.conf. (Mandrake a délocalisé une partie de ce fichier dans /etc/httpd/conf/commonhttpd.conf). La configuration par défaut permet de lancer dès maintenant le service Apache :&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# service httpd start&lt;br /&gt;
 Starting httpd:                                                 [  OK  ]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
La plate-forme nécessite également l&#039;installation de PHP :&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# urpmi php&lt;br /&gt;
 Un des paquetages suivants est nécessaire :&lt;br /&gt;
  1- apache2-mod_php-2.0.48_4.3.4-1mdk.i586&lt;br /&gt;
  2- mod_php-4.3.4-1mdk.i586&lt;br /&gt;
  3- php-cli-4.3.4-4mdk.i586&lt;br /&gt;
  4- php-cgi-4.3.4-4mdk.i586&lt;br /&gt;
 Que choisissez-vous ? (1-4)1&lt;br /&gt;
 Préparation...              ##################################################&lt;br /&gt;
    1:apache2-mod_php        ##################################################&lt;br /&gt;
 Shutting down httpd2: [  OK  ]&lt;br /&gt;
 Checking configuration sanity for Apache 2.0:  [  OK  ]&lt;br /&gt;
 Starting httpd2: [  OK  ]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
Là  encore la configuration proposée permet un fonctionnement immédiat de PHP. Il nous reste enfin à  installer le serveur MySQL :&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# urpmi mysql&lt;br /&gt;
 Un des paquetages suivants est nécessaire :&lt;br /&gt;
  1- MySQL-4.0.18-1.1.100mdk.i586&lt;br /&gt;
  2- MySQL-Max-4.0.18-1.1.100mdk.i586&lt;br /&gt;
 Que choisissez-vous ? (1-2)1&lt;br /&gt;
 Pour satisfaire les dépendances, les paquetages suivants vont être installés (18 Mo):&lt;br /&gt;
 MySQL-4.0.18-1.1.100mdk.i586&lt;br /&gt;
 MySQL-client-4.0.18-1.1.100mdk.i586&lt;br /&gt;
 MySQL-common-4.0.18-1.1.100mdk.i586&lt;br /&gt;
 libmysql12-4.0.18-1.1.100mdk.i586&lt;br /&gt;
 perl-Mysql-1.22_19-9mdk.i586&lt;br /&gt;
 Est-ce correct ? (O/n)&lt;br /&gt;
 Préparation...              ##################################################&lt;br /&gt;
    1:libmysql12             ##################################################&lt;br /&gt;
    2:MySQL-client           ##################################################&lt;br /&gt;
    3:perl-Mysql             ##################################################&lt;br /&gt;
    4:MySQL-common           ##################################################&lt;br /&gt;
    5:MySQL                  ##################################################&lt;br /&gt;
 040512 12:40:46  /usr/sbin/mysqld: Shutdown Complete&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
On procède ensuite au démarrage du service :&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# service mysql start&lt;br /&gt;
 Starting mysql:                                                 [  OK  ]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
L&#039;installation nécessite enfin un certain nombre de modules pour Apache, nécessaires au bon fonctionnement d&#039;eGroupWare.&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# urpmi php-mysql php-xml php-imap php-ldap&lt;br /&gt;
 Préparation...              ##################################################&lt;br /&gt;
    1:php-imap               ##################################################&lt;br /&gt;
    2:php-xml                ##################################################&lt;br /&gt;
    3:php-mysql              ##################################################&lt;br /&gt;
    4:php-ldap               ##################################################&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
Voilà  votre plate-forme prête à  fonctionner !&lt;br /&gt;
== L&#039;annuaire LDAP ==&lt;br /&gt;
Il est également possible d&#039;adosser le groupware à  un annuaire LDAP (site officiel : http://openldap.org). Avantage de la méthode : il va permettre de centraliser . C&#039;est l&#039;option qui sera présentée ici car elle permet d&#039;utiliser de manière optimale les fonctionnalités d&#039;eGroupWare. L&#039;installation du serveur LDAP est simple :&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# urpmi openldap-servers openldap-client&lt;br /&gt;
 Préparation...              ##################################################&lt;br /&gt;
    1:openldap-servers       ##################################################&lt;br /&gt;
    2:openldap-client        ##################################################&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
Le recours à  un annuaire LDAP présuppose deux choses : l&#039;installation du module php-ldap pour Apache (ce que nous avons fait dans le paragraphe précédent) et l&#039;intégration d&#039;une classe nécessaire pour inclure des paramètres eGroupWare dans la définition des comptes de groupes et d&#039;utilisateurs. Pour ce faire, copiez les schémas fournis dans les sources (les schémas seront ajoutés dès la prochaine version du RPM Mandrake), phpgwaccount.schema et phpgwcontact.schema dans l&#039;arborescence LDAP. Comme leurs noms l&#039;indiquent, l&#039;un permet de définir les comptes de groupes et d&#039;utilisateurs, l&#039;autre permet de définir le stockage des contacts dans l&#039;annuaire. Pour finir, déclarez l&#039;utilisation de ces schémas dans slapd.conf et redémarrez le serveur.&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# ls /etc/openldap/schema&amp;lt;/nowiki&amp;gt;&amp;lt;br /&amp;gt; local.schema phpgwaccount.schema phpgwcontact.schema&amp;lt;br /&amp;gt; # cat /etc/openldap/slapd.conf&amp;lt;br /&amp;gt; ...&amp;lt;br /&amp;gt; include /etc/openldap/schema/phpgwaccount.schema&amp;lt;br /&amp;gt; include /etc/openldap/schema/phpgwcontact.schema&amp;lt;br /&amp;gt; ...&amp;lt;br /&amp;gt; # service ldap restart&amp;lt;/div&amp;gt;&lt;br /&gt;
== Le support de la messagerie ==&lt;br /&gt;
Nous allons utiliser également un serveur SMTP et un serveur POP/IMAP. Les choix réalisés par l&#039;équipe d&#039;eGroupWare privilégient Postfix d&#039;un côté et Cyrus-IMAP de l&#039;autre. Il est tout à  fait envisageable d&#039;utiliser d&#039;autres produits mais ceux-ci ont l&#039;avantage de permettre ensuite la gestion du compte de messagerie à  travers l&#039;interface du groupware (gestion des boites mail, alias de mail, forwards, et bientôt les absences).&lt;br /&gt;
Attention : les requêtes sur les utilisateurs eGroupWare concernant la messagerie se basent sur la classe qmailUser et l&#039;attribut mailAlternateAddress. Ci-dessous un extrait du fichier de configuration de Postfix main.cf concernant la construction de la requête LDAP à  effectuer :&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# cat /etc/postfix/main.cf&amp;lt;/nowiki&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; virtual_alias_maps = ldap:ldapuser, ldap:ldapgroup&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; ldapuser_server_host = 127.0.0.1&amp;lt;br /&amp;gt; ldapuser_server_port = 389&amp;lt;br /&amp;gt; ldapuser_bind = yes&amp;lt;br /&amp;gt; ldapuser_bind_dn = cn=adminmail,dc=domain,dc=com&amp;lt;br /&amp;gt; ldapuser_bind_pw = Xd25./T&amp;lt;br /&amp;gt; ldapuser_search_base = ou=Personnes,dc=domain,dc=com&amp;lt;br /&amp;gt; ldapuser_timeout = 60&amp;lt;br /&amp;gt; ldapuser_query_filter = (&amp;amp;(objectclass=qmailUser)(mailAlternateAddress=%s))&amp;lt;br /&amp;gt; ldapuser_result_attribute = mail&amp;lt;br /&amp;gt; ldapuser_lookup_timeout = 60&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; ldapgroup_server_host = 127.0.0.1&amp;lt;br /&amp;gt; ldapgroup_server_port = 389&amp;lt;br /&amp;gt; ldapgroup_bind = yes&amp;lt;br /&amp;gt; ldapgroup_bind_dn = cn=adminmail,dc=domain,dc=com&amp;lt;br /&amp;gt; ldapgroup_bind_pw = Xd25./T&amp;lt;br /&amp;gt; ldapgroup_search_base = ou=Groupes,dc=domain,dc=com&amp;lt;br /&amp;gt; ldapgroup_timeout = 60&amp;lt;br /&amp;gt; ldapgroup_query_filter = (&amp;amp;(objectclass=mailRecipient)(mailAlternateAddress=%s))&amp;lt;br /&amp;gt; ldapgroup_result_attribute = rfc822MailMember&amp;lt;br /&amp;gt; ldapgroup_lookup_timeout = 60&amp;lt;br /&amp;gt; ....&amp;lt;/div&amp;gt;&lt;br /&gt;
On pourra bien sur affiner cette configuration mais ce n&#039;est pas l&#039;objet de l&#039;article. Consulter Postfix-Cyrus-Web-cyradm-HOWTO, un bon point de départ.&lt;br /&gt;
== L&#039;installation de eGroupWare ==&lt;br /&gt;
=== Les étapes de l&#039;installation ===&lt;br /&gt;
L&#039;installation peut se faire à  partir des sources :&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# cd /var/www/html&amp;lt;/nowiki&amp;gt;&amp;lt;br /&amp;gt; # tar xjf eGroupWare-0.9.99.015-1.tar.bz2&amp;lt;/div&amp;gt;&lt;br /&gt;
Comme nous travaillons sur une Mandrake, nous utiliserons les packages prévu à  cet effet. Il est possible de télécharger le package édité par l&#039;équipe d&#039;eGoupWare (eGroupWare-all-apps-0.9.99.015-1.noarch.rpm). Toutefois dans un soucis de cohérence, nous utiliserons les packages fournis par la source contrib de Mandrake. Pour installer eGroupWare et tous ses modules :&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# urpmi -a egroupware egroupware-&amp;lt;/nowiki&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
Par défaut les fichiers s&#039;installent dans /var/www/html/egroupware.&lt;br /&gt;
Le processus d&#039;installation d&#039;eGroupWare prévoit la création de la base de donnée pour MySQL et PostgreSQL. Nous reprenons ci-dessous les étapes qui permettent la création en ligne de commande de la base et d&#039;un utilisateur qui aura les droits sur cette base pour MySQL.&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# mysqladmin --user=root create egroupware&amp;lt;/nowiki&amp;gt;&amp;lt;br /&amp;gt; # mysql --user=root mysql&amp;lt;br /&amp;gt; mysql&amp;gt; GRANT ALL ON egroupware.* TO egroupware@localhost IDENTIFIED BY &#039;passwd&#039;;&amp;lt;br /&amp;gt; mysql&amp;gt; flush privileges;&amp;lt;/div&amp;gt;&lt;br /&gt;
Voilà , nous laissons de côté maintenant la ligne de commande pour passer à  l&#039;installeur web d&#039;eGroupWare. L&#039;installation va alors se faire en 3 étapes à  partir de l&#039;URL suivante dans notre cas : http://localhost/egroupware/setup.&lt;br /&gt;
=== Vérification de l&#039;installation ===&lt;br /&gt;
[[Image:egroupware-egw1.png]]&lt;br /&gt;
=== Génération du fichier header.inc.php ===&lt;br /&gt;
[[Image:egroupware-egw2.png]]&lt;br /&gt;
Ce fichier contient les paramètres de base d&#039;eGroupWare comme les paramètres de connexion à  la base de données mais aussi la possibilité d&#039;en générer plusieurs instances en définissant des domaines. Cette notion peut être utile si l&#039;on souhaite par exemple définir deux interfaces distinctes d&#039;eGroupWare, par exemple, l&#039;Intranet et les clients.&lt;br /&gt;
Vous allez également créer deux utilisateurs clés : l&#039;un vous servira à  rééditer cette page, l&#039;autre à  poursuivre la procédure d&#039;installation.&lt;br /&gt;
Il est recommandé de conserver une sauvegarde de ce fichier.&lt;br /&gt;
=== Installation des applications ===&lt;br /&gt;
[[Image:egroupware-egw3.png]]&lt;br /&gt;
Connectez-vous comme demandé.&lt;br /&gt;
L&#039;étape suivante consiste à  valider l&#039;installation des différents applications du groupware et créer les tables correspondantes dans votre base de données.&lt;br /&gt;
=== Configuration d&#039;eGroupWare ===&lt;br /&gt;
[[Image:egroupware-egw4.png]]&lt;br /&gt;
La configuration se présente ensuite comme une série de champs à  renseigner. L&#039;installation d&#039;eGroupWare nécessite la création d&#039;un répertoire, de préférence hors de l&#039;arborescence Apache qui contiendra notamment les fichiers uploadés par l&#039;intermédiaire du gestionnaire de fichiers. Ce répertoire devra être accessible à  l&#039;utilisateur exécutant l&#039;instance Apache (le répertoire est créé par défault, vérifiez qu&#039;il existe, sinon tapez le code ci desous).&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# mkdir /var/lib/egroupware&amp;lt;/nowiki&amp;gt;&amp;lt;br /&amp;gt; # chown -R apache:apache /var/lib/egroupware&amp;lt;/div&amp;gt;&lt;br /&gt;
Vous devrez également spécifier l&#039;IP ou le nom de votre serveur FTP si vous souhaitez utiliser le module FTP du groupware.&lt;br /&gt;
[[Image:egroupware-egw5.png]]&lt;br /&gt;
Nous voilà  maintenant arrivés à  la configuration de l&#039;authentification et des comptes utilisateurs. Plusieurs options s&#039;offrent à  vous. Si vous ne disposez pas d&#039;annuaire LDAP, choisissez de stocker les comptes dans la base de données. Dans notre cas, ayant recours à  LDAP, nous allons donc compléter les éléments nécessaires. Ils sont classiques pour ceux qui ont l&#039;habitude de manipuler ce service : home directory à  utiliser, shell, contexte des OU (Organizational Units) d&#039;utilisateurs et de groupes, manager de LDAP et mot de passe.&lt;br /&gt;
Il est indispensable également d&#039;autoriser l&#039;utilisation de LDAP v.3, que l&#039;on retrouve par défaut dans la majorité des distributions. Enregistrer la configuration obtenue.&lt;br /&gt;
Nous compléterons cette phase par la création d&#039;un compte administrateur qui sera utilisé ensuite pour l&#039;administration du groupware (gestion des ACL, gestion des utilisateurs et des applications). Il vous est d&#039;ailleurs proposé de créer des comptes de démonstration pour tester le bon fonctionnement de l&#039;application. Vous pouvez en vérifier la création dans l&#039;annuaire :&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# ldapsearch -x &amp;quot;uid=adminegw&amp;quot;&amp;lt;/nowiki&amp;gt;&amp;lt;br /&amp;gt; # adminegw, Users, domain, com&amp;lt;br /&amp;gt; dn: uid=adminegw,ou=Users,dc=domain,dc=com&amp;lt;br /&amp;gt; phpgwAccountType: u&amp;lt;br /&amp;gt; uidNumber: 2008&amp;lt;br /&amp;gt; objectClass: top&amp;lt;br /&amp;gt; objectClass: person&amp;lt;br /&amp;gt; objectClass: organizationalPerson&amp;lt;br /&amp;gt; objectClass: inetOrgPerson&amp;lt;br /&amp;gt; objectClass: posixAccount&amp;lt;br /&amp;gt; objectClass: shadowAccount&amp;lt;br /&amp;gt; objectClass: phpgwAccount&amp;lt;br /&amp;gt; cn: adminegw adminegw&amp;lt;br /&amp;gt; uid: adminegw&amp;lt;br /&amp;gt; sn: adminegw&amp;lt;br /&amp;gt; givenName: adminegw&amp;lt;br /&amp;gt; homeDirectory: /home/adminegw&amp;lt;br /&amp;gt; loginShell: /bin/false&amp;lt;br /&amp;gt; gidNumber: 2&amp;lt;br /&amp;gt; phpgwAccountStatus: A&amp;lt;br /&amp;gt; phpgwAccountExpires: -1&amp;lt;/div&amp;gt;&lt;br /&gt;
L&#039;utilisateur est bien créé et on retrouve la classe phpgwAccount ainsi que les attributs élémentaires : phpgwAccountType (u : user ou g : groupe), phpgwAccountStatus (A : compte actif), phpgwAccountExpires (-1 : jamais).&lt;br /&gt;
La configuration est maintenant terminée. Vous pouvez toutefois à  ce stade gérer les langues (ajouter / supprimer). 22 langues sont aujourd&#039;hui disponibles, par défaut sont sélectionnés l&#039;anglais et le français. Vous pouvez également gérer les applications. Le mode d&#039;installation que nous avons utilisé fournit toutes les applications disponibles, vous pouvez restreindre cette liste.&lt;br /&gt;
L&#039;installation et la configuration de base sont maintenant terminées, nous passons à  la configuration de l&#039;utilisation du groupware.&lt;br /&gt;
&lt;br /&gt;
== Configuration du groupware ==&lt;br /&gt;
Une fois connecté en tant qu&#039;administrateur du groupware, allez sur le paneau d&#039;administration . [[Image:egroupware-egw6.png]]&lt;br /&gt;
Il vous offre les fonctionnalités suivantes :&lt;br /&gt;
* gestion des applications&lt;br /&gt;
* gestion des utilisateurs&lt;br /&gt;
* configuration du site et paramétrage mail&lt;br /&gt;
* gestion des catégories et ACL&lt;br /&gt;
Avant de poursuivre il est indispensable de définir ces 2 dernières notions qui sous-tendent toute la configuration qui va suivre.&lt;br /&gt;
=== ACL et catégories globales ===&lt;br /&gt;
[[Image:egroupware-egw7.png]]&lt;br /&gt;
Les ACL sont un terme générique (Acces Control List) que l&#039;on retrouvera dans de nombreuses applications. Elles vont définir les droits d&#039;accès d&#039;un utilisateur et/ou d&#039;un groupe aux données d&#039;une application. Elles sont au nombre de quatre : lecture, ajout, modification, suppression.&lt;br /&gt;
Dans notre exemple, les membres du groupe commerciaux auront tous les droits sur les données du gestionnaire de fichiers relatives à  leur groupe. Seuls les membres du groupe techniciens auront un accès en lecture.&lt;br /&gt;
[[Image:egroupware-egw8.png]]&amp;lt;br /&amp;gt;&lt;br /&gt;
Les catégories globales permettent d&#039;organiser les données et sont communes à  toutes les applications. Il est possible également de créer des catégories spécifiques à  une application ainsi que des catégories personnelles. Elles sont importantes car elles permettent de rationaliser l&#039;affichage des données et de d&#039;organiser celles-ci plus clairement.&lt;br /&gt;
=== Une administration centralisée des utilisateurs ===&lt;br /&gt;
La gestion des utilisateurs et des groupes peut se faire à  plusieurs niveaux :&lt;br /&gt;
[[Image:egroupware-egw9.png]]&lt;br /&gt;
* le module de gestion de comptes utilisateurs : il permet de créer, modifier, supprimer un utilisateur. Les modifications portent sur les données de base du compte, la configuration mail, les applications attribuées spécifiquement à  un utilisateur.[[Image:egroupware-egw10.png]]&lt;br /&gt;
* le module de gestion de comptes de groupes : il permet de positionner les utilisateurs dans le groupe choisi. Pour pouvoir positionner les ACL, cliquer sur l&#039;application et sauvegarder puis cliquer à  nouveau sur la puce situé à  droite de la dite application.&amp;lt;br /&amp;gt; On conseille souvent d&#039;utiliser un groupe &amp;quot;Default&amp;quot; dans lequel on positionnera tous les utilisateurs. Celui-ci permettra de fixer les applications de base communes à  tous ainsi que des ACL. On affinera ensuite groupe par groupe ces ACL en fonction des besoins.&lt;br /&gt;
* On trouve enfin la gestion des préférences utilisateurs. Ces préférences agissent sur l&#039;ergonomie des applications, leur mode de visualisation, la possibilité ou non de personnaliser la configuration. Ces préférences peuvent être définies par les utilisateurs eux-mêmes mais restreintes par l&#039;administrateur qui positionnera des préférences forcées pour une ou plusieurs applications. Enfin on dispose également de la possibilité de fixer des préférences par défaut.&lt;br /&gt;
== Revue de détail des principales applications ==&lt;br /&gt;
Nous allons ici passer en revue les applications les plus courantes ainsi que leurs fonctionnalités dans le cadre du groupware.&lt;br /&gt;
* Messagerie&amp;lt;br /&amp;gt;[[Image:egroupware-egw11.png]]&amp;lt;br /&amp;gt; eGroupWare propose deux types de webmails qui offrent les fonctionnalités classiques de ce type de client. On trouve entre autres un lien avec le carnet de carnet d&#039;adresses.&lt;br /&gt;
* Carnet d&#039;adresses&amp;lt;br /&amp;gt; Il s&#039;agit la d&#039;une fonctionnalité classique. Il permet des importations et des exportations à  partir de différents formats standards. L&#039;ensemble des contacts est stockable dans une base LDAP.&lt;br /&gt;
* Calendrier&amp;lt;br /&amp;gt;[[Image:egroupware-egw12.png]]&amp;lt;br /&amp;gt; Le calendrier dispose de vues quotidienne, par semaine, mensuelle ou annuelle. On peut ajouter des événements pour soi-même, d&#039;autres utilisateurs ou des groupes. Il est possible alors de générer des alarmes par mail pour prévenir les différents participants. Ce calendrier est également doté d&#039;un système de confirmation pour chaque événement qui permet ainsi au mieux leur planification.&lt;br /&gt;
Egalement à  disposition, un planificateur de tâches, qui permet de visualiser rapidement les plages horaires disponibles pour fixer un rendez-vous pour une ou plusieurs personnes.&lt;br /&gt;
* Infolog &amp;lt;br /&amp;gt; C&#039;est un outil à  mi chemin entre le post-itÂ© et la mini gestion de projet. Il permet de programmer des tâches, en associant ou non d&#039;autres participants, des contacts, des événements du calendrier, des fichiers. Des indicateurs permettent ensuite de visualiser la progression du dit projet.&lt;br /&gt;
L&#039;application propose en tout une quinzaine de modules.&lt;br /&gt;
== Sécurisation et optimisation de l&#039;installation ==&lt;br /&gt;
La sécurisation de la plate-forme supportant eGroupWare relève des conseils habituels liés à  l&#039;administration d&#039;une plate-forme LAMP (Linux-Apache-MySQL-PHP).&lt;br /&gt;
Concernant le serveur MySQL, vérifiez que l&#039;utilisateur root dispose bien d&#039;un mot de passe. En effet, à  l&#039;installation du serveur, l&#039;utilisateur root est initialisé dans la base &amp;quot; mysql&amp;quot; sans aucun mot de passe :&lt;br /&gt;
De plus nous allons restreindre l&#039;accès au serveur MySQL aux seules requêtes lancées en local :&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# cat /etc/my.cnf&amp;lt;/nowiki&amp;gt;&amp;lt;br /&amp;gt; [mysqld]&amp;lt;br /&amp;gt; ...&amp;lt;br /&amp;gt; bind_address = 127.0.0.1&amp;lt;br /&amp;gt; ...&amp;lt;/div&amp;gt;&lt;br /&gt;
Concernant la configuration de PHP, les développeurs apportent quelques conseils pour en optimiser les performances :&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;max_execution_time ? 30&amp;lt;br /&amp;gt; memory_limit ? 16 Mo&amp;lt;br /&amp;gt; register_globals = Off&amp;lt;br /&amp;gt; safe_mode = On&amp;lt;/div&amp;gt;&lt;br /&gt;
Vous devrez également personnaliser le paramètre &amp;quot;upload_max_filesize&amp;quot; en fonction des besoins pour le gestionnaire de fichiers. C&#039;est à  ce niveau que la taille des uploads de fichiers de cette application sera limité et non par un paramètre propre au groupware.&lt;br /&gt;
Enfin eGroupWare peut gagner considérablement en rapidité d&#039;exécution grâce à  Turck MMCache. Il accélère l&#039;interprétation du code PHP et réduit la charge du serveur.&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# urpmi php-mmcache php-mmcache-admin&lt;br /&gt;
 installation de php-mmcache php-mmcache-admin&lt;br /&gt;
    1:php-mmcache            ##################################################&lt;br /&gt;
    2:php-mmcache-admin      ##################################################&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
Attribuer un mot de passe à  l&#039;administrateur de l&#039;interface de gestion du cache :&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# php -q /var/www/html/admin/php-mmcache/mmcache_password.php&amp;lt;/nowiki&amp;gt;&amp;lt;br /&amp;gt; Changing password for Turck MMCache Web Interface (mmcache.php)&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; Enter admin name: admincache&amp;lt;br /&amp;gt; New admin password: R3./po&amp;lt;br /&amp;gt; Retype new admin password: R3./po&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; Add the following lines into your php.ini and restart HTTPD&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; mmcache.admin.name=&amp;quot;admincache&amp;quot;&amp;lt;br /&amp;gt; mmcache.admin.password=&amp;quot;$1$BGhHjZ5A$wNPAxc3BfU12POJoxopBO/&amp;quot;&amp;lt;/div&amp;gt;&lt;br /&gt;
On accède ensuite à  l&#039;interface de gestion du cache : http://localhost/admin/php-mmcache&lt;br /&gt;
== eGroupWare, les projets ==&lt;br /&gt;
Le projet est aujourd&#039;hui disponible dans sa première version stable. Mais le groupe de développement travaille déjà  sur ce que sera la prochaine version stable, la 1.2. Dans cette optique, de nombreux d&#039;objectifs ont étés fixés et mis en avant.&lt;br /&gt;
Il est projeté de mettre à  disposition un moteur de workflow1&lt;br /&gt;
Dans les développements très attendus, on note aussi un certain nombre de connecteurs vers l&#039;extérieur qui permettront d&#039;inclure encore plus le groupware dans son environnement : une synchronisation avec les PDA (ou organiseurs personnels en bon français) disponible très prochainement, un connecteur pour Evolution, et un connecteur pour Outlook.&lt;br /&gt;
Il est prévu également de travailler sur l&#039;ergonomie de l&#039;interface utilisateur et notamment un assistant pour la configuration de celle ci. De nouveaux modèles de documents, ainsi que de nouvelles fonctionnalités comme le glisser-déposer sont également au programme.&lt;br /&gt;
Des applications vont être ré-écrites, soit totalement (carnet d&#039;adresses, gestion des accidents), soit partiellement(webmail, gestionnaire de fichiers, gestion de projets).&lt;br /&gt;
Enfin pour vérifier l&#039;identité de l&#039;utilisateur du groupware, celui-ci devrait inclure également une fonction d&#039;autorité de certification, tout ceci dans un souci de mieux répondre aux exigences de sécurisation du système.&lt;br /&gt;
== Liens ==&lt;br /&gt;
* [http://egroupware.org le site du projet] &lt;br /&gt;
* [http://sourceforge.net/mail/?group_id=78745 les listes de diffusion (utilisateurs, développeurs)] &lt;br /&gt;
* [http://linuxfrench.net/article.php?id_article=1403 Interview de Reiner JUNG, chef de projet ] &lt;br /&gt;
* [http://httpd.apache.org le site d&#039;Apache ] &lt;br /&gt;
* [http://www.mysql.com le site de MySQL ] &lt;br /&gt;
* [http://openldap.org le site de OpenLDAP ] &lt;br /&gt;
* [http://lea-linux.org/reseau/Apache_PHP_MySQL.html HOWTO plate-forme LAMP]&lt;br /&gt;
* [http://www.linux.com/howtos/Postfix-Cyrus-Web-cyradm-HOWTO/index.shtml HOWTO Postfix/Cyrus-IMAP]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;merci&amp;quot;&amp;gt;Cette page est issue de la documentation &#039;pré-wiki&#039; de Léa a été convertie avec HTML::WikiConverter. Elle fut créée par Anne le 05/09/2004.&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Copyright =&lt;br /&gt;
Copyright &amp;amp;copy; 05/09/2004, Anne&lt;br /&gt;
{{CC-BY-NC-SA}}&lt;/div&gt;</summary>
		<author><name>LeaJice</name></author>
	</entry>
	<entry>
		<id>https://lea-linux.org/docs/index.php?title=EGroupware&amp;diff=16831</id>
		<title>EGroupware</title>
		<link rel="alternate" type="text/html" href="https://lea-linux.org/docs/index.php?title=EGroupware&amp;diff=16831"/>
		<updated>2009-03-05T16:39:50Z</updated>

		<summary type="html">&lt;p&gt;LeaJice : Révocation des modifications par 87.236.195.86 (Discussion) vers la dernière version de 86.105.181.238&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;EAS3EO h1! nice site! oxyutelno&lt;/div&gt;</summary>
		<author><name>LeaJice</name></author>
	</entry>
	<entry>
		<id>https://lea-linux.org/docs/index.php?title=Installer_des_logiciels_sur_un_support_externe_(SD,_USB),_avec_une_ic%C3%B4ne_dans_le_mode_Easy_de_l%27EeePC_apparaissant_automatiquement&amp;diff=16827</id>
		<title>Installer des logiciels sur un support externe (SD, USB), avec une icône dans le mode Easy de l&#039;EeePC apparaissant automatiquement</title>
		<link rel="alternate" type="text/html" href="https://lea-linux.org/docs/index.php?title=Installer_des_logiciels_sur_un_support_externe_(SD,_USB),_avec_une_ic%C3%B4ne_dans_le_mode_Easy_de_l%27EeePC_apparaissant_automatiquement&amp;diff=16827"/>
		<updated>2009-03-04T20:27:33Z</updated>

		<summary type="html">&lt;p&gt;LeaJice : /* Plus simple : partitionner une clef USB ou la carte SDHC */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Nous allons voir dans cet article comment installer et exécuter des logiciels depuis un support amovible, tel que carte SD ou SDHC, clef USB, disque dur externe...&lt;br /&gt;
&lt;br /&gt;
De plus, grâce à une fonctionnalité cachée du mode Easy de l&#039;EeePC, l&#039;icône de lancement va apparaître lors de l&#039;insertion du support. (Techniquement, les icônes peuvent être définies mais ne pas apparaître si la ligne de commande est invalide, par exemple si le programme n&#039;existe pas. Cependant, si le programme se met à exister en cours de session, l&#039;icône apparaît automatiquement !)&lt;br /&gt;
&lt;br /&gt;
J&#039;ai utilisé cette méthode pour :&lt;br /&gt;
* [[Installer Firefox 3 ou 3.1 sur EeePC]] (remplacer /opt par /opt2 dans l&#039;article)&lt;br /&gt;
* Installer [[Un FPS sur l&#039;EeePC : Assault Cube]]&lt;br /&gt;
* Installer [[GoogleEarth sur l&#039;EeePC]]&lt;br /&gt;
Ce qui m&#039;a permis d&#039;économiser 120 Mo du disque principal :-)&lt;br /&gt;
&lt;br /&gt;
J&#039;ai depuis l&#039;écriture de cette article découvert comment [[Installer des logiciels sur EeePC et économiser de la place sur le disque principal|installer des logiciels intégrés à la distribution ou présents sur des dépôts additionnels]], ce qui fait une bien plus grande variété de logiciels candidats !&lt;br /&gt;
&lt;br /&gt;
== Préparation du support ==&lt;br /&gt;
&lt;br /&gt;
Les clefs USB ou les cartes SD sont formatées lors de leur achat au format FAT32 (format par défaut de Windows jusqu&#039;à récemment). Or pour des raisons de sécurité, les distributions Linux empêchent par défaut d&#039;exécuter des programmes stockés sur un tel support.&lt;br /&gt;
&lt;br /&gt;
Cette page : http://wiki.eeeuser.com/execute_apps_off_sd {{flag-en}} explique comment outrepasser cette protection, ou mieux, partitionner en 2 la clef / carte SD afin de faire une partie FAT32 et une partie spéciale Linux. Si vous le pouvez, c&#039;est la meilleure méthode, car elle ne nécessite pas de  &amp;quot;bidouiller&amp;quot; pour monter/démonter la partition automatiquement (voir ci-dessous), et elle doit être plus performante de quelques pour cents. Elle est décrite dans [[#Plus simple : partitionner une clef USB ou la carte SDHC|deuxième partie de cet article]].&lt;br /&gt;
&lt;br /&gt;
Pour ma part, je ne voulais pas repartitionner ma carte SD (il faudra que je teste ça un jour ceci dit). J&#039;ai donc créé un gros fichier dessus, que je vais utiliser comme une autre partition normale. Comme vous allez le voir, cette méthode ne nécessite pas de repartitionner la clef, mais en contre-partie, il va falloir modifier quelques programmes.&lt;br /&gt;
&lt;br /&gt;
Créez un fichier vide, nommé &#039;&#039;&#039;hdd&#039;&#039;&#039;, de 1 Giga-octets (soit 1048576 = 1024 x 1024, vous pouvez changer ce nombre pour augmenter/diminuer sa taille) sur la carte :&lt;br /&gt;
&amp;lt;code multi&amp;gt;&lt;br /&gt;
$ cd /media/MMC-SD/macartesd&lt;br /&gt;
$ dd if=/dev/zero of=hdd bs=1024 count=1048576&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Ensuite, il faut le formater en format &#039;&#039;&#039;ext2&#039;&#039;&#039; (oui on peut formater un fichier ;-) par la commande :&lt;br /&gt;
&amp;lt;code multi&amp;gt;&lt;br /&gt;
$ sudo mkfs.ext2 hdd&lt;br /&gt;
mke2fs 1.40-WIP (14-Nov-2006)&lt;br /&gt;
hdd n&#039;est pas un périphérique spécial en mode bloc.&lt;br /&gt;
Procéder malgré tout? (y pour oui, n pour non) y&lt;br /&gt;
Étiquette de système de fichiers=&lt;br /&gt;
Type de système d&#039;exploitation : Linux&lt;br /&gt;
Taille de bloc=4096 (log=2)&lt;br /&gt;
Taille de fragment=4096 (log=2)&lt;br /&gt;
131072 i-noeuds, 262144 blocs&lt;br /&gt;
13107 blocs (5.00%) réservés pour le super utilisateur&lt;br /&gt;
Premier bloc de données=0&lt;br /&gt;
Nombre maximum de blocs du système de fichiers=268435456&lt;br /&gt;
8 groupes de blocs&lt;br /&gt;
32768 blocs par groupe, 32768 fragments par groupe&lt;br /&gt;
16384 i-noeuds par groupe&lt;br /&gt;
Superblocs de secours stockés sur les blocs : &lt;br /&gt;
        32768, 98304, 163840, 229376&lt;br /&gt;
&lt;br /&gt;
Écriture des tables d&#039;i-noeuds : complété                        &lt;br /&gt;
Écriture des superblocs et de l&#039;information de comptabilité du système de&lt;br /&gt;
fichiers : complété&lt;br /&gt;
&lt;br /&gt;
Le système de fichiers sera automatiquement vérifié tous les 25 montages ou&lt;br /&gt;
après 180 jours, selon la première éventualité. Utiliser tune2fs -c ou -i&lt;br /&gt;
pour écraser la valeur.&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Enfin, vous pouvez le monter dans un répertoire (j&#039;ai choisi &#039;&#039;&#039;/opt2&#039;&#039;&#039;) et vous en servir :&lt;br /&gt;
&amp;lt;code multi&amp;gt;&lt;br /&gt;
$ sudo mkdir /opt2&lt;br /&gt;
$ sudo mount /media/MMC-SD/macartesd/hdd /opt2 -o loop&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Automatiser le montage du nouvel emplacement pour les logiciels ==&lt;br /&gt;
... et donc l&#039;apparition automatique des icônes définies pour les programmes présents sur ce support.&lt;br /&gt;
&lt;br /&gt;
Nous allons maintenant automatiser le montage et le démontage de notre disque virtuel. Si vous avez installé des applications dessus, disposant d&#039;une icône dans le mode Easy de l&#039;EeePC, celle-ci apparaîtra et disparaîtra lors de l&#039;insertion et du retrait du périphérique (en utilisant l&#039;icône du périphérique dans la bare de tâches, clic droit, retirer en toute sécurité).&lt;br /&gt;
&lt;br /&gt;
Par exemple, j&#039;ai [[Installer Firefox 3 ou 3.1 sur EeePC|installé Firefox 3.1]] dans le disque virtuel, monté dans /opt2, et son icône apparaît automatiquement. Elle disparaît lorsque je retire la carte SD.&lt;br /&gt;
&lt;br /&gt;
=== Automatisation du montage ===&lt;br /&gt;
&lt;br /&gt;
Le montage passe par le programme &amp;lt;code&amp;gt;/usr/bin/xandros_device_detection_dialog&amp;lt;/code&amp;gt;. Nous allons donc le modifier.&lt;br /&gt;
&lt;br /&gt;
Vous devez auparavant suivre le tutoriel [[Empêcher la détection automatique des périphériques USB et de la carte SD au démarrage de l&#039;EeePC]] afin de transformer ce programme en un script modifiable. Si vous ne l&#039;avez pas fait, faites-le maintenant.&lt;br /&gt;
&lt;br /&gt;
Voici les modifications apportées au script :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code multi&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
# monte automatiquement /opt2 si possible&lt;br /&gt;
if [ &amp;quot;`mount | grep /media/MMC-SD/SDHC16GO`&amp;quot; != &amp;quot;&amp;quot; \&lt;br /&gt;
  -a &amp;quot;`mount | grep /opt2`&amp;quot; = &amp;quot;&amp;quot; \&lt;br /&gt;
  -a -f /media/MMC-SD/SDHC16GO/hdd ] ; then&lt;br /&gt;
        sudo mount -o loop /media/MMC-SD/SDHC16GO/hdd /opt2&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# quitter le programme si la machine est démarrée depuis moins de 30 secondes&lt;br /&gt;
# (permet de ne pas afficher la boîte de dialogue pour la carte SD)&lt;br /&gt;
if [ `cat /proc/uptime | cut -f1 -d.` -lt 30 ] ; then exit ; fi&lt;br /&gt;
&lt;br /&gt;
# lancer le programme original en lui passant tous les arguments avec lesquels on a été appelé&lt;br /&gt;
exec xandros_device_detection_dialog.orig &amp;quot;$@&amp;quot;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La partie qui nous concerne est le premier bloc, entre if et fi.&lt;br /&gt;
Le test vérifie si le bon périphérique est monté (dans mon cas, ma carte SD dans /media/MMC-SD/SDHC16GO), puis si le disque virtuel n&#039;est pas monté (dans /opt2) et si le fichier le contenant existe bien (/media/MMC-SD/SDHC16GO/hdd). Dans ce cas, le fichier du disque virtuel est monté dans /opt2.&lt;br /&gt;
Vous devez bien sûr adapter ces valeurs à ce que vous avez choisi.&lt;br /&gt;
&lt;br /&gt;
Note : vous pouvez &amp;quot;choisir&amp;quot; le nom du répertoire dans lequel se monte votre périphérique USB, en lui donnant un ibellé (&#039;&#039;label&#039;&#039; en anglais). Pour ce faire, repérez le périphérique /dev/... avec la commande mount :&lt;br /&gt;
&amp;lt;code multi&amp;gt;&lt;br /&gt;
/home/user&amp;gt; mount&lt;br /&gt;
rootfs on / type rootfs (rw)&lt;br /&gt;
/dev/sda1 on / type ext2 (ro)&lt;br /&gt;
unionfs on / type unionfs (rw,dirs=/=rw:/=ro)&lt;br /&gt;
proc on /proc type proc (rw)&lt;br /&gt;
sysfs on /sys type sysfs (rw)&lt;br /&gt;
devpts on /dev/pts type devpts (rw)&lt;br /&gt;
tmpfs on /dev/shm type tmpfs (rw)&lt;br /&gt;
tmpfs on /tmp type tmpfs (rw)&lt;br /&gt;
usbfs on /proc/bus/usb type usbfs (rw)&lt;br /&gt;
/dev/sdb1 on /media/MMC-SD/SDHC16GO type vfat (rw,nosuid,nodev,noexec,fmask=0111,dmask=0000,codepage=cp850,iocharset=utf8,shortname=mixed)&lt;br /&gt;
/dev/loop0 on /opt2 type ext2 (rw)&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ici, il s&#039;agit de &#039;&#039;&#039;/dev/sdb1&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Ensuite donnez-lui un &#039;&#039;label&#039;&#039; par la commande :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code multi&amp;gt;&lt;br /&gt;
$ sudo e2label /dev/sdb1 mon_nouveau_label&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ou bien&lt;br /&gt;
&amp;lt;code multi&amp;gt;&lt;br /&gt;
$ sudo mkdosfs -n mon_nouveau_label /dev/sdb1&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
et le périphérique se montera dans le répertoire /media/MMC-SD/mon_nouveau_label (et apparaîtra aussi dans votre répertoire utilisateur sous ce nom).&lt;br /&gt;
&lt;br /&gt;
=== Automatisation du démontage ===&lt;br /&gt;
&lt;br /&gt;
Pour le démontage, nous devons modifier le programme &amp;lt;code&amp;gt;/bin/umount&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Comme c&#039;est un programme binaire (non modifiable facilement), aussi nous allons commencer par le renommer :&lt;br /&gt;
&amp;lt;code multi&amp;gt;&lt;br /&gt;
$ sudo mv /bin/umount /bin/umount.bin&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Puis nous allons créer un script dans l&#039;ancien emplacement (c&#039;est donc le script qui sera appelé à la place du programme original). Utilisez par exemple &amp;lt;code&amp;gt;$ sudo nano /bin/umount&amp;lt;/code&amp;gt; et copiez-collez le script ci-dessous.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code multi&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
# Léa 22/1/2009&lt;br /&gt;
# /bin/umount (le programme umount original est renommé umount.bin)&lt;br /&gt;
&lt;br /&gt;
# quand on essaie de démonter la carte SD, démonter le loop d&#039;abord&lt;br /&gt;
if `echo &amp;quot;$@&amp;quot; | grep -q SDHC16GO` ; then&lt;br /&gt;
        # démonte et détache le périphérique loop, pour libérer sdb1&lt;br /&gt;
        LOOP=`mount | grep &amp;quot;on /opt2 type&amp;quot; | cut -f1 -d&amp;quot; &amp;quot;`&lt;br /&gt;
        if [ &amp;quot;$LOOP&amp;quot; != &amp;quot;&amp;quot; ] ; then&lt;br /&gt;
                umount /opt2 &amp;amp;&amp;amp; \&lt;br /&gt;
                losetup --detach $LOOP&lt;br /&gt;
        fi&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# dans tous les cas, exécuter le umount original avec les mêmes arguments&lt;br /&gt;
# (et remplacer ce shell par umount.bin pour que l&#039;appelant&lt;br /&gt;
# récupère le code retour)&lt;br /&gt;
exec umount.bin &amp;quot;$@&amp;quot;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Bien sûr, remplacez dans le script &amp;lt;code&amp;gt;SDHC16GO&amp;lt;/code&amp;gt; et &lt;br /&gt;
&amp;lt;code&amp;gt;/opt2&amp;lt;/code&amp;gt; par les valeurs que vous avez choisies.&lt;br /&gt;
&lt;br /&gt;
Pour les plus curieux, le script contient des commentaires expliquant son fonctionnement.&lt;br /&gt;
&lt;br /&gt;
==Plus simple : partitionner une clef USB ou la carte SDHC==&lt;br /&gt;
&lt;br /&gt;
J&#039;ai fait le test en partitionnant en 2 une clef USB. L&#039;objectif est d&#039;avoir une partie au format &amp;quot;Linux&amp;quot; (en réalité &#039;&#039;&#039;ext2&#039;&#039;&#039;), et une autre au format Windows (en réalité &#039;&#039;&#039;FAT32&#039;&#039;&#039;) qui pourra être utilisée sur tous les ordinateurs, quelque soit leur système d&#039;exploitation.&lt;br /&gt;
&lt;br /&gt;
Cette méthode est plus simple, car il n&#039;y a aucun script à écrire pour monter/démonter le support : tout est géré automatiquement.&lt;br /&gt;
&lt;br /&gt;
Attention : cette manipulation va effacer toutes les informations présentes sur votre support.&lt;br /&gt;
&lt;br /&gt;
===Préparation du support===&lt;br /&gt;
&lt;br /&gt;
Nous allons utiliser l&#039;outil &amp;lt;code&amp;gt;fdisk&amp;lt;/code&amp;gt;, qui permet de définir les partitions (en ligne de commande car il n&#039;y a pas de logiciel graphique sur l&#039;EeePC).&lt;br /&gt;
&lt;br /&gt;
Ma clef USB est le périphérique &amp;lt;code&amp;gt;/dev/sdc&amp;lt;/code&amp;gt;. Avant de continuer, assurez-vous en comme expliqué ci-dessus (tapez simplement &amp;lt;code&amp;gt;mount&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Enfin, lancez fdisk :&lt;br /&gt;
&amp;lt;code multi&amp;gt;$ sudo fdisk /dev/sdc&lt;br /&gt;
&lt;br /&gt;
/home/user&amp;gt; sudo fdisk /dev/sdc&lt;br /&gt;
&lt;br /&gt;
The number of cylinders for this disk is set to 3816.&lt;br /&gt;
There is nothing wrong with that, but this is larger than 1024,&lt;br /&gt;
and could in certain setups cause problems with:&lt;br /&gt;
1) software that runs at boot time (e.g., old versions of LILO)&lt;br /&gt;
2) booting and partitioning software from other OSs&lt;br /&gt;
   (e.g., DOS FDISK, OS/2 FDISK)&lt;br /&gt;
&lt;br /&gt;
Command (m for help): p&lt;br /&gt;
&lt;br /&gt;
Disk /dev/sdc: 1000 MB, 1000341504 bytes&lt;br /&gt;
16 heads, 32 sectors/track, 3816 cylinders&lt;br /&gt;
Units = cylinders of 512 * 512 = 262144 bytes&lt;br /&gt;
&lt;br /&gt;
   Device Boot      Start         End      Blocks   Id  System&lt;br /&gt;
/dev/sdc1               1        1954      976880    b  W95 FAT32&lt;br /&gt;
&lt;br /&gt;
Command (m for help): &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La commande &#039;&#039;&#039;p&#039;&#039;&#039; permet d&#039;afficher la table de partitions de la clef.&lt;br /&gt;
&lt;br /&gt;
Nous allons supprimer la partition, en utilisant la commande &#039;&#039;&#039;d&#039;&#039;&#039; :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code multi&amp;gt;Command (m for help): d&lt;br /&gt;
Selected partition 1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Puis créer les 2 partitions avec la commande &#039;&#039;&#039;n&#039;&#039;&#039;. La première fera 512 Mo, la seconde prendra la place restante. La commande &#039;&#039;&#039;t&#039;&#039;&#039; permet de changer le type de partition :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code multi&amp;gt;Command (m for help): n&lt;br /&gt;
Command action&lt;br /&gt;
   e   extended&lt;br /&gt;
   p   primary partition (1-4)&lt;br /&gt;
p&lt;br /&gt;
Partition number (1-4): 1&lt;br /&gt;
First cylinder (1-3816, default 1): 1&lt;br /&gt;
Last cylinder or +size or +sizeM or +sizeK (1-3816, default 3816): +512M&lt;br /&gt;
&lt;br /&gt;
Command (m for help): n&lt;br /&gt;
Command action&lt;br /&gt;
   e   extended&lt;br /&gt;
   p   primary partition (1-4)&lt;br /&gt;
p&lt;br /&gt;
Partition number (1-4): 2&lt;br /&gt;
First cylinder (1955-3816, default 1955): 1955&lt;br /&gt;
Last cylinder or +size or +sizeM or +sizeK (1955-3816, default 3816): 3816&lt;br /&gt;
&lt;br /&gt;
Command (m for help): t&lt;br /&gt;
Partition number (1-4): 2&lt;br /&gt;
Hex code (type L to list codes): b&lt;br /&gt;
Changed system type of partition 2 to b (W95 FAT32)&lt;br /&gt;
&lt;br /&gt;
Command (m for help): p &lt;br /&gt;
&lt;br /&gt;
Disk /dev/sdc: 1000 MB, 1000341504 bytes&lt;br /&gt;
16 heads, 32 sectors/track, 3816 cylinders&lt;br /&gt;
Units = cylinders of 512 * 512 = 262144 bytes&lt;br /&gt;
&lt;br /&gt;
   Device Boot      Start         End      Blocks   Id  System&lt;br /&gt;
/dev/sdc1               1        1954      500208   83  Linux&lt;br /&gt;
/dev/sdc2            1955        3816      476672    b  W95 FAT32&lt;br /&gt;
&lt;br /&gt;
Command (m for help):&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Enfin, utilisez la commande &#039;&#039;&#039;w&#039;&#039;&#039; pour écrire la table des partitions sur la clef :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code multi&amp;gt;Command (m for help): w&lt;br /&gt;
The partition table has been altered!&lt;br /&gt;
&lt;br /&gt;
Calling ioctl() to re-read partition table.&lt;br /&gt;
&lt;br /&gt;
WARNING: Re-reading the partition table failed with error 16: Périphérique ou ressource occupé.&lt;br /&gt;
The kernel still uses the old table.&lt;br /&gt;
The new table will be used at the next reboot.&lt;br /&gt;
&lt;br /&gt;
WARNING: If you have created or modified any DOS 6.x&lt;br /&gt;
partitions, please see the fdisk manual page for additional&lt;br /&gt;
information.&lt;br /&gt;
Syncing disks.&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Reste maintenant à formater les 2 partitions. La première en &#039;&#039;&#039;ext2&#039;&#039;&#039;, la deuxième en FAT32 :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code multi&amp;gt;$ sudo mke2fs /dev/sdc1&lt;br /&gt;
mke2fs 1.40-WIP (14-Nov-2006)&lt;br /&gt;
Étiquette de système de fichiers=&lt;br /&gt;
Type de système d&#039;exploitation : Linux&lt;br /&gt;
Taille de bloc=1024 (log=0)&lt;br /&gt;
Taille de fragment=1024 (log=0)&lt;br /&gt;
125488 i-noeuds, 500208 blocs&lt;br /&gt;
25010 blocs (5.00%) réservés pour le super utilisateur&lt;br /&gt;
Premier bloc de données=1&lt;br /&gt;
Nombre maximum de blocs du système de fichiers=67633152&lt;br /&gt;
62 groupes de blocs&lt;br /&gt;
8192 blocs par groupe, 8192 fragments par groupe&lt;br /&gt;
2024 i-noeuds par groupe&lt;br /&gt;
Superblocs de secours stockés sur les blocs : &lt;br /&gt;
        8193, 24577, 40961, 57345, 73729, 204801, 221185, 401409&lt;br /&gt;
&lt;br /&gt;
Écriture des tables d&#039;i-noeuds : complété                        &lt;br /&gt;
Écriture des superblocs et de l&#039;information de comptabilité du système de&lt;br /&gt;
fichiers : complété&lt;br /&gt;
&lt;br /&gt;
Le système de fichiers sera automatiquement vérifié tous les 20 montages ou&lt;br /&gt;
après 180 jours, selon la première éventualité. Utiliser tune2fs -c ou -i&lt;br /&gt;
pour écraser la valeur.&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
et (formatage + libellé &amp;quot;FAT32&amp;quot; pour la deuxième partition) :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code multi&amp;gt;$ sudo mkdosfs -n FAT32 /dev/sdc2&lt;br /&gt;
mkdosfs 2.11 (12 Mar 2005)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Enfin, donnons le libellé &amp;quot;Linux&amp;quot; la partition ext2, afin qu&#039;elle soit montée dans un endroit facilement reconnaissable :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code multi&amp;gt;$ sudo e2label /dev/sdc1 Linux&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
C&#039;est terminé !&lt;br /&gt;
&lt;br /&gt;
===Configuration de l&#039;EeePC===&lt;br /&gt;
&lt;br /&gt;
Il suffit maintenant de repérer où est montée la partition Linux, en regardant dans le répertoire /media. Chez moi, elle se trouve dans &#039;&#039;&#039;/media/DataTraveler 2.0/Linux&#039;&#039;&#039; (on retrouve le nom que l&#039;on a donné à la partition) :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code multi&amp;gt;$ ls -l /media/DataTraveler\ 2.0/&lt;br /&gt;
total 17&lt;br /&gt;
drwxrwxrwx 2 root root 16384 1969-12-31 21:00 FAT32/&lt;br /&gt;
drwxr-xr-x 3 root root  1024 2009-03-02 21:09 Linux/&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous allons donc créer un lien &#039;&#039;&#039;/opt3&#039;&#039;&#039; vers ce répertoire (car /opt et /opt2 sont déjà utilisés) par :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code multi&amp;gt;$ sudo ln -s &amp;quot;/media/DataTraveler 2.0/Linux&amp;quot; /opt3&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Et c&#039;est tout ! Les modifications de scripts vues dans la première partie de l&#039;article ne sont pas nécessaires (bien que compatibles).&lt;br /&gt;
&lt;br /&gt;
Vous pouvez maintenant installer des logiciels sur le répertoire /opt3, créer des icônes vers ses programmes, qui dans le mode Easy apparaîtront automatiquement sur le bureau lors de l&#039;insertion, et disparaîtrons lors de son extraction (après clic droit sur l&#039;icône de clef USB dans la zone de notification, &amp;quot;Retirer en toute sécurité&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
==Création des icônes==&lt;br /&gt;
&lt;br /&gt;
Utilisez par exemple [[Launcher tools#Simple UI Editor|Simple UI Editor]], et définissez la ligne de commande vers l&#039;exécutable se trouvant sur votre support amovible, par exemple &amp;lt;code&amp;gt;/opt2/firefox3.1/firefox&amp;lt;/code&amp;gt; ou &amp;lt;code&amp;gt;/opt3/xchat/usr/bin/xchat.sh&amp;lt;/code&amp;gt; (Voir [[Installer des logiciels sur EeePC et économiser de la place sur le disque principal#Installation de logiciels, chacun dans son répertoire|cet article]]). C&#039;est tout, cela va créer une icône qui apparaîtra / disparaîtra automatiquement.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr /&amp;gt;&lt;br /&gt;
[[EeePC|Retour à la page EeePC]]&lt;br /&gt;
&amp;lt;hr /&amp;gt;&lt;/div&gt;</summary>
		<author><name>LeaJice</name></author>
	</entry>
	<entry>
		<id>https://lea-linux.org/docs/index.php?title=EGroupware&amp;diff=16826</id>
		<title>EGroupware</title>
		<link rel="alternate" type="text/html" href="https://lea-linux.org/docs/index.php?title=EGroupware&amp;diff=16826"/>
		<updated>2009-03-04T20:22:20Z</updated>

		<summary type="html">&lt;p&gt;LeaJice : Révocation des modifications par 92.48.193.55 (Discussion) vers la dernière version de Anthony&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Applications]]&lt;br /&gt;
= Une solution de groupware OpenSource =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;leatitre&amp;quot;&amp;gt;Une solution de groupware OpenSource&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;leapar&amp;quot;&amp;gt;Par [mailto:anne@lea-linux.org Anne]&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Quand l&#039;évolution des technologies impacte sur l&#039;organisation d&#039;entreprise ==&lt;br /&gt;
&lt;br /&gt;
Le schéma organisationnel des entreprises qui était plutôt de type hiérarchique et rigide il y a quelques années tend à  s&#039;aplatir et se doter de nombreuses fonctionnalités transversales.&lt;br /&gt;
&lt;br /&gt;
Cette évolution implique donc un remaniement des modes de communication et d&#039;organisation, ainsi que du système d&#039;information. Un des outils clé de ce changement est le groupware qui dote l&#039;entreprise de moyens simples et efficaces pour permettre à  l&#039;ensemble de ses collaborateurs d&#039;y parvenir : partage de l&#039;information à  travers de multiples calendriers privés ou non, de forums, d&#039; outils collaboratifs (de type wiki), de gestionnaire de contacts...&lt;br /&gt;
&lt;br /&gt;
Les quatre membres fondateurs d&#039;eGroupWare sont issus du projet phpGroupWare. Celui-ci n&#039;évoluant pas selon eux dans la bonne direction et ne collant pas assez aux besoins exprimés par les utilisateurs d&#039;un groupware, ils décidèrent de forker(partir et refaire) le projet et d&#039;initier ainsi eGroupWare.&lt;br /&gt;
&lt;br /&gt;
L&#039;objectif clairement annoncé est de concurrencer des solutions commerciales comme Notes et Exchange tout en respectant les principes de l&#039;Open Source. à cet effet l&#039;équipe d&#039;eGroupWare a donc orienté son outil en fonction de ce que doit apporter un logiciel de groupware dans une entreprise, une association,...&lt;br /&gt;
&lt;br /&gt;
Selon Reiner Jung, chef de projet eGroupWare : &amp;quot;Souvent les gens définissent le groupware comme un regroupement de fonctions comme le mail, une todo liste, des notes et un calendrier. àa n&#039;est pas notre définition. Un groupware devrait offrir un espace de travail partagé. Cet espace doit mettre à  disposition un ensemble de modules pour le travail de tous les jours. Dans mon activité quotidienne, je partage aussi des fichiers, gère mes projets, les développeurs ont besoin d&#039;un wiki, d&#039;un forum pour les discussions... Quand je peux exécuter la plupart de mes tâches quotidiennes à  travers un groupware, alors c&#039;en est un véritablement. Nous sommes sur la voie de ce genre de réalisation.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Dans de nombreux projets, les développeurs et/ou les entreprises créent un road map et décident des besoins des utilisateurs à  la version suivante. àa n&#039;est pas la bonne façon de procéder. Nous voulons obtenir un groupware qui remplisse les besoins d&#039;utilisateurs dans le monde professionnel. Selon moi, ce sont les utilisateurs qui développent eGroupWare. Ils ont souvent des connaissances plus importantes que nous sur le fonctionnement d&#039;un groupware et savent pertinemment ce dont ils ont besoin. Le projet doit réaliser, coordonner les demandes, s&#039;assurer de sa viabilité, sa stabilité et sa sécurité.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Particularité de fonctionnement : le groupe propose à  des entreprises qui souhaitent voir une ou plusieurs fonctionnalités aboutir plus rapidement de financer des heures de développement.. La méthode est de plus en plus courante et gage d&#039;adéquation du développement aux besoins réels.&lt;br /&gt;
&lt;br /&gt;
Un des avantages d&#039;eGroupWare est sa simplicité de mise en place. Elle ne doit toutefois pas occulter la complexité que représente la mise à  plat du circuit de l&#039;information dans une organisation. En effet, le groupware ne sera finalement que le reflet de ce schéma organisationnel. L&#039;objet de cet article est de montrer pas à  pas la solution technique. Nous n&#039;aborderons pas l&#039;étape préalable indispensable qui consiste à  partir de l&#039;organigramme de l&#039;entreprise pour mettre en place des groupes d&#039;utilisateurs et organiser les différents niveaux d&#039;accès à  l&#039;information.&lt;br /&gt;
&lt;br /&gt;
eGroupWare est constitué d&#039;un ensemble de modules présentant les fonctionnalités suivantes :&lt;br /&gt;
&lt;br /&gt;
* webmail &lt;br /&gt;
* carnet de contacts &lt;br /&gt;
* calendrier partagé &lt;br /&gt;
* forum &lt;br /&gt;
* wiki &lt;br /&gt;
* CMS &lt;br /&gt;
* gestion de tickets d&#039;incident &lt;br /&gt;
* éditeur de site wysiwyg &lt;br /&gt;
* lient FTP et gestionnaire de fichiers &lt;br /&gt;
* messagerie instantanée &lt;br /&gt;
* gestionnaire de projets &lt;br /&gt;
* outil de sondage &lt;br /&gt;
* gestion graphique des utilisateurs et groupes, ainsi que de leur compte mail et LDAP &lt;br /&gt;
Chacun de ces modules, on le verra, peut être partagé avec tout ou partie des utilisateurs accédant à  eGroupWare. Passons aux choses concrètes : les prérequis&lt;br /&gt;
Passons maintenant à  l&#039;installation de la plate-forme qui va supporter eGroupWare. Nous avons fait le choix d&#039;une Mandrake 10.0 pour supporter cette plate-forme.&lt;br /&gt;
== Installer une plate-forme LAMP ==&lt;br /&gt;
L&#039;application nécessite au moins un serveur web, PHP et une base de données. Il est possible de l&#039;installer sur IIS, mais pour une raison on ne peut plus partisane, nous choisirons Apache sur Linux. L&#039;ensemble des informations du groupware et notamment le système d&#039;ACL (Access control List) est stocké dans une base de donnée, qui peut être MySQL ou PostgreSQL.&lt;br /&gt;
Nous allons décrire ci-dessous les modalités d&#039;installation de cette plate-forme LAMP (Linux, Apache, MySQL, PHP).&lt;br /&gt;
&#039;&#039;&#039;La première étape consiste à  installer Apache :&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# urpmi apache2&lt;br /&gt;
 Pour satisfaire les dépendances, les paquetages suivants vont être installés (1 Mo):&lt;br /&gt;
 apache-conf-2.0.48-2mdk.i586&lt;br /&gt;
 apache2-2.0.48-6mdk.i586&lt;br /&gt;
 apache2-common-2.0.48-6mdk.i586&lt;br /&gt;
 apache2-modules-2.0.48-6mdk.i586&lt;br /&gt;
 Est-ce correct ? (O/n)&lt;br /&gt;
 Préparation...              ##################################################&lt;br /&gt;
    1:apache-conf            ##################################################&lt;br /&gt;
    2:apache2-modules        ##################################################&lt;br /&gt;
    3:apache2-common         ##################################################&lt;br /&gt;
    4:apache2                ##################################################&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
Le fichier de configuration est /etc/httpd/conf/httpd.conf. (Mandrake a délocalisé une partie de ce fichier dans /etc/httpd/conf/commonhttpd.conf). La configuration par défaut permet de lancer dès maintenant le service Apache :&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# service httpd start&lt;br /&gt;
 Starting httpd:                                                 [  OK  ]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
La plate-forme nécessite également l&#039;installation de PHP :&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# urpmi php&lt;br /&gt;
 Un des paquetages suivants est nécessaire :&lt;br /&gt;
  1- apache2-mod_php-2.0.48_4.3.4-1mdk.i586&lt;br /&gt;
  2- mod_php-4.3.4-1mdk.i586&lt;br /&gt;
  3- php-cli-4.3.4-4mdk.i586&lt;br /&gt;
  4- php-cgi-4.3.4-4mdk.i586&lt;br /&gt;
 Que choisissez-vous ? (1-4)1&lt;br /&gt;
 Préparation...              ##################################################&lt;br /&gt;
    1:apache2-mod_php        ##################################################&lt;br /&gt;
 Shutting down httpd2: [  OK  ]&lt;br /&gt;
 Checking configuration sanity for Apache 2.0:  [  OK  ]&lt;br /&gt;
 Starting httpd2: [  OK  ]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
Là  encore la configuration proposée permet un fonctionnement immédiat de PHP. Il nous reste enfin à  installer le serveur MySQL :&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# urpmi mysql&lt;br /&gt;
 Un des paquetages suivants est nécessaire :&lt;br /&gt;
  1- MySQL-4.0.18-1.1.100mdk.i586&lt;br /&gt;
  2- MySQL-Max-4.0.18-1.1.100mdk.i586&lt;br /&gt;
 Que choisissez-vous ? (1-2)1&lt;br /&gt;
 Pour satisfaire les dépendances, les paquetages suivants vont être installés (18 Mo):&lt;br /&gt;
 MySQL-4.0.18-1.1.100mdk.i586&lt;br /&gt;
 MySQL-client-4.0.18-1.1.100mdk.i586&lt;br /&gt;
 MySQL-common-4.0.18-1.1.100mdk.i586&lt;br /&gt;
 libmysql12-4.0.18-1.1.100mdk.i586&lt;br /&gt;
 perl-Mysql-1.22_19-9mdk.i586&lt;br /&gt;
 Est-ce correct ? (O/n)&lt;br /&gt;
 Préparation...              ##################################################&lt;br /&gt;
    1:libmysql12             ##################################################&lt;br /&gt;
    2:MySQL-client           ##################################################&lt;br /&gt;
    3:perl-Mysql             ##################################################&lt;br /&gt;
    4:MySQL-common           ##################################################&lt;br /&gt;
    5:MySQL                  ##################################################&lt;br /&gt;
 040512 12:40:46  /usr/sbin/mysqld: Shutdown Complete&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
On procède ensuite au démarrage du service :&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# service mysql start&lt;br /&gt;
 Starting mysql:                                                 [  OK  ]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
L&#039;installation nécessite enfin un certain nombre de modules pour Apache, nécessaires au bon fonctionnement d&#039;eGroupWare.&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# urpmi php-mysql php-xml php-imap php-ldap&lt;br /&gt;
 Préparation...              ##################################################&lt;br /&gt;
    1:php-imap               ##################################################&lt;br /&gt;
    2:php-xml                ##################################################&lt;br /&gt;
    3:php-mysql              ##################################################&lt;br /&gt;
    4:php-ldap               ##################################################&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
Voilà  votre plate-forme prête à  fonctionner !&lt;br /&gt;
== L&#039;annuaire LDAP ==&lt;br /&gt;
Il est également possible d&#039;adosser le groupware à  un annuaire LDAP (site officiel : http://openldap.org). Avantage de la méthode : il va permettre de centraliser . C&#039;est l&#039;option qui sera présentée ici car elle permet d&#039;utiliser de manière optimale les fonctionnalités d&#039;eGroupWare. L&#039;installation du serveur LDAP est simple :&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# urpmi openldap-servers openldap-client&lt;br /&gt;
 Préparation...              ##################################################&lt;br /&gt;
    1:openldap-servers       ##################################################&lt;br /&gt;
    2:openldap-client        ##################################################&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
Le recours à  un annuaire LDAP présuppose deux choses : l&#039;installation du module php-ldap pour Apache (ce que nous avons fait dans le paragraphe précédent) et l&#039;intégration d&#039;une classe nécessaire pour inclure des paramètres eGroupWare dans la définition des comptes de groupes et d&#039;utilisateurs. Pour ce faire, copiez les schémas fournis dans les sources (les schémas seront ajoutés dès la prochaine version du RPM Mandrake), phpgwaccount.schema et phpgwcontact.schema dans l&#039;arborescence LDAP. Comme leurs noms l&#039;indiquent, l&#039;un permet de définir les comptes de groupes et d&#039;utilisateurs, l&#039;autre permet de définir le stockage des contacts dans l&#039;annuaire. Pour finir, déclarez l&#039;utilisation de ces schémas dans slapd.conf et redémarrez le serveur.&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# ls /etc/openldap/schema&amp;lt;/nowiki&amp;gt;&amp;lt;br /&amp;gt; local.schema phpgwaccount.schema phpgwcontact.schema&amp;lt;br /&amp;gt; # cat /etc/openldap/slapd.conf&amp;lt;br /&amp;gt; ...&amp;lt;br /&amp;gt; include /etc/openldap/schema/phpgwaccount.schema&amp;lt;br /&amp;gt; include /etc/openldap/schema/phpgwcontact.schema&amp;lt;br /&amp;gt; ...&amp;lt;br /&amp;gt; # service ldap restart&amp;lt;/div&amp;gt;&lt;br /&gt;
== Le support de la messagerie ==&lt;br /&gt;
Nous allons utiliser également un serveur SMTP et un serveur POP/IMAP. Les choix réalisés par l&#039;équipe d&#039;eGroupWare privilégient Postfix d&#039;un côté et Cyrus-IMAP de l&#039;autre. Il est tout à  fait envisageable d&#039;utiliser d&#039;autres produits mais ceux-ci ont l&#039;avantage de permettre ensuite la gestion du compte de messagerie à  travers l&#039;interface du groupware (gestion des boites mail, alias de mail, forwards, et bientôt les absences).&lt;br /&gt;
Attention : les requêtes sur les utilisateurs eGroupWare concernant la messagerie se basent sur la classe qmailUser et l&#039;attribut mailAlternateAddress. Ci-dessous un extrait du fichier de configuration de Postfix main.cf concernant la construction de la requête LDAP à  effectuer :&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# cat /etc/postfix/main.cf&amp;lt;/nowiki&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; virtual_alias_maps = ldap:ldapuser, ldap:ldapgroup&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; ldapuser_server_host = 127.0.0.1&amp;lt;br /&amp;gt; ldapuser_server_port = 389&amp;lt;br /&amp;gt; ldapuser_bind = yes&amp;lt;br /&amp;gt; ldapuser_bind_dn = cn=adminmail,dc=domain,dc=com&amp;lt;br /&amp;gt; ldapuser_bind_pw = Xd25./T&amp;lt;br /&amp;gt; ldapuser_search_base = ou=Personnes,dc=domain,dc=com&amp;lt;br /&amp;gt; ldapuser_timeout = 60&amp;lt;br /&amp;gt; ldapuser_query_filter = (&amp;amp;(objectclass=qmailUser)(mailAlternateAddress=%s))&amp;lt;br /&amp;gt; ldapuser_result_attribute = mail&amp;lt;br /&amp;gt; ldapuser_lookup_timeout = 60&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; ldapgroup_server_host = 127.0.0.1&amp;lt;br /&amp;gt; ldapgroup_server_port = 389&amp;lt;br /&amp;gt; ldapgroup_bind = yes&amp;lt;br /&amp;gt; ldapgroup_bind_dn = cn=adminmail,dc=domain,dc=com&amp;lt;br /&amp;gt; ldapgroup_bind_pw = Xd25./T&amp;lt;br /&amp;gt; ldapgroup_search_base = ou=Groupes,dc=domain,dc=com&amp;lt;br /&amp;gt; ldapgroup_timeout = 60&amp;lt;br /&amp;gt; ldapgroup_query_filter = (&amp;amp;(objectclass=mailRecipient)(mailAlternateAddress=%s))&amp;lt;br /&amp;gt; ldapgroup_result_attribute = rfc822MailMember&amp;lt;br /&amp;gt; ldapgroup_lookup_timeout = 60&amp;lt;br /&amp;gt; ....&amp;lt;/div&amp;gt;&lt;br /&gt;
On pourra bien sur affiner cette configuration mais ce n&#039;est pas l&#039;objet de l&#039;article. Consulter Postfix-Cyrus-Web-cyradm-HOWTO, un bon point de départ.&lt;br /&gt;
== L&#039;installation de eGroupWare ==&lt;br /&gt;
=== Les étapes de l&#039;installation ===&lt;br /&gt;
L&#039;installation peut se faire à  partir des sources :&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# cd /var/www/html&amp;lt;/nowiki&amp;gt;&amp;lt;br /&amp;gt; # tar xjf eGroupWare-0.9.99.015-1.tar.bz2&amp;lt;/div&amp;gt;&lt;br /&gt;
Comme nous travaillons sur une Mandrake, nous utiliserons les packages prévu à  cet effet. Il est possible de télécharger le package édité par l&#039;équipe d&#039;eGoupWare (eGroupWare-all-apps-0.9.99.015-1.noarch.rpm). Toutefois dans un soucis de cohérence, nous utiliserons les packages fournis par la source contrib de Mandrake. Pour installer eGroupWare et tous ses modules :&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# urpmi -a egroupware egroupware-&amp;lt;/nowiki&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
Par défaut les fichiers s&#039;installent dans /var/www/html/egroupware.&lt;br /&gt;
Le processus d&#039;installation d&#039;eGroupWare prévoit la création de la base de donnée pour MySQL et PostgreSQL. Nous reprenons ci-dessous les étapes qui permettent la création en ligne de commande de la base et d&#039;un utilisateur qui aura les droits sur cette base pour MySQL.&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# mysqladmin --user=root create egroupware&amp;lt;/nowiki&amp;gt;&amp;lt;br /&amp;gt; # mysql --user=root mysql&amp;lt;br /&amp;gt; mysql&amp;gt; GRANT ALL ON egroupware.* TO egroupware@localhost IDENTIFIED BY &#039;passwd&#039;;&amp;lt;br /&amp;gt; mysql&amp;gt; flush privileges;&amp;lt;/div&amp;gt;&lt;br /&gt;
Voilà , nous laissons de côté maintenant la ligne de commande pour passer à  l&#039;installeur web d&#039;eGroupWare. L&#039;installation va alors se faire en 3 étapes à  partir de l&#039;URL suivante dans notre cas : http://localhost/egroupware/setup.&lt;br /&gt;
=== Vérification de l&#039;installation ===&lt;br /&gt;
[[Image:egroupware-egw1.png]]&lt;br /&gt;
=== Génération du fichier header.inc.php ===&lt;br /&gt;
[[Image:egroupware-egw2.png]]&lt;br /&gt;
Ce fichier contient les paramètres de base d&#039;eGroupWare comme les paramètres de connexion à  la base de données mais aussi la possibilité d&#039;en générer plusieurs instances en définissant des domaines. Cette notion peut être utile si l&#039;on souhaite par exemple définir deux interfaces distinctes d&#039;eGroupWare, par exemple, l&#039;Intranet et les clients.&lt;br /&gt;
Vous allez également créer deux utilisateurs clés : l&#039;un vous servira à  rééditer cette page, l&#039;autre à  poursuivre la procédure d&#039;installation.&lt;br /&gt;
Il est recommandé de conserver une sauvegarde de ce fichier.&lt;br /&gt;
=== Installation des applications ===&lt;br /&gt;
[[Image:egroupware-egw3.png]]&lt;br /&gt;
Connectez-vous comme demandé.&lt;br /&gt;
L&#039;étape suivante consiste à  valider l&#039;installation des différents applications du groupware et créer les tables correspondantes dans votre base de données.&lt;br /&gt;
=== Configuration d&#039;eGroupWare ===&lt;br /&gt;
[[Image:egroupware-egw4.png]]&lt;br /&gt;
La configuration se présente ensuite comme une série de champs à  renseigner. L&#039;installation d&#039;eGroupWare nécessite la création d&#039;un répertoire, de préférence hors de l&#039;arborescence Apache qui contiendra notamment les fichiers uploadés par l&#039;intermédiaire du gestionnaire de fichiers. Ce répertoire devra être accessible à  l&#039;utilisateur exécutant l&#039;instance Apache (le répertoire est créé par défault, vérifiez qu&#039;il existe, sinon tapez le code ci desous).&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# mkdir /var/lib/egroupware&amp;lt;/nowiki&amp;gt;&amp;lt;br /&amp;gt; # chown -R apache:apache /var/lib/egroupware&amp;lt;/div&amp;gt;&lt;br /&gt;
Vous devrez également spécifier l&#039;IP ou le nom de votre serveur FTP si vous souhaitez utiliser le module FTP du groupware.&lt;br /&gt;
[[Image:egroupware-egw5.png]]&lt;br /&gt;
Nous voilà  maintenant arrivés à  la configuration de l&#039;authentification et des comptes utilisateurs. Plusieurs options s&#039;offrent à  vous. Si vous ne disposez pas d&#039;annuaire LDAP, choisissez de stocker les comptes dans la base de données. Dans notre cas, ayant recours à  LDAP, nous allons donc compléter les éléments nécessaires. Ils sont classiques pour ceux qui ont l&#039;habitude de manipuler ce service : home directory à  utiliser, shell, contexte des OU (Organizational Units) d&#039;utilisateurs et de groupes, manager de LDAP et mot de passe.&lt;br /&gt;
Il est indispensable également d&#039;autoriser l&#039;utilisation de LDAP v.3, que l&#039;on retrouve par défaut dans la majorité des distributions. Enregistrer la configuration obtenue.&lt;br /&gt;
Nous compléterons cette phase par la création d&#039;un compte administrateur qui sera utilisé ensuite pour l&#039;administration du groupware (gestion des ACL, gestion des utilisateurs et des applications). Il vous est d&#039;ailleurs proposé de créer des comptes de démonstration pour tester le bon fonctionnement de l&#039;application. Vous pouvez en vérifier la création dans l&#039;annuaire :&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# ldapsearch -x &amp;quot;uid=adminegw&amp;quot;&amp;lt;/nowiki&amp;gt;&amp;lt;br /&amp;gt; # adminegw, Users, domain, com&amp;lt;br /&amp;gt; dn: uid=adminegw,ou=Users,dc=domain,dc=com&amp;lt;br /&amp;gt; phpgwAccountType: u&amp;lt;br /&amp;gt; uidNumber: 2008&amp;lt;br /&amp;gt; objectClass: top&amp;lt;br /&amp;gt; objectClass: person&amp;lt;br /&amp;gt; objectClass: organizationalPerson&amp;lt;br /&amp;gt; objectClass: inetOrgPerson&amp;lt;br /&amp;gt; objectClass: posixAccount&amp;lt;br /&amp;gt; objectClass: shadowAccount&amp;lt;br /&amp;gt; objectClass: phpgwAccount&amp;lt;br /&amp;gt; cn: adminegw adminegw&amp;lt;br /&amp;gt; uid: adminegw&amp;lt;br /&amp;gt; sn: adminegw&amp;lt;br /&amp;gt; givenName: adminegw&amp;lt;br /&amp;gt; homeDirectory: /home/adminegw&amp;lt;br /&amp;gt; loginShell: /bin/false&amp;lt;br /&amp;gt; gidNumber: 2&amp;lt;br /&amp;gt; phpgwAccountStatus: A&amp;lt;br /&amp;gt; phpgwAccountExpires: -1&amp;lt;/div&amp;gt;&lt;br /&gt;
L&#039;utilisateur est bien créé et on retrouve la classe phpgwAccount ainsi que les attributs élémentaires : phpgwAccountType (u : user ou g : groupe), phpgwAccountStatus (A : compte actif), phpgwAccountExpires (-1 : jamais).&lt;br /&gt;
La configuration est maintenant terminée. Vous pouvez toutefois à  ce stade gérer les langues (ajouter / supprimer). 22 langues sont aujourd&#039;hui disponibles, par défaut sont sélectionnés l&#039;anglais et le français. Vous pouvez également gérer les applications. Le mode d&#039;installation que nous avons utilisé fournit toutes les applications disponibles, vous pouvez restreindre cette liste.&lt;br /&gt;
L&#039;installation et la configuration de base sont maintenant terminées, nous passons à  la configuration de l&#039;utilisation du groupware.&lt;br /&gt;
&lt;br /&gt;
== Configuration du groupware ==&lt;br /&gt;
Une fois connecté en tant qu&#039;administrateur du groupware, allez sur le paneau d&#039;administration . [[Image:egroupware-egw6.png]]&lt;br /&gt;
Il vous offre les fonctionnalités suivantes :&lt;br /&gt;
* gestion des applications&lt;br /&gt;
* gestion des utilisateurs&lt;br /&gt;
* configuration du site et paramétrage mail&lt;br /&gt;
* gestion des catégories et ACL&lt;br /&gt;
Avant de poursuivre il est indispensable de définir ces 2 dernières notions qui sous-tendent toute la configuration qui va suivre.&lt;br /&gt;
=== ACL et catégories globales ===&lt;br /&gt;
[[Image:egroupware-egw7.png]]&lt;br /&gt;
Les ACL sont un terme générique (Acces Control List) que l&#039;on retrouvera dans de nombreuses applications. Elles vont définir les droits d&#039;accès d&#039;un utilisateur et/ou d&#039;un groupe aux données d&#039;une application. Elles sont au nombre de quatre : lecture, ajout, modification, suppression.&lt;br /&gt;
Dans notre exemple, les membres du groupe commerciaux auront tous les droits sur les données du gestionnaire de fichiers relatives à  leur groupe. Seuls les membres du groupe techniciens auront un accès en lecture.&lt;br /&gt;
[[Image:egroupware-egw8.png]]&amp;lt;br /&amp;gt;&lt;br /&gt;
Les catégories globales permettent d&#039;organiser les données et sont communes à  toutes les applications. Il est possible également de créer des catégories spécifiques à  une application ainsi que des catégories personnelles. Elles sont importantes car elles permettent de rationaliser l&#039;affichage des données et de d&#039;organiser celles-ci plus clairement.&lt;br /&gt;
=== Une administration centralisée des utilisateurs ===&lt;br /&gt;
La gestion des utilisateurs et des groupes peut se faire à  plusieurs niveaux :&lt;br /&gt;
[[Image:egroupware-egw9.png]]&lt;br /&gt;
* le module de gestion de comptes utilisateurs : il permet de créer, modifier, supprimer un utilisateur. Les modifications portent sur les données de base du compte, la configuration mail, les applications attribuées spécifiquement à  un utilisateur.[[Image:egroupware-egw10.png]]&lt;br /&gt;
* le module de gestion de comptes de groupes : il permet de positionner les utilisateurs dans le groupe choisi. Pour pouvoir positionner les ACL, cliquer sur l&#039;application et sauvegarder puis cliquer à  nouveau sur la puce situé à  droite de la dite application.&amp;lt;br /&amp;gt; On conseille souvent d&#039;utiliser un groupe &amp;quot;Default&amp;quot; dans lequel on positionnera tous les utilisateurs. Celui-ci permettra de fixer les applications de base communes à  tous ainsi que des ACL. On affinera ensuite groupe par groupe ces ACL en fonction des besoins.&lt;br /&gt;
* On trouve enfin la gestion des préférences utilisateurs. Ces préférences agissent sur l&#039;ergonomie des applications, leur mode de visualisation, la possibilité ou non de personnaliser la configuration. Ces préférences peuvent être définies par les utilisateurs eux-mêmes mais restreintes par l&#039;administrateur qui positionnera des préférences forcées pour une ou plusieurs applications. Enfin on dispose également de la possibilité de fixer des préférences par défaut.&lt;br /&gt;
== Revue de détail des principales applications ==&lt;br /&gt;
Nous allons ici passer en revue les applications les plus courantes ainsi que leurs fonctionnalités dans le cadre du groupware.&lt;br /&gt;
* Messagerie&amp;lt;br /&amp;gt;[[Image:egroupware-egw11.png]]&amp;lt;br /&amp;gt; eGroupWare propose deux types de webmails qui offrent les fonctionnalités classiques de ce type de client. On trouve entre autres un lien avec le carnet de carnet d&#039;adresses.&lt;br /&gt;
* Carnet d&#039;adresses&amp;lt;br /&amp;gt; Il s&#039;agit la d&#039;une fonctionnalité classique. Il permet des importations et des exportations à  partir de différents formats standards. L&#039;ensemble des contacts est stockable dans une base LDAP.&lt;br /&gt;
* Calendrier&amp;lt;br /&amp;gt;[[Image:egroupware-egw12.png]]&amp;lt;br /&amp;gt; Le calendrier dispose de vues quotidienne, par semaine, mensuelle ou annuelle. On peut ajouter des événements pour soi-même, d&#039;autres utilisateurs ou des groupes. Il est possible alors de générer des alarmes par mail pour prévenir les différents participants. Ce calendrier est également doté d&#039;un système de confirmation pour chaque événement qui permet ainsi au mieux leur planification.&lt;br /&gt;
Egalement à  disposition, un planificateur de tâches, qui permet de visualiser rapidement les plages horaires disponibles pour fixer un rendez-vous pour une ou plusieurs personnes.&lt;br /&gt;
* Infolog &amp;lt;br /&amp;gt; C&#039;est un outil à  mi chemin entre le post-itÂ© et la mini gestion de projet. Il permet de programmer des tâches, en associant ou non d&#039;autres participants, des contacts, des événements du calendrier, des fichiers. Des indicateurs permettent ensuite de visualiser la progression du dit projet.&lt;br /&gt;
L&#039;application propose en tout une quinzaine de modules.&lt;br /&gt;
== Sécurisation et optimisation de l&#039;installation ==&lt;br /&gt;
La sécurisation de la plate-forme supportant eGroupWare relève des conseils habituels liés à  l&#039;administration d&#039;une plate-forme LAMP (Linux-Apache-MySQL-PHP).&lt;br /&gt;
Concernant le serveur MySQL, vérifiez que l&#039;utilisateur root dispose bien d&#039;un mot de passe. En effet, à  l&#039;installation du serveur, l&#039;utilisateur root est initialisé dans la base &amp;quot; mysql&amp;quot; sans aucun mot de passe :&lt;br /&gt;
De plus nous allons restreindre l&#039;accès au serveur MySQL aux seules requêtes lancées en local :&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# cat /etc/my.cnf&amp;lt;/nowiki&amp;gt;&amp;lt;br /&amp;gt; [mysqld]&amp;lt;br /&amp;gt; ...&amp;lt;br /&amp;gt; bind_address = 127.0.0.1&amp;lt;br /&amp;gt; ...&amp;lt;/div&amp;gt;&lt;br /&gt;
Concernant la configuration de PHP, les développeurs apportent quelques conseils pour en optimiser les performances :&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;max_execution_time ? 30&amp;lt;br /&amp;gt; memory_limit ? 16 Mo&amp;lt;br /&amp;gt; register_globals = Off&amp;lt;br /&amp;gt; safe_mode = On&amp;lt;/div&amp;gt;&lt;br /&gt;
Vous devrez également personnaliser le paramètre &amp;quot;upload_max_filesize&amp;quot; en fonction des besoins pour le gestionnaire de fichiers. C&#039;est à  ce niveau que la taille des uploads de fichiers de cette application sera limité et non par un paramètre propre au groupware.&lt;br /&gt;
Enfin eGroupWare peut gagner considérablement en rapidité d&#039;exécution grâce à  Turck MMCache. Il accélère l&#039;interprétation du code PHP et réduit la charge du serveur.&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# urpmi php-mmcache php-mmcache-admin&lt;br /&gt;
 installation de php-mmcache php-mmcache-admin&lt;br /&gt;
    1:php-mmcache            ##################################################&lt;br /&gt;
    2:php-mmcache-admin      ##################################################&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
Attribuer un mot de passe à  l&#039;administrateur de l&#039;interface de gestion du cache :&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# php -q /var/www/html/admin/php-mmcache/mmcache_password.php&amp;lt;/nowiki&amp;gt;&amp;lt;br /&amp;gt; Changing password for Turck MMCache Web Interface (mmcache.php)&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; Enter admin name: admincache&amp;lt;br /&amp;gt; New admin password: R3./po&amp;lt;br /&amp;gt; Retype new admin password: R3./po&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; Add the following lines into your php.ini and restart HTTPD&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; mmcache.admin.name=&amp;quot;admincache&amp;quot;&amp;lt;br /&amp;gt; mmcache.admin.password=&amp;quot;$1$BGhHjZ5A$wNPAxc3BfU12POJoxopBO/&amp;quot;&amp;lt;/div&amp;gt;&lt;br /&gt;
On accède ensuite à  l&#039;interface de gestion du cache : http://localhost/admin/php-mmcache&lt;br /&gt;
== eGroupWare, les projets ==&lt;br /&gt;
Le projet est aujourd&#039;hui disponible dans sa première version stable. Mais le groupe de développement travaille déjà  sur ce que sera la prochaine version stable, la 1.2. Dans cette optique, de nombreux d&#039;objectifs ont étés fixés et mis en avant.&lt;br /&gt;
Il est projeté de mettre à  disposition un moteur de workflow1&lt;br /&gt;
Dans les développements très attendus, on note aussi un certain nombre de connecteurs vers l&#039;extérieur qui permettront d&#039;inclure encore plus le groupware dans son environnement : une synchronisation avec les PDA (ou organiseurs personnels en bon français) disponible très prochainement, un connecteur pour Evolution, et un connecteur pour Outlook.&lt;br /&gt;
Il est prévu également de travailler sur l&#039;ergonomie de l&#039;interface utilisateur et notamment un assistant pour la configuration de celle ci. De nouveaux modèles de documents, ainsi que de nouvelles fonctionnalités comme le glisser-déposer sont également au programme.&lt;br /&gt;
Des applications vont être ré-écrites, soit totalement (carnet d&#039;adresses, gestion des accidents), soit partiellement(webmail, gestionnaire de fichiers, gestion de projets).&lt;br /&gt;
Enfin pour vérifier l&#039;identité de l&#039;utilisateur du groupware, celui-ci devrait inclure également une fonction d&#039;autorité de certification, tout ceci dans un souci de mieux répondre aux exigences de sécurisation du système.&lt;br /&gt;
== Liens ==&lt;br /&gt;
* [http://egroupware.org le site du projet] &lt;br /&gt;
* [http://sourceforge.net/mail/?group_id=78745 les listes de diffusion (utilisateurs, développeurs)] &lt;br /&gt;
* [http://linuxfrench.net/article.php?id_article=1403 Interview de Reiner JUNG, chef de projet ] &lt;br /&gt;
* [http://httpd.apache.org le site d&#039;Apache ] &lt;br /&gt;
* [http://www.mysql.com le site de MySQL ] &lt;br /&gt;
* [http://openldap.org le site de OpenLDAP ] &lt;br /&gt;
* [http://lea-linux.org/reseau/Apache_PHP_MySQL.html HOWTO plate-forme LAMP]&lt;br /&gt;
* [http://www.linux.com/howtos/Postfix-Cyrus-Web-cyradm-HOWTO/index.shtml HOWTO Postfix/Cyrus-IMAP]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;merci&amp;quot;&amp;gt;Cette page est issue de la documentation &#039;pré-wiki&#039; de Léa a été convertie avec HTML::WikiConverter. Elle fut créée par Anne le 05/09/2004.&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Copyright =&lt;br /&gt;
Copyright &amp;amp;copy; 05/09/2004, Anne&lt;br /&gt;
{{CC-BY-NC-SA}}&lt;/div&gt;</summary>
		<author><name>LeaJice</name></author>
	</entry>
	<entry>
		<id>https://lea-linux.org/docs/index.php?title=Installer_des_logiciels_sur_un_support_externe_(SD,_USB),_avec_une_ic%C3%B4ne_dans_le_mode_Easy_de_l%27EeePC_apparaissant_automatiquement&amp;diff=16823</id>
		<title>Installer des logiciels sur un support externe (SD, USB), avec une icône dans le mode Easy de l&#039;EeePC apparaissant automatiquement</title>
		<link rel="alternate" type="text/html" href="https://lea-linux.org/docs/index.php?title=Installer_des_logiciels_sur_un_support_externe_(SD,_USB),_avec_une_ic%C3%B4ne_dans_le_mode_Easy_de_l%27EeePC_apparaissant_automatiquement&amp;diff=16823"/>
		<updated>2009-03-03T13:00:35Z</updated>

		<summary type="html">&lt;p&gt;LeaJice : /* Préparation du support */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Nous allons voir dans cet article comment installer et exécuter des logiciels depuis un support amovible, tel que carte SD ou SDHC, clef USB, disque dur externe...&lt;br /&gt;
&lt;br /&gt;
De plus, grâce à une fonctionnalité cachée du mode Easy de l&#039;EeePC, l&#039;icône de lancement va apparaître lors de l&#039;insertion du support. (Techniquement, les icônes peuvent être définies mais ne pas apparaître si la ligne de commande est invalide, par exemple si le programme n&#039;existe pas. Cependant, si le programme se met à exister en cours de session, l&#039;icône apparaît automatiquement !)&lt;br /&gt;
&lt;br /&gt;
J&#039;ai utilisé cette méthode pour :&lt;br /&gt;
* [[Installer Firefox 3 ou 3.1 sur EeePC]] (remplacer /opt par /opt2 dans l&#039;article)&lt;br /&gt;
* Installer [[Un FPS sur l&#039;EeePC : Assault Cube]]&lt;br /&gt;
* Installer [[GoogleEarth sur l&#039;EeePC]]&lt;br /&gt;
Ce qui m&#039;a permis d&#039;économiser 120 Mo du disque principal :-)&lt;br /&gt;
&lt;br /&gt;
J&#039;ai depuis l&#039;écriture de cette article découvert comment [[Installer des logiciels sur EeePC et économiser de la place sur le disque principal|installer des logiciels intégrés à la distribution ou présents sur des dépôts additionnels]], ce qui fait une bien plus grande variété de logiciels candidats !&lt;br /&gt;
&lt;br /&gt;
== Préparation du support ==&lt;br /&gt;
&lt;br /&gt;
Les clefs USB ou les cartes SD sont formatées lors de leur achat au format FAT32 (format par défaut de Windows jusqu&#039;à récemment). Or pour des raisons de sécurité, les distributions Linux empêchent par défaut d&#039;exécuter des programmes stockés sur un tel support.&lt;br /&gt;
&lt;br /&gt;
Cette page : http://wiki.eeeuser.com/execute_apps_off_sd {{flag-en}} explique comment outrepasser cette protection, ou mieux, partitionner en 2 la clef / carte SD afin de faire une partie FAT32 et une partie spéciale Linux. Si vous le pouvez, c&#039;est la meilleure méthode, car elle ne nécessite pas de  &amp;quot;bidouiller&amp;quot; pour monter/démonter la partition automatiquement (voir ci-dessous), et elle doit être plus performante de quelques pour cents. Elle est décrite dans [[#Plus simple : partitionner une clef USB ou la carte SDHC|deuxième partie de cet article]].&lt;br /&gt;
&lt;br /&gt;
Pour ma part, je ne voulais pas repartitionner ma carte SD (il faudra que je teste ça un jour ceci dit). J&#039;ai donc créé un gros fichier dessus, que je vais utiliser comme une autre partition normale. Comme vous allez le voir, cette méthode ne nécessite pas de repartitionner la clef, mais en contre-partie, il va falloir modifier quelques programmes.&lt;br /&gt;
&lt;br /&gt;
Créez un fichier vide, nommé &#039;&#039;&#039;hdd&#039;&#039;&#039;, de 1 Giga-octets (soit 1048576 = 1024 x 1024, vous pouvez changer ce nombre pour augmenter/diminuer sa taille) sur la carte :&lt;br /&gt;
&amp;lt;code multi&amp;gt;&lt;br /&gt;
$ cd /media/MMC-SD/macartesd&lt;br /&gt;
$ dd if=/dev/zero of=hdd bs=1024 count=1048576&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Ensuite, il faut le formater en format &#039;&#039;&#039;ext2&#039;&#039;&#039; (oui on peut formater un fichier ;-) par la commande :&lt;br /&gt;
&amp;lt;code multi&amp;gt;&lt;br /&gt;
$ sudo mkfs.ext2 hdd&lt;br /&gt;
mke2fs 1.40-WIP (14-Nov-2006)&lt;br /&gt;
hdd n&#039;est pas un périphérique spécial en mode bloc.&lt;br /&gt;
Procéder malgré tout? (y pour oui, n pour non) y&lt;br /&gt;
Étiquette de système de fichiers=&lt;br /&gt;
Type de système d&#039;exploitation : Linux&lt;br /&gt;
Taille de bloc=4096 (log=2)&lt;br /&gt;
Taille de fragment=4096 (log=2)&lt;br /&gt;
131072 i-noeuds, 262144 blocs&lt;br /&gt;
13107 blocs (5.00%) réservés pour le super utilisateur&lt;br /&gt;
Premier bloc de données=0&lt;br /&gt;
Nombre maximum de blocs du système de fichiers=268435456&lt;br /&gt;
8 groupes de blocs&lt;br /&gt;
32768 blocs par groupe, 32768 fragments par groupe&lt;br /&gt;
16384 i-noeuds par groupe&lt;br /&gt;
Superblocs de secours stockés sur les blocs : &lt;br /&gt;
        32768, 98304, 163840, 229376&lt;br /&gt;
&lt;br /&gt;
Écriture des tables d&#039;i-noeuds : complété                        &lt;br /&gt;
Écriture des superblocs et de l&#039;information de comptabilité du système de&lt;br /&gt;
fichiers : complété&lt;br /&gt;
&lt;br /&gt;
Le système de fichiers sera automatiquement vérifié tous les 25 montages ou&lt;br /&gt;
après 180 jours, selon la première éventualité. Utiliser tune2fs -c ou -i&lt;br /&gt;
pour écraser la valeur.&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Enfin, vous pouvez le monter dans un répertoire (j&#039;ai choisi &#039;&#039;&#039;/opt2&#039;&#039;&#039;) et vous en servir :&lt;br /&gt;
&amp;lt;code multi&amp;gt;&lt;br /&gt;
$ sudo mkdir /opt2&lt;br /&gt;
$ sudo mount /media/MMC-SD/macartesd/hdd /opt2 -o loop&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Automatiser le montage du nouvel emplacement pour les logiciels ==&lt;br /&gt;
... et donc l&#039;apparition automatique des icônes définies pour les programmes présents sur ce support.&lt;br /&gt;
&lt;br /&gt;
Nous allons maintenant automatiser le montage et le démontage de notre disque virtuel. Si vous avez installé des applications dessus, disposant d&#039;une icône dans le mode Easy de l&#039;EeePC, celle-ci apparaîtra et disparaîtra lors de l&#039;insertion et du retrait du périphérique (en utilisant l&#039;icône du périphérique dans la bare de tâches, clic droit, retirer en toute sécurité).&lt;br /&gt;
&lt;br /&gt;
Par exemple, j&#039;ai [[Installer Firefox 3 ou 3.1 sur EeePC|installé Firefox 3.1]] dans le disque virtuel, monté dans /opt2, et son icône apparaît automatiquement. Elle disparaît lorsque je retire la carte SD.&lt;br /&gt;
&lt;br /&gt;
=== Automatisation du montage ===&lt;br /&gt;
&lt;br /&gt;
Le montage passe par le programme &amp;lt;code&amp;gt;/usr/bin/xandros_device_detection_dialog&amp;lt;/code&amp;gt;. Nous allons donc le modifier.&lt;br /&gt;
&lt;br /&gt;
Vous devez auparavant suivre le tutoriel [[Empêcher la détection automatique des périphériques USB et de la carte SD au démarrage de l&#039;EeePC]] afin de transformer ce programme en un script modifiable. Si vous ne l&#039;avez pas fait, faites-le maintenant.&lt;br /&gt;
&lt;br /&gt;
Voici les modifications apportées au script :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code multi&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
# monte automatiquement /opt2 si possible&lt;br /&gt;
if [ &amp;quot;`mount | grep /media/MMC-SD/SDHC16GO`&amp;quot; != &amp;quot;&amp;quot; \&lt;br /&gt;
  -a &amp;quot;`mount | grep /opt2`&amp;quot; = &amp;quot;&amp;quot; \&lt;br /&gt;
  -a -f /media/MMC-SD/SDHC16GO/hdd ] ; then&lt;br /&gt;
        sudo mount -o loop /media/MMC-SD/SDHC16GO/hdd /opt2&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# quitter le programme si la machine est démarrée depuis moins de 30 secondes&lt;br /&gt;
# (permet de ne pas afficher la boîte de dialogue pour la carte SD)&lt;br /&gt;
if [ `cat /proc/uptime | cut -f1 -d.` -lt 30 ] ; then exit ; fi&lt;br /&gt;
&lt;br /&gt;
# lancer le programme original en lui passant tous les arguments avec lesquels on a été appelé&lt;br /&gt;
exec xandros_device_detection_dialog.orig &amp;quot;$@&amp;quot;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La partie qui nous concerne est le premier bloc, entre if et fi.&lt;br /&gt;
Le test vérifie si le bon périphérique est monté (dans mon cas, ma carte SD dans /media/MMC-SD/SDHC16GO), puis si le disque virtuel n&#039;est pas monté (dans /opt2) et si le fichier le contenant existe bien (/media/MMC-SD/SDHC16GO/hdd). Dans ce cas, le fichier du disque virtuel est monté dans /opt2.&lt;br /&gt;
Vous devez bien sûr adapter ces valeurs à ce que vous avez choisi.&lt;br /&gt;
&lt;br /&gt;
Note : vous pouvez &amp;quot;choisir&amp;quot; le nom du répertoire dans lequel se monte votre périphérique USB, en lui donnant un ibellé (&#039;&#039;label&#039;&#039; en anglais). Pour ce faire, repérez le périphérique /dev/... avec la commande mount :&lt;br /&gt;
&amp;lt;code multi&amp;gt;&lt;br /&gt;
/home/user&amp;gt; mount&lt;br /&gt;
rootfs on / type rootfs (rw)&lt;br /&gt;
/dev/sda1 on / type ext2 (ro)&lt;br /&gt;
unionfs on / type unionfs (rw,dirs=/=rw:/=ro)&lt;br /&gt;
proc on /proc type proc (rw)&lt;br /&gt;
sysfs on /sys type sysfs (rw)&lt;br /&gt;
devpts on /dev/pts type devpts (rw)&lt;br /&gt;
tmpfs on /dev/shm type tmpfs (rw)&lt;br /&gt;
tmpfs on /tmp type tmpfs (rw)&lt;br /&gt;
usbfs on /proc/bus/usb type usbfs (rw)&lt;br /&gt;
/dev/sdb1 on /media/MMC-SD/SDHC16GO type vfat (rw,nosuid,nodev,noexec,fmask=0111,dmask=0000,codepage=cp850,iocharset=utf8,shortname=mixed)&lt;br /&gt;
/dev/loop0 on /opt2 type ext2 (rw)&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ici, il s&#039;agit de &#039;&#039;&#039;/dev/sdb1&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Ensuite donnez-lui un &#039;&#039;label&#039;&#039; par la commande :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code multi&amp;gt;&lt;br /&gt;
$ sudo e2label /dev/sdb1 mon_nouveau_label&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ou bien&lt;br /&gt;
&amp;lt;code multi&amp;gt;&lt;br /&gt;
$ sudo mkdosfs -n mon_nouveau_label /dev/sdb1&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
et le périphérique se montera dans le répertoire /media/MMC-SD/mon_nouveau_label (et apparaîtra aussi dans votre répertoire utilisateur sous ce nom).&lt;br /&gt;
&lt;br /&gt;
=== Automatisation du démontage ===&lt;br /&gt;
&lt;br /&gt;
Pour le démontage, nous devons modifier le programme &amp;lt;code&amp;gt;/bin/umount&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Comme c&#039;est un programme binaire (non modifiable facilement), aussi nous allons commencer par le renommer :&lt;br /&gt;
&amp;lt;code multi&amp;gt;&lt;br /&gt;
$ sudo mv /bin/umount /bin/umount.bin&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Puis nous allons créer un script dans l&#039;ancien emplacement (c&#039;est donc le script qui sera appelé à la place du programme original). Utilisez par exemple &amp;lt;code&amp;gt;$ sudo nano /bin/umount&amp;lt;/code&amp;gt; et copiez-collez le script ci-dessous.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code multi&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
# Léa 22/1/2009&lt;br /&gt;
# /bin/umount (le programme umount original est renommé umount.bin)&lt;br /&gt;
&lt;br /&gt;
# quand on essaie de démonter la carte SD, démonter le loop d&#039;abord&lt;br /&gt;
if `echo &amp;quot;$@&amp;quot; | grep -q SDHC16GO` ; then&lt;br /&gt;
        # démonte et détache le périphérique loop, pour libérer sdb1&lt;br /&gt;
        LOOP=`mount | grep &amp;quot;on /opt2 type&amp;quot; | cut -f1 -d&amp;quot; &amp;quot;`&lt;br /&gt;
        if [ &amp;quot;$LOOP&amp;quot; != &amp;quot;&amp;quot; ] ; then&lt;br /&gt;
                umount /opt2 &amp;amp;&amp;amp; \&lt;br /&gt;
                losetup --detach $LOOP&lt;br /&gt;
        fi&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# dans tous les cas, exécuter le umount original avec les mêmes arguments&lt;br /&gt;
# (et remplacer ce shell par umount.bin pour que l&#039;appelant&lt;br /&gt;
# récupère le code retour)&lt;br /&gt;
exec umount.bin &amp;quot;$@&amp;quot;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Bien sûr, remplacez dans le script &amp;lt;code&amp;gt;SDHC16GO&amp;lt;/code&amp;gt; et &lt;br /&gt;
&amp;lt;code&amp;gt;/opt2&amp;lt;/code&amp;gt; par les valeurs que vous avez choisies.&lt;br /&gt;
&lt;br /&gt;
Pour les plus curieux, le script contient des commentaires expliquant son fonctionnement.&lt;br /&gt;
&lt;br /&gt;
==Plus simple : partitionner une clef USB ou la carte SDHC==&lt;br /&gt;
&lt;br /&gt;
J&#039;ai fait le test en partitionnant en 2 une clef USB. L&#039;objectif est d&#039;avoir une partie au format &amp;quot;Linux&amp;quot; (en réalité &#039;&#039;&#039;ext2&#039;&#039;&#039;), et une autre au format Windows (en réalité &#039;&#039;&#039;FAT32&#039;&#039;&#039;) qui pourra être utilisée sur tous les ordinateurs, quelque soit leur système d&#039;exploitation.&lt;br /&gt;
&lt;br /&gt;
Attention : cette manipulation va effacer toutes les informations présentes sur votre support.&lt;br /&gt;
&lt;br /&gt;
===Préparation du support===&lt;br /&gt;
&lt;br /&gt;
Nous allons utiliser l&#039;outil &amp;lt;code&amp;gt;fdisk&amp;lt;/code&amp;gt;, qui permet de définir les partitions (en ligne de commande car il n&#039;y a pas de logiciel graphique sur l&#039;EeePC).&lt;br /&gt;
&lt;br /&gt;
Ma clef USB est le périphérique &amp;lt;code&amp;gt;/dev/sdc&amp;lt;/code&amp;gt;. Avant de continuer, assurez-vous en comme expliqué ci-dessus (tapez simplement &amp;lt;code&amp;gt;mount&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Enfin, lancez fdisk :&lt;br /&gt;
&amp;lt;code multi&amp;gt;$ sudo fdisk /dev/sdc&lt;br /&gt;
&lt;br /&gt;
/home/user&amp;gt; sudo fdisk /dev/sdc&lt;br /&gt;
&lt;br /&gt;
The number of cylinders for this disk is set to 3816.&lt;br /&gt;
There is nothing wrong with that, but this is larger than 1024,&lt;br /&gt;
and could in certain setups cause problems with:&lt;br /&gt;
1) software that runs at boot time (e.g., old versions of LILO)&lt;br /&gt;
2) booting and partitioning software from other OSs&lt;br /&gt;
   (e.g., DOS FDISK, OS/2 FDISK)&lt;br /&gt;
&lt;br /&gt;
Command (m for help): p&lt;br /&gt;
&lt;br /&gt;
Disk /dev/sdc: 1000 MB, 1000341504 bytes&lt;br /&gt;
16 heads, 32 sectors/track, 3816 cylinders&lt;br /&gt;
Units = cylinders of 512 * 512 = 262144 bytes&lt;br /&gt;
&lt;br /&gt;
   Device Boot      Start         End      Blocks   Id  System&lt;br /&gt;
/dev/sdc1               1        1954      976880    b  W95 FAT32&lt;br /&gt;
&lt;br /&gt;
Command (m for help): &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La commande &#039;&#039;&#039;p&#039;&#039;&#039; permet d&#039;afficher la table de partitions de la clef.&lt;br /&gt;
&lt;br /&gt;
Nous allons supprimer la partition, en utilisant la commande &#039;&#039;&#039;d&#039;&#039;&#039; :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code multi&amp;gt;Command (m for help): d&lt;br /&gt;
Selected partition 1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Puis créer les 2 partitions avec la commande &#039;&#039;&#039;n&#039;&#039;&#039;. La première fera 512 Mo, la seconde prendra la place restante. La commande &#039;&#039;&#039;t&#039;&#039;&#039; permet de changer le type de partition :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code multi&amp;gt;Command (m for help): n&lt;br /&gt;
Command action&lt;br /&gt;
   e   extended&lt;br /&gt;
   p   primary partition (1-4)&lt;br /&gt;
p&lt;br /&gt;
Partition number (1-4): 1&lt;br /&gt;
First cylinder (1-3816, default 1): 1&lt;br /&gt;
Last cylinder or +size or +sizeM or +sizeK (1-3816, default 3816): +512M&lt;br /&gt;
&lt;br /&gt;
Command (m for help): n&lt;br /&gt;
Command action&lt;br /&gt;
   e   extended&lt;br /&gt;
   p   primary partition (1-4)&lt;br /&gt;
p&lt;br /&gt;
Partition number (1-4): 2&lt;br /&gt;
First cylinder (1955-3816, default 1955): 1955&lt;br /&gt;
Last cylinder or +size or +sizeM or +sizeK (1955-3816, default 3816): 3816&lt;br /&gt;
&lt;br /&gt;
Command (m for help): t&lt;br /&gt;
Partition number (1-4): 2&lt;br /&gt;
Hex code (type L to list codes): b&lt;br /&gt;
Changed system type of partition 2 to b (W95 FAT32)&lt;br /&gt;
&lt;br /&gt;
Command (m for help): p &lt;br /&gt;
&lt;br /&gt;
Disk /dev/sdc: 1000 MB, 1000341504 bytes&lt;br /&gt;
16 heads, 32 sectors/track, 3816 cylinders&lt;br /&gt;
Units = cylinders of 512 * 512 = 262144 bytes&lt;br /&gt;
&lt;br /&gt;
   Device Boot      Start         End      Blocks   Id  System&lt;br /&gt;
/dev/sdc1               1        1954      500208   83  Linux&lt;br /&gt;
/dev/sdc2            1955        3816      476672    b  W95 FAT32&lt;br /&gt;
&lt;br /&gt;
Command (m for help):&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Enfin, utilisez la commande &#039;&#039;&#039;w&#039;&#039;&#039; pour écrire la table des partitions sur la clef :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code multi&amp;gt;Command (m for help): w&lt;br /&gt;
The partition table has been altered!&lt;br /&gt;
&lt;br /&gt;
Calling ioctl() to re-read partition table.&lt;br /&gt;
&lt;br /&gt;
WARNING: Re-reading the partition table failed with error 16: Périphérique ou ressource occupé.&lt;br /&gt;
The kernel still uses the old table.&lt;br /&gt;
The new table will be used at the next reboot.&lt;br /&gt;
&lt;br /&gt;
WARNING: If you have created or modified any DOS 6.x&lt;br /&gt;
partitions, please see the fdisk manual page for additional&lt;br /&gt;
information.&lt;br /&gt;
Syncing disks.&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Reste maintenant à formater les 2 partitions. La première en &#039;&#039;&#039;ext2&#039;&#039;&#039;, la deuxième en FAT32 :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code multi&amp;gt;$ sudo mke2fs /dev/sdc1&lt;br /&gt;
mke2fs 1.40-WIP (14-Nov-2006)&lt;br /&gt;
Étiquette de système de fichiers=&lt;br /&gt;
Type de système d&#039;exploitation : Linux&lt;br /&gt;
Taille de bloc=1024 (log=0)&lt;br /&gt;
Taille de fragment=1024 (log=0)&lt;br /&gt;
125488 i-noeuds, 500208 blocs&lt;br /&gt;
25010 blocs (5.00%) réservés pour le super utilisateur&lt;br /&gt;
Premier bloc de données=1&lt;br /&gt;
Nombre maximum de blocs du système de fichiers=67633152&lt;br /&gt;
62 groupes de blocs&lt;br /&gt;
8192 blocs par groupe, 8192 fragments par groupe&lt;br /&gt;
2024 i-noeuds par groupe&lt;br /&gt;
Superblocs de secours stockés sur les blocs : &lt;br /&gt;
        8193, 24577, 40961, 57345, 73729, 204801, 221185, 401409&lt;br /&gt;
&lt;br /&gt;
Écriture des tables d&#039;i-noeuds : complété                        &lt;br /&gt;
Écriture des superblocs et de l&#039;information de comptabilité du système de&lt;br /&gt;
fichiers : complété&lt;br /&gt;
&lt;br /&gt;
Le système de fichiers sera automatiquement vérifié tous les 20 montages ou&lt;br /&gt;
après 180 jours, selon la première éventualité. Utiliser tune2fs -c ou -i&lt;br /&gt;
pour écraser la valeur.&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
et (formatage + libellé &amp;quot;FAT32&amp;quot; pour la deuxième partition) :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code multi&amp;gt;$ sudo mkdosfs -n FAT32 /dev/sdc2&lt;br /&gt;
mkdosfs 2.11 (12 Mar 2005)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Enfin, donnons le libellé &amp;quot;Linux&amp;quot; la partition ext2, afin qu&#039;elle soit montée dans un endroit facilement reconnaissable :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code multi&amp;gt;$ sudo e2label /dev/sdc1 Linux&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
C&#039;est terminé !&lt;br /&gt;
&lt;br /&gt;
===Configuration de l&#039;EeePC===&lt;br /&gt;
&lt;br /&gt;
Il suffit maintenant de repérer où est montée la partition Linux, en regardant dans le répertoire /media. Chez moi, elle se trouve dans &#039;&#039;&#039;/media/DataTraveler 2.0/Linux&#039;&#039;&#039; (on retrouve le nom que l&#039;on a donné à la partition) :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code multi&amp;gt;$ ls -l /media/DataTraveler\ 2.0/&lt;br /&gt;
total 17&lt;br /&gt;
drwxrwxrwx 2 root root 16384 1969-12-31 21:00 FAT32/&lt;br /&gt;
drwxr-xr-x 3 root root  1024 2009-03-02 21:09 Linux/&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous allons donc créer un lien &#039;&#039;&#039;/opt3&#039;&#039;&#039; vers ce répertoire (car /opt et /opt2 sont déjà utilisés) par :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code multi&amp;gt;$ sudo ln -s &amp;quot;/media/DataTraveler 2.0/Linux&amp;quot; /opt3&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Et c&#039;est tout ! Les modifications de scripts vues dans la première partie de l&#039;article ne sont pas nécessaires (bien que compatibles).&lt;br /&gt;
&lt;br /&gt;
Vous pouvez maintenant installer des logiciels sur le répertoire /opt3, créer des icônes vers ses programmes, qui dans le mode Easy apparaîtront automatiquement sur le bureau lors de l&#039;insertion, et disparaîtrons lors de son extraction (après clic droit sur l&#039;icône de clef USB dans la zone de notification, &amp;quot;Retirer en toute sécurité&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
==Création des icônes==&lt;br /&gt;
&lt;br /&gt;
Utilisez par exemple [[Launcher tools#Simple UI Editor|Simple UI Editor]], et définissez la ligne de commande vers l&#039;exécutable se trouvant sur votre support amovible, par exemple &amp;lt;code&amp;gt;/opt2/firefox3.1/firefox&amp;lt;/code&amp;gt; ou &amp;lt;code&amp;gt;/opt3/xchat/usr/bin/xchat.sh&amp;lt;/code&amp;gt; (Voir [[Installer des logiciels sur EeePC et économiser de la place sur le disque principal#Installation de logiciels, chacun dans son répertoire|cet article]]). C&#039;est tout, cela va créer une icône qui apparaîtra / disparaîtra automatiquement.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr /&amp;gt;&lt;br /&gt;
[[EeePC|Retour à la page EeePC]]&lt;br /&gt;
&amp;lt;hr /&amp;gt;&lt;/div&gt;</summary>
		<author><name>LeaJice</name></author>
	</entry>
	<entry>
		<id>https://lea-linux.org/docs/index.php?title=Installer_des_logiciels_sur_un_support_externe_(SD,_USB),_avec_une_ic%C3%B4ne_dans_le_mode_Easy_de_l%27EeePC_apparaissant_automatiquement&amp;diff=16822</id>
		<title>Installer des logiciels sur un support externe (SD, USB), avec une icône dans le mode Easy de l&#039;EeePC apparaissant automatiquement</title>
		<link rel="alternate" type="text/html" href="https://lea-linux.org/docs/index.php?title=Installer_des_logiciels_sur_un_support_externe_(SD,_USB),_avec_une_ic%C3%B4ne_dans_le_mode_Easy_de_l%27EeePC_apparaissant_automatiquement&amp;diff=16822"/>
		<updated>2009-03-03T01:07:25Z</updated>

		<summary type="html">&lt;p&gt;LeaJice : /* Configuration de l&amp;#039;EeePC */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Nous allons voir dans cet article comment installer et exécuter des logiciels depuis un support amovible, tel que carte SD ou SDHC, clef USB, disque dur externe...&lt;br /&gt;
&lt;br /&gt;
De plus, grâce à une fonctionnalité cachée du mode Easy de l&#039;EeePC, l&#039;icône de lancement va apparaître lors de l&#039;insertion du support. (Techniquement, les icônes peuvent être définies mais ne pas apparaître si la ligne de commande est invalide, par exemple si le programme n&#039;existe pas. Cependant, si le programme se met à exister en cours de session, l&#039;icône apparaît automatiquement !)&lt;br /&gt;
&lt;br /&gt;
J&#039;ai utilisé cette méthode pour :&lt;br /&gt;
* [[Installer Firefox 3 ou 3.1 sur EeePC]] (remplacer /opt par /opt2 dans l&#039;article)&lt;br /&gt;
* Installer [[Un FPS sur l&#039;EeePC : Assault Cube]]&lt;br /&gt;
* Installer [[GoogleEarth sur l&#039;EeePC]]&lt;br /&gt;
Ce qui m&#039;a permis d&#039;économiser 120 Mo du disque principal :-)&lt;br /&gt;
&lt;br /&gt;
J&#039;ai depuis l&#039;écriture de cette article découvert comment [[Installer des logiciels sur EeePC et économiser de la place sur le disque principal|installer des logiciels intégrés à la distribution ou présents sur des dépôts additionnels]], ce qui fait une bien plus grande variété de logiciels candidats !&lt;br /&gt;
&lt;br /&gt;
== Préparation du support ==&lt;br /&gt;
&lt;br /&gt;
Les clefs USB ou les cartes SD sont formatées lors de leur achat au format FAT32 (format par défaut de Windows jusqu&#039;à récemment). Or pour des raisons de sécurité, les distributions Linux empêchent par défaut d&#039;exécuter des programmes stockés sur un tel support.&lt;br /&gt;
&lt;br /&gt;
Cette page : http://wiki.eeeuser.com/execute_apps_off_sd {{flag-en}} explique comment outrepasser cette protection, ou mieux, partitionner en 2 la clef / carte SD afin de faire une partie FAT32 et une partie spéciale Linux. Si vous le pouvez, c&#039;est la meilleure méthode. Elle est décrite dans [[#Plus simple : partitionner une clef USB ou la carte SDHC|deuxième partie de cet article]].&lt;br /&gt;
&lt;br /&gt;
Pour ma part, je ne voulais pas repartitionner ma carte SD (il faudra que je teste ça un jour ceci dit). J&#039;ai donc créé un gros fichier dessus, que je vais utiliser comme une autre partition normale. Comme vous allez le voir, cette méthode ne nécessite pas de repartitionner la clef, mais en contre-partie, il va falloir modifier quelques programmes.&lt;br /&gt;
&lt;br /&gt;
Créez un fichier vide, nommé &#039;&#039;&#039;hdd&#039;&#039;&#039;, de 1 Giga-octets (soit 1048576 = 1024 x 1024, vous pouvez changer ce nombre pour augmenter/diminuer sa taille) sur la carte :&lt;br /&gt;
&amp;lt;code multi&amp;gt;&lt;br /&gt;
$ cd /media/MMC-SD/macartesd&lt;br /&gt;
$ dd if=/dev/zero of=hdd bs=1024 count=1048576&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Ensuite, il faut le formater en format &#039;&#039;&#039;ext2&#039;&#039;&#039; (oui on peut formater un fichier ;-) par la commande :&lt;br /&gt;
&amp;lt;code multi&amp;gt;&lt;br /&gt;
$ sudo mkfs.ext2 hdd&lt;br /&gt;
mke2fs 1.40-WIP (14-Nov-2006)&lt;br /&gt;
hdd n&#039;est pas un périphérique spécial en mode bloc.&lt;br /&gt;
Procéder malgré tout? (y pour oui, n pour non) y&lt;br /&gt;
Étiquette de système de fichiers=&lt;br /&gt;
Type de système d&#039;exploitation : Linux&lt;br /&gt;
Taille de bloc=4096 (log=2)&lt;br /&gt;
Taille de fragment=4096 (log=2)&lt;br /&gt;
131072 i-noeuds, 262144 blocs&lt;br /&gt;
13107 blocs (5.00%) réservés pour le super utilisateur&lt;br /&gt;
Premier bloc de données=0&lt;br /&gt;
Nombre maximum de blocs du système de fichiers=268435456&lt;br /&gt;
8 groupes de blocs&lt;br /&gt;
32768 blocs par groupe, 32768 fragments par groupe&lt;br /&gt;
16384 i-noeuds par groupe&lt;br /&gt;
Superblocs de secours stockés sur les blocs : &lt;br /&gt;
        32768, 98304, 163840, 229376&lt;br /&gt;
&lt;br /&gt;
Écriture des tables d&#039;i-noeuds : complété                        &lt;br /&gt;
Écriture des superblocs et de l&#039;information de comptabilité du système de&lt;br /&gt;
fichiers : complété&lt;br /&gt;
&lt;br /&gt;
Le système de fichiers sera automatiquement vérifié tous les 25 montages ou&lt;br /&gt;
après 180 jours, selon la première éventualité. Utiliser tune2fs -c ou -i&lt;br /&gt;
pour écraser la valeur.&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Enfin, vous pouvez le monter dans un répertoire (j&#039;ai choisi /opt2) et vous en servir :&lt;br /&gt;
&amp;lt;code multi&amp;gt;&lt;br /&gt;
$ sudo mkdir /opt2&lt;br /&gt;
$ sudo mount /media/MMC-SD/macartesd/hdd /opt2 -o loop&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Automatiser le montage du nouvel emplacement pour les logiciels ==&lt;br /&gt;
... et donc l&#039;apparition automatique des icônes définies pour les programmes présents sur ce support.&lt;br /&gt;
&lt;br /&gt;
Nous allons maintenant automatiser le montage et le démontage de notre disque virtuel. Si vous avez installé des applications dessus, disposant d&#039;une icône dans le mode Easy de l&#039;EeePC, celle-ci apparaîtra et disparaîtra lors de l&#039;insertion et du retrait du périphérique (en utilisant l&#039;icône du périphérique dans la bare de tâches, clic droit, retirer en toute sécurité).&lt;br /&gt;
&lt;br /&gt;
Par exemple, j&#039;ai [[Installer Firefox 3 ou 3.1 sur EeePC|installé Firefox 3.1]] dans le disque virtuel, monté dans /opt2, et son icône apparaît automatiquement. Elle disparaît lorsque je retire la carte SD.&lt;br /&gt;
&lt;br /&gt;
=== Automatisation du montage ===&lt;br /&gt;
&lt;br /&gt;
Le montage passe par le programme &amp;lt;code&amp;gt;/usr/bin/xandros_device_detection_dialog&amp;lt;/code&amp;gt;. Nous allons donc le modifier.&lt;br /&gt;
&lt;br /&gt;
Vous devez auparavant suivre le tutoriel [[Empêcher la détection automatique des périphériques USB et de la carte SD au démarrage de l&#039;EeePC]] afin de transformer ce programme en un script modifiable. Si vous ne l&#039;avez pas fait, faites-le maintenant.&lt;br /&gt;
&lt;br /&gt;
Voici les modifications apportées au script :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code multi&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
# monte automatiquement /opt2 si possible&lt;br /&gt;
if [ &amp;quot;`mount | grep /media/MMC-SD/SDHC16GO`&amp;quot; != &amp;quot;&amp;quot; \&lt;br /&gt;
  -a &amp;quot;`mount | grep /opt2`&amp;quot; = &amp;quot;&amp;quot; \&lt;br /&gt;
  -a -f /media/MMC-SD/SDHC16GO/hdd ] ; then&lt;br /&gt;
        sudo mount -o loop /media/MMC-SD/SDHC16GO/hdd /opt2&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# quitter le programme si la machine est démarrée depuis moins de 30 secondes&lt;br /&gt;
# (permet de ne pas afficher la boîte de dialogue pour la carte SD)&lt;br /&gt;
if [ `cat /proc/uptime | cut -f1 -d.` -lt 30 ] ; then exit ; fi&lt;br /&gt;
&lt;br /&gt;
# lancer le programme original en lui passant tous les arguments avec lesquels on a été appelé&lt;br /&gt;
exec xandros_device_detection_dialog.orig &amp;quot;$@&amp;quot;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La partie qui nous concerne est le premier bloc, entre if et fi.&lt;br /&gt;
Le test vérifie si le bon périphérique est monté (dans mon cas, ma carte SD dans /media/MMC-SD/SDHC16GO), puis si le disque virtuel n&#039;est pas monté (dans /opt2) et si le fichier le contenant existe bien (/media/MMC-SD/SDHC16GO/hdd). Dans ce cas, le fichier du disque virtuel est monté dans /opt2.&lt;br /&gt;
Vous devez bien sûr adapter ces valeurs à ce que vous avez choisi.&lt;br /&gt;
&lt;br /&gt;
Note : vous pouvez &amp;quot;choisir&amp;quot; le nom du répertoire dans lequel se monte votre périphérique USB, en lui donnant un ibellé (&#039;&#039;label&#039;&#039; en anglais). Pour ce faire, repérez le périphérique /dev/... avec la commande mount :&lt;br /&gt;
&amp;lt;code multi&amp;gt;&lt;br /&gt;
/home/user&amp;gt; mount&lt;br /&gt;
rootfs on / type rootfs (rw)&lt;br /&gt;
/dev/sda1 on / type ext2 (ro)&lt;br /&gt;
unionfs on / type unionfs (rw,dirs=/=rw:/=ro)&lt;br /&gt;
proc on /proc type proc (rw)&lt;br /&gt;
sysfs on /sys type sysfs (rw)&lt;br /&gt;
devpts on /dev/pts type devpts (rw)&lt;br /&gt;
tmpfs on /dev/shm type tmpfs (rw)&lt;br /&gt;
tmpfs on /tmp type tmpfs (rw)&lt;br /&gt;
usbfs on /proc/bus/usb type usbfs (rw)&lt;br /&gt;
/dev/sdb1 on /media/MMC-SD/SDHC16GO type vfat (rw,nosuid,nodev,noexec,fmask=0111,dmask=0000,codepage=cp850,iocharset=utf8,shortname=mixed)&lt;br /&gt;
/dev/loop0 on /opt2 type ext2 (rw)&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ici, il s&#039;agit de &#039;&#039;&#039;/dev/sdb1&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Ensuite donnez-lui un &#039;&#039;label&#039;&#039; par la commande :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code multi&amp;gt;&lt;br /&gt;
$ sudo e2label /dev/sdb1 mon_nouveau_label&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ou bien&lt;br /&gt;
&amp;lt;code multi&amp;gt;&lt;br /&gt;
$ sudo mkdosfs -n mon_nouveau_label /dev/sdb1&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
et le périphérique se montera dans le répertoire /media/MMC-SD/mon_nouveau_label (et apparaîtra aussi dans votre répertoire utilisateur sous ce nom).&lt;br /&gt;
&lt;br /&gt;
=== Automatisation du démontage ===&lt;br /&gt;
&lt;br /&gt;
Pour le démontage, nous devons modifier le programme &amp;lt;code&amp;gt;/bin/umount&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Comme c&#039;est un programme binaire (non modifiable facilement), aussi nous allons commencer par le renommer :&lt;br /&gt;
&amp;lt;code multi&amp;gt;&lt;br /&gt;
$ sudo mv /bin/umount /bin/umount.bin&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Puis nous allons créer un script dans l&#039;ancien emplacement (c&#039;est donc le script qui sera appelé à la place du programme original). Utilisez par exemple &amp;lt;code&amp;gt;$ sudo nano /bin/umount&amp;lt;/code&amp;gt; et copiez-collez le script ci-dessous.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code multi&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
# Léa 22/1/2009&lt;br /&gt;
# /bin/umount (le programme umount original est renommé umount.bin)&lt;br /&gt;
&lt;br /&gt;
# quand on essaie de démonter la carte SD, démonter le loop d&#039;abord&lt;br /&gt;
if `echo &amp;quot;$@&amp;quot; | grep -q SDHC16GO` ; then&lt;br /&gt;
        # démonte et détache le périphérique loop, pour libérer sdb1&lt;br /&gt;
        LOOP=`mount | grep &amp;quot;on /opt2 type&amp;quot; | cut -f1 -d&amp;quot; &amp;quot;`&lt;br /&gt;
        if [ &amp;quot;$LOOP&amp;quot; != &amp;quot;&amp;quot; ] ; then&lt;br /&gt;
                umount /opt2 &amp;amp;&amp;amp; \&lt;br /&gt;
                losetup --detach $LOOP&lt;br /&gt;
        fi&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# dans tous les cas, exécuter le umount original avec les mêmes arguments&lt;br /&gt;
# (et remplacer ce shell par umount.bin pour que l&#039;appelant&lt;br /&gt;
# récupère le code retour)&lt;br /&gt;
exec umount.bin &amp;quot;$@&amp;quot;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Bien sûr, remplacez dans le script &amp;lt;code&amp;gt;SDHC16GO&amp;lt;/code&amp;gt; et &lt;br /&gt;
&amp;lt;code&amp;gt;/opt2&amp;lt;/code&amp;gt; par les valeurs que vous avez choisies.&lt;br /&gt;
&lt;br /&gt;
Pour les plus curieux, le script contient des commentaires expliquant son fonctionnement.&lt;br /&gt;
&lt;br /&gt;
==Plus simple : partitionner une clef USB ou la carte SDHC==&lt;br /&gt;
&lt;br /&gt;
J&#039;ai fait le test en partitionnant en 2 une clef USB. L&#039;objectif est d&#039;avoir une partie au format &amp;quot;Linux&amp;quot; (en réalité &#039;&#039;&#039;ext2&#039;&#039;&#039;), et une autre au format Windows (en réalité &#039;&#039;&#039;FAT32&#039;&#039;&#039;) qui pourra être utilisée sur tous les ordinateurs, quelque soit leur système d&#039;exploitation.&lt;br /&gt;
&lt;br /&gt;
Attention : cette manipulation va effacer toutes les informations présentes sur votre support.&lt;br /&gt;
&lt;br /&gt;
===Préparation du support===&lt;br /&gt;
&lt;br /&gt;
Nous allons utiliser l&#039;outil &amp;lt;code&amp;gt;fdisk&amp;lt;/code&amp;gt;, qui permet de définir les partitions (en ligne de commande car il n&#039;y a pas de logiciel graphique sur l&#039;EeePC).&lt;br /&gt;
&lt;br /&gt;
Ma clef USB est le périphérique &amp;lt;code&amp;gt;/dev/sdc&amp;lt;/code&amp;gt;. Avant de continuer, assurez-vous en comme expliqué ci-dessus (tapez simplement &amp;lt;code&amp;gt;mount&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Enfin, lancez fdisk :&lt;br /&gt;
&amp;lt;code multi&amp;gt;$ sudo fdisk /dev/sdc&lt;br /&gt;
&lt;br /&gt;
/home/user&amp;gt; sudo fdisk /dev/sdc&lt;br /&gt;
&lt;br /&gt;
The number of cylinders for this disk is set to 3816.&lt;br /&gt;
There is nothing wrong with that, but this is larger than 1024,&lt;br /&gt;
and could in certain setups cause problems with:&lt;br /&gt;
1) software that runs at boot time (e.g., old versions of LILO)&lt;br /&gt;
2) booting and partitioning software from other OSs&lt;br /&gt;
   (e.g., DOS FDISK, OS/2 FDISK)&lt;br /&gt;
&lt;br /&gt;
Command (m for help): p&lt;br /&gt;
&lt;br /&gt;
Disk /dev/sdc: 1000 MB, 1000341504 bytes&lt;br /&gt;
16 heads, 32 sectors/track, 3816 cylinders&lt;br /&gt;
Units = cylinders of 512 * 512 = 262144 bytes&lt;br /&gt;
&lt;br /&gt;
   Device Boot      Start         End      Blocks   Id  System&lt;br /&gt;
/dev/sdc1               1        1954      976880    b  W95 FAT32&lt;br /&gt;
&lt;br /&gt;
Command (m for help): &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La commande &#039;&#039;&#039;p&#039;&#039;&#039; permet d&#039;afficher la table de partitions de la clef.&lt;br /&gt;
&lt;br /&gt;
Nous allons supprimer la partition, en utilisant la commande &#039;&#039;&#039;d&#039;&#039;&#039; :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code multi&amp;gt;Command (m for help): d&lt;br /&gt;
Selected partition 1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Puis créer les 2 partitions avec la commande &#039;&#039;&#039;n&#039;&#039;&#039;. La première fera 512 Mo, la seconde prendra la place restante. La commande &#039;&#039;&#039;t&#039;&#039;&#039; permet de changer le type de partition :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code multi&amp;gt;Command (m for help): n&lt;br /&gt;
Command action&lt;br /&gt;
   e   extended&lt;br /&gt;
   p   primary partition (1-4)&lt;br /&gt;
p&lt;br /&gt;
Partition number (1-4): 1&lt;br /&gt;
First cylinder (1-3816, default 1): 1&lt;br /&gt;
Last cylinder or +size or +sizeM or +sizeK (1-3816, default 3816): +512M&lt;br /&gt;
&lt;br /&gt;
Command (m for help): n&lt;br /&gt;
Command action&lt;br /&gt;
   e   extended&lt;br /&gt;
   p   primary partition (1-4)&lt;br /&gt;
p&lt;br /&gt;
Partition number (1-4): 2&lt;br /&gt;
First cylinder (1955-3816, default 1955): 1955&lt;br /&gt;
Last cylinder or +size or +sizeM or +sizeK (1955-3816, default 3816): 3816&lt;br /&gt;
&lt;br /&gt;
Command (m for help): t&lt;br /&gt;
Partition number (1-4): 2&lt;br /&gt;
Hex code (type L to list codes): b&lt;br /&gt;
Changed system type of partition 2 to b (W95 FAT32)&lt;br /&gt;
&lt;br /&gt;
Command (m for help): p &lt;br /&gt;
&lt;br /&gt;
Disk /dev/sdc: 1000 MB, 1000341504 bytes&lt;br /&gt;
16 heads, 32 sectors/track, 3816 cylinders&lt;br /&gt;
Units = cylinders of 512 * 512 = 262144 bytes&lt;br /&gt;
&lt;br /&gt;
   Device Boot      Start         End      Blocks   Id  System&lt;br /&gt;
/dev/sdc1               1        1954      500208   83  Linux&lt;br /&gt;
/dev/sdc2            1955        3816      476672    b  W95 FAT32&lt;br /&gt;
&lt;br /&gt;
Command (m for help):&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Enfin, utilisez la commande &#039;&#039;&#039;w&#039;&#039;&#039; pour écrire la table des partitions sur la clef :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code multi&amp;gt;Command (m for help): w&lt;br /&gt;
The partition table has been altered!&lt;br /&gt;
&lt;br /&gt;
Calling ioctl() to re-read partition table.&lt;br /&gt;
&lt;br /&gt;
WARNING: Re-reading the partition table failed with error 16: Périphérique ou ressource occupé.&lt;br /&gt;
The kernel still uses the old table.&lt;br /&gt;
The new table will be used at the next reboot.&lt;br /&gt;
&lt;br /&gt;
WARNING: If you have created or modified any DOS 6.x&lt;br /&gt;
partitions, please see the fdisk manual page for additional&lt;br /&gt;
information.&lt;br /&gt;
Syncing disks.&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Reste maintenant à formater les 2 partitions. La première en &#039;&#039;&#039;ext2&#039;&#039;&#039;, la deuxième en FAT32 :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code multi&amp;gt;$ sudo mke2fs /dev/sdc1&lt;br /&gt;
mke2fs 1.40-WIP (14-Nov-2006)&lt;br /&gt;
Étiquette de système de fichiers=&lt;br /&gt;
Type de système d&#039;exploitation : Linux&lt;br /&gt;
Taille de bloc=1024 (log=0)&lt;br /&gt;
Taille de fragment=1024 (log=0)&lt;br /&gt;
125488 i-noeuds, 500208 blocs&lt;br /&gt;
25010 blocs (5.00%) réservés pour le super utilisateur&lt;br /&gt;
Premier bloc de données=1&lt;br /&gt;
Nombre maximum de blocs du système de fichiers=67633152&lt;br /&gt;
62 groupes de blocs&lt;br /&gt;
8192 blocs par groupe, 8192 fragments par groupe&lt;br /&gt;
2024 i-noeuds par groupe&lt;br /&gt;
Superblocs de secours stockés sur les blocs : &lt;br /&gt;
        8193, 24577, 40961, 57345, 73729, 204801, 221185, 401409&lt;br /&gt;
&lt;br /&gt;
Écriture des tables d&#039;i-noeuds : complété                        &lt;br /&gt;
Écriture des superblocs et de l&#039;information de comptabilité du système de&lt;br /&gt;
fichiers : complété&lt;br /&gt;
&lt;br /&gt;
Le système de fichiers sera automatiquement vérifié tous les 20 montages ou&lt;br /&gt;
après 180 jours, selon la première éventualité. Utiliser tune2fs -c ou -i&lt;br /&gt;
pour écraser la valeur.&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
et (formatage + libellé &amp;quot;FAT32&amp;quot; pour la deuxième partition) :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code multi&amp;gt;$ sudo mkdosfs -n FAT32 /dev/sdc2&lt;br /&gt;
mkdosfs 2.11 (12 Mar 2005)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Enfin, donnons le libellé &amp;quot;Linux&amp;quot; la partition ext2, afin qu&#039;elle soit montée dans un endroit facilement reconnaissable :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code multi&amp;gt;$ sudo e2label /dev/sdc1 Linux&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
C&#039;est terminé !&lt;br /&gt;
&lt;br /&gt;
===Configuration de l&#039;EeePC===&lt;br /&gt;
&lt;br /&gt;
Il suffit maintenant de repérer où est montée la partition Linux, en regardant dans le répertoire /media. Chez moi, elle se trouve dans &#039;&#039;&#039;/media/DataTraveler 2.0/Linux&#039;&#039;&#039; (on retrouve le nom que l&#039;on a donné à la partition) :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code multi&amp;gt;$ ls -l /media/DataTraveler\ 2.0/&lt;br /&gt;
total 17&lt;br /&gt;
drwxrwxrwx 2 root root 16384 1969-12-31 21:00 FAT32/&lt;br /&gt;
drwxr-xr-x 3 root root  1024 2009-03-02 21:09 Linux/&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous allons donc créer un lien &#039;&#039;&#039;/opt3&#039;&#039;&#039; vers ce répertoire (car /opt et /opt2 sont déjà utilisés) par :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code multi&amp;gt;$ sudo ln -s &amp;quot;/media/DataTraveler 2.0/Linux&amp;quot; /opt3&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Et c&#039;est tout ! Les modifications de scripts vues dans la première partie de l&#039;article ne sont pas nécessaires (bien que compatibles).&lt;br /&gt;
&lt;br /&gt;
Vous pouvez maintenant installer des logiciels sur le répertoire /opt3, créer des icônes vers ses programmes, qui dans le mode Easy apparaîtront automatiquement sur le bureau lors de l&#039;insertion, et disparaîtrons lors de son extraction (après clic droit sur l&#039;icône de clef USB dans la zone de notification, &amp;quot;Retirer en toute sécurité&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
==Création des icônes==&lt;br /&gt;
&lt;br /&gt;
Utilisez par exemple [[Launcher tools#Simple UI Editor|Simple UI Editor]], et définissez la ligne de commande vers l&#039;exécutable se trouvant sur votre support amovible, par exemple &amp;lt;code&amp;gt;/opt2/firefox3.1/firefox&amp;lt;/code&amp;gt; ou &amp;lt;code&amp;gt;/opt3/xchat/usr/bin/xchat.sh&amp;lt;/code&amp;gt; (Voir [[Installer des logiciels sur EeePC et économiser de la place sur le disque principal#Installation de logiciels, chacun dans son répertoire|cet article]]). C&#039;est tout, cela va créer une icône qui apparaîtra / disparaîtra automatiquement.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr /&amp;gt;&lt;br /&gt;
[[EeePC|Retour à la page EeePC]]&lt;br /&gt;
&amp;lt;hr /&amp;gt;&lt;/div&gt;</summary>
		<author><name>LeaJice</name></author>
	</entry>
	<entry>
		<id>https://lea-linux.org/docs/index.php?title=Installer_des_logiciels_sur_un_support_externe_(SD,_USB),_avec_une_ic%C3%B4ne_dans_le_mode_Easy_de_l%27EeePC_apparaissant_automatiquement&amp;diff=16821</id>
		<title>Installer des logiciels sur un support externe (SD, USB), avec une icône dans le mode Easy de l&#039;EeePC apparaissant automatiquement</title>
		<link rel="alternate" type="text/html" href="https://lea-linux.org/docs/index.php?title=Installer_des_logiciels_sur_un_support_externe_(SD,_USB),_avec_une_ic%C3%B4ne_dans_le_mode_Easy_de_l%27EeePC_apparaissant_automatiquement&amp;diff=16821"/>
		<updated>2009-03-03T01:06:44Z</updated>

		<summary type="html">&lt;p&gt;LeaJice : /* Configuration de l&amp;#039;EeePC */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Nous allons voir dans cet article comment installer et exécuter des logiciels depuis un support amovible, tel que carte SD ou SDHC, clef USB, disque dur externe...&lt;br /&gt;
&lt;br /&gt;
De plus, grâce à une fonctionnalité cachée du mode Easy de l&#039;EeePC, l&#039;icône de lancement va apparaître lors de l&#039;insertion du support. (Techniquement, les icônes peuvent être définies mais ne pas apparaître si la ligne de commande est invalide, par exemple si le programme n&#039;existe pas. Cependant, si le programme se met à exister en cours de session, l&#039;icône apparaît automatiquement !)&lt;br /&gt;
&lt;br /&gt;
J&#039;ai utilisé cette méthode pour :&lt;br /&gt;
* [[Installer Firefox 3 ou 3.1 sur EeePC]] (remplacer /opt par /opt2 dans l&#039;article)&lt;br /&gt;
* Installer [[Un FPS sur l&#039;EeePC : Assault Cube]]&lt;br /&gt;
* Installer [[GoogleEarth sur l&#039;EeePC]]&lt;br /&gt;
Ce qui m&#039;a permis d&#039;économiser 120 Mo du disque principal :-)&lt;br /&gt;
&lt;br /&gt;
J&#039;ai depuis l&#039;écriture de cette article découvert comment [[Installer des logiciels sur EeePC et économiser de la place sur le disque principal|installer des logiciels intégrés à la distribution ou présents sur des dépôts additionnels]], ce qui fait une bien plus grande variété de logiciels candidats !&lt;br /&gt;
&lt;br /&gt;
== Préparation du support ==&lt;br /&gt;
&lt;br /&gt;
Les clefs USB ou les cartes SD sont formatées lors de leur achat au format FAT32 (format par défaut de Windows jusqu&#039;à récemment). Or pour des raisons de sécurité, les distributions Linux empêchent par défaut d&#039;exécuter des programmes stockés sur un tel support.&lt;br /&gt;
&lt;br /&gt;
Cette page : http://wiki.eeeuser.com/execute_apps_off_sd {{flag-en}} explique comment outrepasser cette protection, ou mieux, partitionner en 2 la clef / carte SD afin de faire une partie FAT32 et une partie spéciale Linux. Si vous le pouvez, c&#039;est la meilleure méthode. Elle est décrite dans [[#Plus simple : partitionner une clef USB ou la carte SDHC|deuxième partie de cet article]].&lt;br /&gt;
&lt;br /&gt;
Pour ma part, je ne voulais pas repartitionner ma carte SD (il faudra que je teste ça un jour ceci dit). J&#039;ai donc créé un gros fichier dessus, que je vais utiliser comme une autre partition normale. Comme vous allez le voir, cette méthode ne nécessite pas de repartitionner la clef, mais en contre-partie, il va falloir modifier quelques programmes.&lt;br /&gt;
&lt;br /&gt;
Créez un fichier vide, nommé &#039;&#039;&#039;hdd&#039;&#039;&#039;, de 1 Giga-octets (soit 1048576 = 1024 x 1024, vous pouvez changer ce nombre pour augmenter/diminuer sa taille) sur la carte :&lt;br /&gt;
&amp;lt;code multi&amp;gt;&lt;br /&gt;
$ cd /media/MMC-SD/macartesd&lt;br /&gt;
$ dd if=/dev/zero of=hdd bs=1024 count=1048576&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Ensuite, il faut le formater en format &#039;&#039;&#039;ext2&#039;&#039;&#039; (oui on peut formater un fichier ;-) par la commande :&lt;br /&gt;
&amp;lt;code multi&amp;gt;&lt;br /&gt;
$ sudo mkfs.ext2 hdd&lt;br /&gt;
mke2fs 1.40-WIP (14-Nov-2006)&lt;br /&gt;
hdd n&#039;est pas un périphérique spécial en mode bloc.&lt;br /&gt;
Procéder malgré tout? (y pour oui, n pour non) y&lt;br /&gt;
Étiquette de système de fichiers=&lt;br /&gt;
Type de système d&#039;exploitation : Linux&lt;br /&gt;
Taille de bloc=4096 (log=2)&lt;br /&gt;
Taille de fragment=4096 (log=2)&lt;br /&gt;
131072 i-noeuds, 262144 blocs&lt;br /&gt;
13107 blocs (5.00%) réservés pour le super utilisateur&lt;br /&gt;
Premier bloc de données=0&lt;br /&gt;
Nombre maximum de blocs du système de fichiers=268435456&lt;br /&gt;
8 groupes de blocs&lt;br /&gt;
32768 blocs par groupe, 32768 fragments par groupe&lt;br /&gt;
16384 i-noeuds par groupe&lt;br /&gt;
Superblocs de secours stockés sur les blocs : &lt;br /&gt;
        32768, 98304, 163840, 229376&lt;br /&gt;
&lt;br /&gt;
Écriture des tables d&#039;i-noeuds : complété                        &lt;br /&gt;
Écriture des superblocs et de l&#039;information de comptabilité du système de&lt;br /&gt;
fichiers : complété&lt;br /&gt;
&lt;br /&gt;
Le système de fichiers sera automatiquement vérifié tous les 25 montages ou&lt;br /&gt;
après 180 jours, selon la première éventualité. Utiliser tune2fs -c ou -i&lt;br /&gt;
pour écraser la valeur.&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Enfin, vous pouvez le monter dans un répertoire (j&#039;ai choisi /opt2) et vous en servir :&lt;br /&gt;
&amp;lt;code multi&amp;gt;&lt;br /&gt;
$ sudo mkdir /opt2&lt;br /&gt;
$ sudo mount /media/MMC-SD/macartesd/hdd /opt2 -o loop&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Automatiser le montage du nouvel emplacement pour les logiciels ==&lt;br /&gt;
... et donc l&#039;apparition automatique des icônes définies pour les programmes présents sur ce support.&lt;br /&gt;
&lt;br /&gt;
Nous allons maintenant automatiser le montage et le démontage de notre disque virtuel. Si vous avez installé des applications dessus, disposant d&#039;une icône dans le mode Easy de l&#039;EeePC, celle-ci apparaîtra et disparaîtra lors de l&#039;insertion et du retrait du périphérique (en utilisant l&#039;icône du périphérique dans la bare de tâches, clic droit, retirer en toute sécurité).&lt;br /&gt;
&lt;br /&gt;
Par exemple, j&#039;ai [[Installer Firefox 3 ou 3.1 sur EeePC|installé Firefox 3.1]] dans le disque virtuel, monté dans /opt2, et son icône apparaît automatiquement. Elle disparaît lorsque je retire la carte SD.&lt;br /&gt;
&lt;br /&gt;
=== Automatisation du montage ===&lt;br /&gt;
&lt;br /&gt;
Le montage passe par le programme &amp;lt;code&amp;gt;/usr/bin/xandros_device_detection_dialog&amp;lt;/code&amp;gt;. Nous allons donc le modifier.&lt;br /&gt;
&lt;br /&gt;
Vous devez auparavant suivre le tutoriel [[Empêcher la détection automatique des périphériques USB et de la carte SD au démarrage de l&#039;EeePC]] afin de transformer ce programme en un script modifiable. Si vous ne l&#039;avez pas fait, faites-le maintenant.&lt;br /&gt;
&lt;br /&gt;
Voici les modifications apportées au script :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code multi&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
# monte automatiquement /opt2 si possible&lt;br /&gt;
if [ &amp;quot;`mount | grep /media/MMC-SD/SDHC16GO`&amp;quot; != &amp;quot;&amp;quot; \&lt;br /&gt;
  -a &amp;quot;`mount | grep /opt2`&amp;quot; = &amp;quot;&amp;quot; \&lt;br /&gt;
  -a -f /media/MMC-SD/SDHC16GO/hdd ] ; then&lt;br /&gt;
        sudo mount -o loop /media/MMC-SD/SDHC16GO/hdd /opt2&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# quitter le programme si la machine est démarrée depuis moins de 30 secondes&lt;br /&gt;
# (permet de ne pas afficher la boîte de dialogue pour la carte SD)&lt;br /&gt;
if [ `cat /proc/uptime | cut -f1 -d.` -lt 30 ] ; then exit ; fi&lt;br /&gt;
&lt;br /&gt;
# lancer le programme original en lui passant tous les arguments avec lesquels on a été appelé&lt;br /&gt;
exec xandros_device_detection_dialog.orig &amp;quot;$@&amp;quot;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La partie qui nous concerne est le premier bloc, entre if et fi.&lt;br /&gt;
Le test vérifie si le bon périphérique est monté (dans mon cas, ma carte SD dans /media/MMC-SD/SDHC16GO), puis si le disque virtuel n&#039;est pas monté (dans /opt2) et si le fichier le contenant existe bien (/media/MMC-SD/SDHC16GO/hdd). Dans ce cas, le fichier du disque virtuel est monté dans /opt2.&lt;br /&gt;
Vous devez bien sûr adapter ces valeurs à ce que vous avez choisi.&lt;br /&gt;
&lt;br /&gt;
Note : vous pouvez &amp;quot;choisir&amp;quot; le nom du répertoire dans lequel se monte votre périphérique USB, en lui donnant un ibellé (&#039;&#039;label&#039;&#039; en anglais). Pour ce faire, repérez le périphérique /dev/... avec la commande mount :&lt;br /&gt;
&amp;lt;code multi&amp;gt;&lt;br /&gt;
/home/user&amp;gt; mount&lt;br /&gt;
rootfs on / type rootfs (rw)&lt;br /&gt;
/dev/sda1 on / type ext2 (ro)&lt;br /&gt;
unionfs on / type unionfs (rw,dirs=/=rw:/=ro)&lt;br /&gt;
proc on /proc type proc (rw)&lt;br /&gt;
sysfs on /sys type sysfs (rw)&lt;br /&gt;
devpts on /dev/pts type devpts (rw)&lt;br /&gt;
tmpfs on /dev/shm type tmpfs (rw)&lt;br /&gt;
tmpfs on /tmp type tmpfs (rw)&lt;br /&gt;
usbfs on /proc/bus/usb type usbfs (rw)&lt;br /&gt;
/dev/sdb1 on /media/MMC-SD/SDHC16GO type vfat (rw,nosuid,nodev,noexec,fmask=0111,dmask=0000,codepage=cp850,iocharset=utf8,shortname=mixed)&lt;br /&gt;
/dev/loop0 on /opt2 type ext2 (rw)&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ici, il s&#039;agit de &#039;&#039;&#039;/dev/sdb1&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Ensuite donnez-lui un &#039;&#039;label&#039;&#039; par la commande :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code multi&amp;gt;&lt;br /&gt;
$ sudo e2label /dev/sdb1 mon_nouveau_label&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ou bien&lt;br /&gt;
&amp;lt;code multi&amp;gt;&lt;br /&gt;
$ sudo mkdosfs -n mon_nouveau_label /dev/sdb1&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
et le périphérique se montera dans le répertoire /media/MMC-SD/mon_nouveau_label (et apparaîtra aussi dans votre répertoire utilisateur sous ce nom).&lt;br /&gt;
&lt;br /&gt;
=== Automatisation du démontage ===&lt;br /&gt;
&lt;br /&gt;
Pour le démontage, nous devons modifier le programme &amp;lt;code&amp;gt;/bin/umount&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Comme c&#039;est un programme binaire (non modifiable facilement), aussi nous allons commencer par le renommer :&lt;br /&gt;
&amp;lt;code multi&amp;gt;&lt;br /&gt;
$ sudo mv /bin/umount /bin/umount.bin&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Puis nous allons créer un script dans l&#039;ancien emplacement (c&#039;est donc le script qui sera appelé à la place du programme original). Utilisez par exemple &amp;lt;code&amp;gt;$ sudo nano /bin/umount&amp;lt;/code&amp;gt; et copiez-collez le script ci-dessous.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code multi&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
# Léa 22/1/2009&lt;br /&gt;
# /bin/umount (le programme umount original est renommé umount.bin)&lt;br /&gt;
&lt;br /&gt;
# quand on essaie de démonter la carte SD, démonter le loop d&#039;abord&lt;br /&gt;
if `echo &amp;quot;$@&amp;quot; | grep -q SDHC16GO` ; then&lt;br /&gt;
        # démonte et détache le périphérique loop, pour libérer sdb1&lt;br /&gt;
        LOOP=`mount | grep &amp;quot;on /opt2 type&amp;quot; | cut -f1 -d&amp;quot; &amp;quot;`&lt;br /&gt;
        if [ &amp;quot;$LOOP&amp;quot; != &amp;quot;&amp;quot; ] ; then&lt;br /&gt;
                umount /opt2 &amp;amp;&amp;amp; \&lt;br /&gt;
                losetup --detach $LOOP&lt;br /&gt;
        fi&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# dans tous les cas, exécuter le umount original avec les mêmes arguments&lt;br /&gt;
# (et remplacer ce shell par umount.bin pour que l&#039;appelant&lt;br /&gt;
# récupère le code retour)&lt;br /&gt;
exec umount.bin &amp;quot;$@&amp;quot;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Bien sûr, remplacez dans le script &amp;lt;code&amp;gt;SDHC16GO&amp;lt;/code&amp;gt; et &lt;br /&gt;
&amp;lt;code&amp;gt;/opt2&amp;lt;/code&amp;gt; par les valeurs que vous avez choisies.&lt;br /&gt;
&lt;br /&gt;
Pour les plus curieux, le script contient des commentaires expliquant son fonctionnement.&lt;br /&gt;
&lt;br /&gt;
==Plus simple : partitionner une clef USB ou la carte SDHC==&lt;br /&gt;
&lt;br /&gt;
J&#039;ai fait le test en partitionnant en 2 une clef USB. L&#039;objectif est d&#039;avoir une partie au format &amp;quot;Linux&amp;quot; (en réalité &#039;&#039;&#039;ext2&#039;&#039;&#039;), et une autre au format Windows (en réalité &#039;&#039;&#039;FAT32&#039;&#039;&#039;) qui pourra être utilisée sur tous les ordinateurs, quelque soit leur système d&#039;exploitation.&lt;br /&gt;
&lt;br /&gt;
Attention : cette manipulation va effacer toutes les informations présentes sur votre support.&lt;br /&gt;
&lt;br /&gt;
===Préparation du support===&lt;br /&gt;
&lt;br /&gt;
Nous allons utiliser l&#039;outil &amp;lt;code&amp;gt;fdisk&amp;lt;/code&amp;gt;, qui permet de définir les partitions (en ligne de commande car il n&#039;y a pas de logiciel graphique sur l&#039;EeePC).&lt;br /&gt;
&lt;br /&gt;
Ma clef USB est le périphérique &amp;lt;code&amp;gt;/dev/sdc&amp;lt;/code&amp;gt;. Avant de continuer, assurez-vous en comme expliqué ci-dessus (tapez simplement &amp;lt;code&amp;gt;mount&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Enfin, lancez fdisk :&lt;br /&gt;
&amp;lt;code multi&amp;gt;$ sudo fdisk /dev/sdc&lt;br /&gt;
&lt;br /&gt;
/home/user&amp;gt; sudo fdisk /dev/sdc&lt;br /&gt;
&lt;br /&gt;
The number of cylinders for this disk is set to 3816.&lt;br /&gt;
There is nothing wrong with that, but this is larger than 1024,&lt;br /&gt;
and could in certain setups cause problems with:&lt;br /&gt;
1) software that runs at boot time (e.g., old versions of LILO)&lt;br /&gt;
2) booting and partitioning software from other OSs&lt;br /&gt;
   (e.g., DOS FDISK, OS/2 FDISK)&lt;br /&gt;
&lt;br /&gt;
Command (m for help): p&lt;br /&gt;
&lt;br /&gt;
Disk /dev/sdc: 1000 MB, 1000341504 bytes&lt;br /&gt;
16 heads, 32 sectors/track, 3816 cylinders&lt;br /&gt;
Units = cylinders of 512 * 512 = 262144 bytes&lt;br /&gt;
&lt;br /&gt;
   Device Boot      Start         End      Blocks   Id  System&lt;br /&gt;
/dev/sdc1               1        1954      976880    b  W95 FAT32&lt;br /&gt;
&lt;br /&gt;
Command (m for help): &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La commande &#039;&#039;&#039;p&#039;&#039;&#039; permet d&#039;afficher la table de partitions de la clef.&lt;br /&gt;
&lt;br /&gt;
Nous allons supprimer la partition, en utilisant la commande &#039;&#039;&#039;d&#039;&#039;&#039; :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code multi&amp;gt;Command (m for help): d&lt;br /&gt;
Selected partition 1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Puis créer les 2 partitions avec la commande &#039;&#039;&#039;n&#039;&#039;&#039;. La première fera 512 Mo, la seconde prendra la place restante. La commande &#039;&#039;&#039;t&#039;&#039;&#039; permet de changer le type de partition :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code multi&amp;gt;Command (m for help): n&lt;br /&gt;
Command action&lt;br /&gt;
   e   extended&lt;br /&gt;
   p   primary partition (1-4)&lt;br /&gt;
p&lt;br /&gt;
Partition number (1-4): 1&lt;br /&gt;
First cylinder (1-3816, default 1): 1&lt;br /&gt;
Last cylinder or +size or +sizeM or +sizeK (1-3816, default 3816): +512M&lt;br /&gt;
&lt;br /&gt;
Command (m for help): n&lt;br /&gt;
Command action&lt;br /&gt;
   e   extended&lt;br /&gt;
   p   primary partition (1-4)&lt;br /&gt;
p&lt;br /&gt;
Partition number (1-4): 2&lt;br /&gt;
First cylinder (1955-3816, default 1955): 1955&lt;br /&gt;
Last cylinder or +size or +sizeM or +sizeK (1955-3816, default 3816): 3816&lt;br /&gt;
&lt;br /&gt;
Command (m for help): t&lt;br /&gt;
Partition number (1-4): 2&lt;br /&gt;
Hex code (type L to list codes): b&lt;br /&gt;
Changed system type of partition 2 to b (W95 FAT32)&lt;br /&gt;
&lt;br /&gt;
Command (m for help): p &lt;br /&gt;
&lt;br /&gt;
Disk /dev/sdc: 1000 MB, 1000341504 bytes&lt;br /&gt;
16 heads, 32 sectors/track, 3816 cylinders&lt;br /&gt;
Units = cylinders of 512 * 512 = 262144 bytes&lt;br /&gt;
&lt;br /&gt;
   Device Boot      Start         End      Blocks   Id  System&lt;br /&gt;
/dev/sdc1               1        1954      500208   83  Linux&lt;br /&gt;
/dev/sdc2            1955        3816      476672    b  W95 FAT32&lt;br /&gt;
&lt;br /&gt;
Command (m for help):&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Enfin, utilisez la commande &#039;&#039;&#039;w&#039;&#039;&#039; pour écrire la table des partitions sur la clef :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code multi&amp;gt;Command (m for help): w&lt;br /&gt;
The partition table has been altered!&lt;br /&gt;
&lt;br /&gt;
Calling ioctl() to re-read partition table.&lt;br /&gt;
&lt;br /&gt;
WARNING: Re-reading the partition table failed with error 16: Périphérique ou ressource occupé.&lt;br /&gt;
The kernel still uses the old table.&lt;br /&gt;
The new table will be used at the next reboot.&lt;br /&gt;
&lt;br /&gt;
WARNING: If you have created or modified any DOS 6.x&lt;br /&gt;
partitions, please see the fdisk manual page for additional&lt;br /&gt;
information.&lt;br /&gt;
Syncing disks.&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Reste maintenant à formater les 2 partitions. La première en &#039;&#039;&#039;ext2&#039;&#039;&#039;, la deuxième en FAT32 :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code multi&amp;gt;$ sudo mke2fs /dev/sdc1&lt;br /&gt;
mke2fs 1.40-WIP (14-Nov-2006)&lt;br /&gt;
Étiquette de système de fichiers=&lt;br /&gt;
Type de système d&#039;exploitation : Linux&lt;br /&gt;
Taille de bloc=1024 (log=0)&lt;br /&gt;
Taille de fragment=1024 (log=0)&lt;br /&gt;
125488 i-noeuds, 500208 blocs&lt;br /&gt;
25010 blocs (5.00%) réservés pour le super utilisateur&lt;br /&gt;
Premier bloc de données=1&lt;br /&gt;
Nombre maximum de blocs du système de fichiers=67633152&lt;br /&gt;
62 groupes de blocs&lt;br /&gt;
8192 blocs par groupe, 8192 fragments par groupe&lt;br /&gt;
2024 i-noeuds par groupe&lt;br /&gt;
Superblocs de secours stockés sur les blocs : &lt;br /&gt;
        8193, 24577, 40961, 57345, 73729, 204801, 221185, 401409&lt;br /&gt;
&lt;br /&gt;
Écriture des tables d&#039;i-noeuds : complété                        &lt;br /&gt;
Écriture des superblocs et de l&#039;information de comptabilité du système de&lt;br /&gt;
fichiers : complété&lt;br /&gt;
&lt;br /&gt;
Le système de fichiers sera automatiquement vérifié tous les 20 montages ou&lt;br /&gt;
après 180 jours, selon la première éventualité. Utiliser tune2fs -c ou -i&lt;br /&gt;
pour écraser la valeur.&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
et (formatage + libellé &amp;quot;FAT32&amp;quot; pour la deuxième partition) :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code multi&amp;gt;$ sudo mkdosfs -n FAT32 /dev/sdc2&lt;br /&gt;
mkdosfs 2.11 (12 Mar 2005)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Enfin, donnons le libellé &amp;quot;Linux&amp;quot; la partition ext2, afin qu&#039;elle soit montée dans un endroit facilement reconnaissable :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code multi&amp;gt;$ sudo e2label /dev/sdc1 Linux&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
C&#039;est terminé !&lt;br /&gt;
&lt;br /&gt;
===Configuration de l&#039;EeePC===&lt;br /&gt;
&lt;br /&gt;
Il suffit maintenant de repérer où est montée la partition Linux, en regardant dans le répertoire /media. Chez moi, elle se trouve dans &#039;&#039;&#039;/media/DataTraveler 2.0/Linux&#039;&#039;&#039; (on retrouve le nom que l&#039;on a donné à la partition) :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code multi&amp;gt;/home/user&amp;gt; ls -l /media/DataTraveler\ 2.0/&lt;br /&gt;
total 17&lt;br /&gt;
drwxrwxrwx 2 root root 16384 1969-12-31 21:00 FAT32/&lt;br /&gt;
drwxr-xr-x 3 root root  1024 2009-03-02 21:09 Linux/&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous allons donc créer un lien &#039;&#039;&#039;/opt3&#039;&#039;&#039; vers ce répertoire (car /opt et /opt2 sont déjà utilisés) par :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code multi&amp;gt;$ sudo ln -s &amp;quot;/media/DataTraveler 2.0/Linux&amp;quot; /opt3&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Et c&#039;est tout ! Les modifications de scripts vues dans la première partie de l&#039;article ne sont pas nécessaires (bien que compatibles).&lt;br /&gt;
&lt;br /&gt;
Vous pouvez maintenant installer des logiciels sur le répertoire /opt3, créer des icônes vers ses programmes, qui dans le mode Easy apparaîtront automatiquement sur le bureau lors de l&#039;insertion, et disparaîtrons lors de son extraction (après clic droit sur l&#039;icône de clef USB dans la zone de notification, &amp;quot;Retirer en toute sécurité&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
==Création des icônes==&lt;br /&gt;
&lt;br /&gt;
Utilisez par exemple [[Launcher tools#Simple UI Editor|Simple UI Editor]], et définissez la ligne de commande vers l&#039;exécutable se trouvant sur votre support amovible, par exemple &amp;lt;code&amp;gt;/opt2/firefox3.1/firefox&amp;lt;/code&amp;gt; ou &amp;lt;code&amp;gt;/opt3/xchat/usr/bin/xchat.sh&amp;lt;/code&amp;gt; (Voir [[Installer des logiciels sur EeePC et économiser de la place sur le disque principal#Installation de logiciels, chacun dans son répertoire|cet article]]). C&#039;est tout, cela va créer une icône qui apparaîtra / disparaîtra automatiquement.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr /&amp;gt;&lt;br /&gt;
[[EeePC|Retour à la page EeePC]]&lt;br /&gt;
&amp;lt;hr /&amp;gt;&lt;/div&gt;</summary>
		<author><name>LeaJice</name></author>
	</entry>
	<entry>
		<id>https://lea-linux.org/docs/index.php?title=Installer_des_logiciels_sur_un_support_externe_(SD,_USB),_avec_une_ic%C3%B4ne_dans_le_mode_Easy_de_l%27EeePC_apparaissant_automatiquement&amp;diff=16820</id>
		<title>Installer des logiciels sur un support externe (SD, USB), avec une icône dans le mode Easy de l&#039;EeePC apparaissant automatiquement</title>
		<link rel="alternate" type="text/html" href="https://lea-linux.org/docs/index.php?title=Installer_des_logiciels_sur_un_support_externe_(SD,_USB),_avec_une_ic%C3%B4ne_dans_le_mode_Easy_de_l%27EeePC_apparaissant_automatiquement&amp;diff=16820"/>
		<updated>2009-03-03T01:05:34Z</updated>

		<summary type="html">&lt;p&gt;LeaJice : /* Création des icônes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Nous allons voir dans cet article comment installer et exécuter des logiciels depuis un support amovible, tel que carte SD ou SDHC, clef USB, disque dur externe...&lt;br /&gt;
&lt;br /&gt;
De plus, grâce à une fonctionnalité cachée du mode Easy de l&#039;EeePC, l&#039;icône de lancement va apparaître lors de l&#039;insertion du support. (Techniquement, les icônes peuvent être définies mais ne pas apparaître si la ligne de commande est invalide, par exemple si le programme n&#039;existe pas. Cependant, si le programme se met à exister en cours de session, l&#039;icône apparaît automatiquement !)&lt;br /&gt;
&lt;br /&gt;
J&#039;ai utilisé cette méthode pour :&lt;br /&gt;
* [[Installer Firefox 3 ou 3.1 sur EeePC]] (remplacer /opt par /opt2 dans l&#039;article)&lt;br /&gt;
* Installer [[Un FPS sur l&#039;EeePC : Assault Cube]]&lt;br /&gt;
* Installer [[GoogleEarth sur l&#039;EeePC]]&lt;br /&gt;
Ce qui m&#039;a permis d&#039;économiser 120 Mo du disque principal :-)&lt;br /&gt;
&lt;br /&gt;
J&#039;ai depuis l&#039;écriture de cette article découvert comment [[Installer des logiciels sur EeePC et économiser de la place sur le disque principal|installer des logiciels intégrés à la distribution ou présents sur des dépôts additionnels]], ce qui fait une bien plus grande variété de logiciels candidats !&lt;br /&gt;
&lt;br /&gt;
== Préparation du support ==&lt;br /&gt;
&lt;br /&gt;
Les clefs USB ou les cartes SD sont formatées lors de leur achat au format FAT32 (format par défaut de Windows jusqu&#039;à récemment). Or pour des raisons de sécurité, les distributions Linux empêchent par défaut d&#039;exécuter des programmes stockés sur un tel support.&lt;br /&gt;
&lt;br /&gt;
Cette page : http://wiki.eeeuser.com/execute_apps_off_sd {{flag-en}} explique comment outrepasser cette protection, ou mieux, partitionner en 2 la clef / carte SD afin de faire une partie FAT32 et une partie spéciale Linux. Si vous le pouvez, c&#039;est la meilleure méthode. Elle est décrite dans [[#Plus simple : partitionner une clef USB ou la carte SDHC|deuxième partie de cet article]].&lt;br /&gt;
&lt;br /&gt;
Pour ma part, je ne voulais pas repartitionner ma carte SD (il faudra que je teste ça un jour ceci dit). J&#039;ai donc créé un gros fichier dessus, que je vais utiliser comme une autre partition normale. Comme vous allez le voir, cette méthode ne nécessite pas de repartitionner la clef, mais en contre-partie, il va falloir modifier quelques programmes.&lt;br /&gt;
&lt;br /&gt;
Créez un fichier vide, nommé &#039;&#039;&#039;hdd&#039;&#039;&#039;, de 1 Giga-octets (soit 1048576 = 1024 x 1024, vous pouvez changer ce nombre pour augmenter/diminuer sa taille) sur la carte :&lt;br /&gt;
&amp;lt;code multi&amp;gt;&lt;br /&gt;
$ cd /media/MMC-SD/macartesd&lt;br /&gt;
$ dd if=/dev/zero of=hdd bs=1024 count=1048576&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Ensuite, il faut le formater en format &#039;&#039;&#039;ext2&#039;&#039;&#039; (oui on peut formater un fichier ;-) par la commande :&lt;br /&gt;
&amp;lt;code multi&amp;gt;&lt;br /&gt;
$ sudo mkfs.ext2 hdd&lt;br /&gt;
mke2fs 1.40-WIP (14-Nov-2006)&lt;br /&gt;
hdd n&#039;est pas un périphérique spécial en mode bloc.&lt;br /&gt;
Procéder malgré tout? (y pour oui, n pour non) y&lt;br /&gt;
Étiquette de système de fichiers=&lt;br /&gt;
Type de système d&#039;exploitation : Linux&lt;br /&gt;
Taille de bloc=4096 (log=2)&lt;br /&gt;
Taille de fragment=4096 (log=2)&lt;br /&gt;
131072 i-noeuds, 262144 blocs&lt;br /&gt;
13107 blocs (5.00%) réservés pour le super utilisateur&lt;br /&gt;
Premier bloc de données=0&lt;br /&gt;
Nombre maximum de blocs du système de fichiers=268435456&lt;br /&gt;
8 groupes de blocs&lt;br /&gt;
32768 blocs par groupe, 32768 fragments par groupe&lt;br /&gt;
16384 i-noeuds par groupe&lt;br /&gt;
Superblocs de secours stockés sur les blocs : &lt;br /&gt;
        32768, 98304, 163840, 229376&lt;br /&gt;
&lt;br /&gt;
Écriture des tables d&#039;i-noeuds : complété                        &lt;br /&gt;
Écriture des superblocs et de l&#039;information de comptabilité du système de&lt;br /&gt;
fichiers : complété&lt;br /&gt;
&lt;br /&gt;
Le système de fichiers sera automatiquement vérifié tous les 25 montages ou&lt;br /&gt;
après 180 jours, selon la première éventualité. Utiliser tune2fs -c ou -i&lt;br /&gt;
pour écraser la valeur.&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Enfin, vous pouvez le monter dans un répertoire (j&#039;ai choisi /opt2) et vous en servir :&lt;br /&gt;
&amp;lt;code multi&amp;gt;&lt;br /&gt;
$ sudo mkdir /opt2&lt;br /&gt;
$ sudo mount /media/MMC-SD/macartesd/hdd /opt2 -o loop&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Automatiser le montage du nouvel emplacement pour les logiciels ==&lt;br /&gt;
... et donc l&#039;apparition automatique des icônes définies pour les programmes présents sur ce support.&lt;br /&gt;
&lt;br /&gt;
Nous allons maintenant automatiser le montage et le démontage de notre disque virtuel. Si vous avez installé des applications dessus, disposant d&#039;une icône dans le mode Easy de l&#039;EeePC, celle-ci apparaîtra et disparaîtra lors de l&#039;insertion et du retrait du périphérique (en utilisant l&#039;icône du périphérique dans la bare de tâches, clic droit, retirer en toute sécurité).&lt;br /&gt;
&lt;br /&gt;
Par exemple, j&#039;ai [[Installer Firefox 3 ou 3.1 sur EeePC|installé Firefox 3.1]] dans le disque virtuel, monté dans /opt2, et son icône apparaît automatiquement. Elle disparaît lorsque je retire la carte SD.&lt;br /&gt;
&lt;br /&gt;
=== Automatisation du montage ===&lt;br /&gt;
&lt;br /&gt;
Le montage passe par le programme &amp;lt;code&amp;gt;/usr/bin/xandros_device_detection_dialog&amp;lt;/code&amp;gt;. Nous allons donc le modifier.&lt;br /&gt;
&lt;br /&gt;
Vous devez auparavant suivre le tutoriel [[Empêcher la détection automatique des périphériques USB et de la carte SD au démarrage de l&#039;EeePC]] afin de transformer ce programme en un script modifiable. Si vous ne l&#039;avez pas fait, faites-le maintenant.&lt;br /&gt;
&lt;br /&gt;
Voici les modifications apportées au script :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code multi&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
# monte automatiquement /opt2 si possible&lt;br /&gt;
if [ &amp;quot;`mount | grep /media/MMC-SD/SDHC16GO`&amp;quot; != &amp;quot;&amp;quot; \&lt;br /&gt;
  -a &amp;quot;`mount | grep /opt2`&amp;quot; = &amp;quot;&amp;quot; \&lt;br /&gt;
  -a -f /media/MMC-SD/SDHC16GO/hdd ] ; then&lt;br /&gt;
        sudo mount -o loop /media/MMC-SD/SDHC16GO/hdd /opt2&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# quitter le programme si la machine est démarrée depuis moins de 30 secondes&lt;br /&gt;
# (permet de ne pas afficher la boîte de dialogue pour la carte SD)&lt;br /&gt;
if [ `cat /proc/uptime | cut -f1 -d.` -lt 30 ] ; then exit ; fi&lt;br /&gt;
&lt;br /&gt;
# lancer le programme original en lui passant tous les arguments avec lesquels on a été appelé&lt;br /&gt;
exec xandros_device_detection_dialog.orig &amp;quot;$@&amp;quot;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La partie qui nous concerne est le premier bloc, entre if et fi.&lt;br /&gt;
Le test vérifie si le bon périphérique est monté (dans mon cas, ma carte SD dans /media/MMC-SD/SDHC16GO), puis si le disque virtuel n&#039;est pas monté (dans /opt2) et si le fichier le contenant existe bien (/media/MMC-SD/SDHC16GO/hdd). Dans ce cas, le fichier du disque virtuel est monté dans /opt2.&lt;br /&gt;
Vous devez bien sûr adapter ces valeurs à ce que vous avez choisi.&lt;br /&gt;
&lt;br /&gt;
Note : vous pouvez &amp;quot;choisir&amp;quot; le nom du répertoire dans lequel se monte votre périphérique USB, en lui donnant un ibellé (&#039;&#039;label&#039;&#039; en anglais). Pour ce faire, repérez le périphérique /dev/... avec la commande mount :&lt;br /&gt;
&amp;lt;code multi&amp;gt;&lt;br /&gt;
/home/user&amp;gt; mount&lt;br /&gt;
rootfs on / type rootfs (rw)&lt;br /&gt;
/dev/sda1 on / type ext2 (ro)&lt;br /&gt;
unionfs on / type unionfs (rw,dirs=/=rw:/=ro)&lt;br /&gt;
proc on /proc type proc (rw)&lt;br /&gt;
sysfs on /sys type sysfs (rw)&lt;br /&gt;
devpts on /dev/pts type devpts (rw)&lt;br /&gt;
tmpfs on /dev/shm type tmpfs (rw)&lt;br /&gt;
tmpfs on /tmp type tmpfs (rw)&lt;br /&gt;
usbfs on /proc/bus/usb type usbfs (rw)&lt;br /&gt;
/dev/sdb1 on /media/MMC-SD/SDHC16GO type vfat (rw,nosuid,nodev,noexec,fmask=0111,dmask=0000,codepage=cp850,iocharset=utf8,shortname=mixed)&lt;br /&gt;
/dev/loop0 on /opt2 type ext2 (rw)&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ici, il s&#039;agit de &#039;&#039;&#039;/dev/sdb1&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Ensuite donnez-lui un &#039;&#039;label&#039;&#039; par la commande :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code multi&amp;gt;&lt;br /&gt;
$ sudo e2label /dev/sdb1 mon_nouveau_label&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ou bien&lt;br /&gt;
&amp;lt;code multi&amp;gt;&lt;br /&gt;
$ sudo mkdosfs -n mon_nouveau_label /dev/sdb1&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
et le périphérique se montera dans le répertoire /media/MMC-SD/mon_nouveau_label (et apparaîtra aussi dans votre répertoire utilisateur sous ce nom).&lt;br /&gt;
&lt;br /&gt;
=== Automatisation du démontage ===&lt;br /&gt;
&lt;br /&gt;
Pour le démontage, nous devons modifier le programme &amp;lt;code&amp;gt;/bin/umount&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Comme c&#039;est un programme binaire (non modifiable facilement), aussi nous allons commencer par le renommer :&lt;br /&gt;
&amp;lt;code multi&amp;gt;&lt;br /&gt;
$ sudo mv /bin/umount /bin/umount.bin&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Puis nous allons créer un script dans l&#039;ancien emplacement (c&#039;est donc le script qui sera appelé à la place du programme original). Utilisez par exemple &amp;lt;code&amp;gt;$ sudo nano /bin/umount&amp;lt;/code&amp;gt; et copiez-collez le script ci-dessous.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code multi&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
# Léa 22/1/2009&lt;br /&gt;
# /bin/umount (le programme umount original est renommé umount.bin)&lt;br /&gt;
&lt;br /&gt;
# quand on essaie de démonter la carte SD, démonter le loop d&#039;abord&lt;br /&gt;
if `echo &amp;quot;$@&amp;quot; | grep -q SDHC16GO` ; then&lt;br /&gt;
        # démonte et détache le périphérique loop, pour libérer sdb1&lt;br /&gt;
        LOOP=`mount | grep &amp;quot;on /opt2 type&amp;quot; | cut -f1 -d&amp;quot; &amp;quot;`&lt;br /&gt;
        if [ &amp;quot;$LOOP&amp;quot; != &amp;quot;&amp;quot; ] ; then&lt;br /&gt;
                umount /opt2 &amp;amp;&amp;amp; \&lt;br /&gt;
                losetup --detach $LOOP&lt;br /&gt;
        fi&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# dans tous les cas, exécuter le umount original avec les mêmes arguments&lt;br /&gt;
# (et remplacer ce shell par umount.bin pour que l&#039;appelant&lt;br /&gt;
# récupère le code retour)&lt;br /&gt;
exec umount.bin &amp;quot;$@&amp;quot;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Bien sûr, remplacez dans le script &amp;lt;code&amp;gt;SDHC16GO&amp;lt;/code&amp;gt; et &lt;br /&gt;
&amp;lt;code&amp;gt;/opt2&amp;lt;/code&amp;gt; par les valeurs que vous avez choisies.&lt;br /&gt;
&lt;br /&gt;
Pour les plus curieux, le script contient des commentaires expliquant son fonctionnement.&lt;br /&gt;
&lt;br /&gt;
==Plus simple : partitionner une clef USB ou la carte SDHC==&lt;br /&gt;
&lt;br /&gt;
J&#039;ai fait le test en partitionnant en 2 une clef USB. L&#039;objectif est d&#039;avoir une partie au format &amp;quot;Linux&amp;quot; (en réalité &#039;&#039;&#039;ext2&#039;&#039;&#039;), et une autre au format Windows (en réalité &#039;&#039;&#039;FAT32&#039;&#039;&#039;) qui pourra être utilisée sur tous les ordinateurs, quelque soit leur système d&#039;exploitation.&lt;br /&gt;
&lt;br /&gt;
Attention : cette manipulation va effacer toutes les informations présentes sur votre support.&lt;br /&gt;
&lt;br /&gt;
===Préparation du support===&lt;br /&gt;
&lt;br /&gt;
Nous allons utiliser l&#039;outil &amp;lt;code&amp;gt;fdisk&amp;lt;/code&amp;gt;, qui permet de définir les partitions (en ligne de commande car il n&#039;y a pas de logiciel graphique sur l&#039;EeePC).&lt;br /&gt;
&lt;br /&gt;
Ma clef USB est le périphérique &amp;lt;code&amp;gt;/dev/sdc&amp;lt;/code&amp;gt;. Avant de continuer, assurez-vous en comme expliqué ci-dessus (tapez simplement &amp;lt;code&amp;gt;mount&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Enfin, lancez fdisk :&lt;br /&gt;
&amp;lt;code multi&amp;gt;$ sudo fdisk /dev/sdc&lt;br /&gt;
&lt;br /&gt;
/home/user&amp;gt; sudo fdisk /dev/sdc&lt;br /&gt;
&lt;br /&gt;
The number of cylinders for this disk is set to 3816.&lt;br /&gt;
There is nothing wrong with that, but this is larger than 1024,&lt;br /&gt;
and could in certain setups cause problems with:&lt;br /&gt;
1) software that runs at boot time (e.g., old versions of LILO)&lt;br /&gt;
2) booting and partitioning software from other OSs&lt;br /&gt;
   (e.g., DOS FDISK, OS/2 FDISK)&lt;br /&gt;
&lt;br /&gt;
Command (m for help): p&lt;br /&gt;
&lt;br /&gt;
Disk /dev/sdc: 1000 MB, 1000341504 bytes&lt;br /&gt;
16 heads, 32 sectors/track, 3816 cylinders&lt;br /&gt;
Units = cylinders of 512 * 512 = 262144 bytes&lt;br /&gt;
&lt;br /&gt;
   Device Boot      Start         End      Blocks   Id  System&lt;br /&gt;
/dev/sdc1               1        1954      976880    b  W95 FAT32&lt;br /&gt;
&lt;br /&gt;
Command (m for help): &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La commande &#039;&#039;&#039;p&#039;&#039;&#039; permet d&#039;afficher la table de partitions de la clef.&lt;br /&gt;
&lt;br /&gt;
Nous allons supprimer la partition, en utilisant la commande &#039;&#039;&#039;d&#039;&#039;&#039; :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code multi&amp;gt;Command (m for help): d&lt;br /&gt;
Selected partition 1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Puis créer les 2 partitions avec la commande &#039;&#039;&#039;n&#039;&#039;&#039;. La première fera 512 Mo, la seconde prendra la place restante. La commande &#039;&#039;&#039;t&#039;&#039;&#039; permet de changer le type de partition :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code multi&amp;gt;Command (m for help): n&lt;br /&gt;
Command action&lt;br /&gt;
   e   extended&lt;br /&gt;
   p   primary partition (1-4)&lt;br /&gt;
p&lt;br /&gt;
Partition number (1-4): 1&lt;br /&gt;
First cylinder (1-3816, default 1): 1&lt;br /&gt;
Last cylinder or +size or +sizeM or +sizeK (1-3816, default 3816): +512M&lt;br /&gt;
&lt;br /&gt;
Command (m for help): n&lt;br /&gt;
Command action&lt;br /&gt;
   e   extended&lt;br /&gt;
   p   primary partition (1-4)&lt;br /&gt;
p&lt;br /&gt;
Partition number (1-4): 2&lt;br /&gt;
First cylinder (1955-3816, default 1955): 1955&lt;br /&gt;
Last cylinder or +size or +sizeM or +sizeK (1955-3816, default 3816): 3816&lt;br /&gt;
&lt;br /&gt;
Command (m for help): t&lt;br /&gt;
Partition number (1-4): 2&lt;br /&gt;
Hex code (type L to list codes): b&lt;br /&gt;
Changed system type of partition 2 to b (W95 FAT32)&lt;br /&gt;
&lt;br /&gt;
Command (m for help): p &lt;br /&gt;
&lt;br /&gt;
Disk /dev/sdc: 1000 MB, 1000341504 bytes&lt;br /&gt;
16 heads, 32 sectors/track, 3816 cylinders&lt;br /&gt;
Units = cylinders of 512 * 512 = 262144 bytes&lt;br /&gt;
&lt;br /&gt;
   Device Boot      Start         End      Blocks   Id  System&lt;br /&gt;
/dev/sdc1               1        1954      500208   83  Linux&lt;br /&gt;
/dev/sdc2            1955        3816      476672    b  W95 FAT32&lt;br /&gt;
&lt;br /&gt;
Command (m for help):&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Enfin, utilisez la commande &#039;&#039;&#039;w&#039;&#039;&#039; pour écrire la table des partitions sur la clef :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code multi&amp;gt;Command (m for help): w&lt;br /&gt;
The partition table has been altered!&lt;br /&gt;
&lt;br /&gt;
Calling ioctl() to re-read partition table.&lt;br /&gt;
&lt;br /&gt;
WARNING: Re-reading the partition table failed with error 16: Périphérique ou ressource occupé.&lt;br /&gt;
The kernel still uses the old table.&lt;br /&gt;
The new table will be used at the next reboot.&lt;br /&gt;
&lt;br /&gt;
WARNING: If you have created or modified any DOS 6.x&lt;br /&gt;
partitions, please see the fdisk manual page for additional&lt;br /&gt;
information.&lt;br /&gt;
Syncing disks.&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Reste maintenant à formater les 2 partitions. La première en &#039;&#039;&#039;ext2&#039;&#039;&#039;, la deuxième en FAT32 :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code multi&amp;gt;$ sudo mke2fs /dev/sdc1&lt;br /&gt;
mke2fs 1.40-WIP (14-Nov-2006)&lt;br /&gt;
Étiquette de système de fichiers=&lt;br /&gt;
Type de système d&#039;exploitation : Linux&lt;br /&gt;
Taille de bloc=1024 (log=0)&lt;br /&gt;
Taille de fragment=1024 (log=0)&lt;br /&gt;
125488 i-noeuds, 500208 blocs&lt;br /&gt;
25010 blocs (5.00%) réservés pour le super utilisateur&lt;br /&gt;
Premier bloc de données=1&lt;br /&gt;
Nombre maximum de blocs du système de fichiers=67633152&lt;br /&gt;
62 groupes de blocs&lt;br /&gt;
8192 blocs par groupe, 8192 fragments par groupe&lt;br /&gt;
2024 i-noeuds par groupe&lt;br /&gt;
Superblocs de secours stockés sur les blocs : &lt;br /&gt;
        8193, 24577, 40961, 57345, 73729, 204801, 221185, 401409&lt;br /&gt;
&lt;br /&gt;
Écriture des tables d&#039;i-noeuds : complété                        &lt;br /&gt;
Écriture des superblocs et de l&#039;information de comptabilité du système de&lt;br /&gt;
fichiers : complété&lt;br /&gt;
&lt;br /&gt;
Le système de fichiers sera automatiquement vérifié tous les 20 montages ou&lt;br /&gt;
après 180 jours, selon la première éventualité. Utiliser tune2fs -c ou -i&lt;br /&gt;
pour écraser la valeur.&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
et (formatage + libellé &amp;quot;FAT32&amp;quot; pour la deuxième partition) :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code multi&amp;gt;$ sudo mkdosfs -n FAT32 /dev/sdc2&lt;br /&gt;
mkdosfs 2.11 (12 Mar 2005)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Enfin, donnons le libellé &amp;quot;Linux&amp;quot; la partition ext2, afin qu&#039;elle soit montée dans un endroit facilement reconnaissable :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code multi&amp;gt;$ sudo e2label /dev/sdc1 Linux&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
C&#039;est terminé !&lt;br /&gt;
&lt;br /&gt;
===Configuration de l&#039;EeePC===&lt;br /&gt;
&lt;br /&gt;
Il suffit maintenant de repérer où est montée la partition Linux, en regardant dans le répertoire /media. Chez moi, elle se trouve dans &#039;&#039;&#039;/media/DataTraveler 2.0/Linux&#039;&#039;&#039; (on retrouve le nom que l&#039;on a donné à la partition) :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code multi&amp;gt;/home/user&amp;gt; ls -l /media/DataTraveler\ 2.0/&lt;br /&gt;
total 17&lt;br /&gt;
drwxrwxrwx 2 root root 16384 1969-12-31 21:00 FAT32/&lt;br /&gt;
drwxr-xr-x 3 root root  1024 2009-03-02 21:09 Linux/&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous allons donc créer un lien &#039;&#039;&#039;/opt3&#039;&#039;&#039; vers ce répertoire (car /opt et /opt2 sont déjà utilisés) par :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code multi&amp;gt;sudo ln -s &amp;quot;/media/DataTraveler 2.0/Linux&amp;quot; /opt3&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Et c&#039;est tout ! Les modifications de scripts vues dans la première partie de l&#039;article ne sont pas nécessaires (bien que compatibles).&lt;br /&gt;
&lt;br /&gt;
Vous pouvez maintenant installer des logiciels sur le répertoire /opt3, créer des icônes vers ses programmes, qui dans le mode Easy apparaîtront automatiquement sur le bureau lors de l&#039;insertion, et disparaîtrons lors de son extraction (après clic droit sur l&#039;icône de clef USB dans la zone de notification, &amp;quot;Retirer en toute sécurité&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
==Création des icônes==&lt;br /&gt;
&lt;br /&gt;
Utilisez par exemple [[Launcher tools#Simple UI Editor|Simple UI Editor]], et définissez la ligne de commande vers l&#039;exécutable se trouvant sur votre support amovible, par exemple &amp;lt;code&amp;gt;/opt2/firefox3.1/firefox&amp;lt;/code&amp;gt; ou &amp;lt;code&amp;gt;/opt3/xchat/usr/bin/xchat.sh&amp;lt;/code&amp;gt; (Voir [[Installer des logiciels sur EeePC et économiser de la place sur le disque principal#Installation de logiciels, chacun dans son répertoire|cet article]]). C&#039;est tout, cela va créer une icône qui apparaîtra / disparaîtra automatiquement.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr /&amp;gt;&lt;br /&gt;
[[EeePC|Retour à la page EeePC]]&lt;br /&gt;
&amp;lt;hr /&amp;gt;&lt;/div&gt;</summary>
		<author><name>LeaJice</name></author>
	</entry>
	<entry>
		<id>https://lea-linux.org/docs/index.php?title=Trucs:Prompt_:_une_invite_de_commande_en_couleur&amp;diff=16814</id>
		<title>Trucs:Prompt : une invite de commande en couleur</title>
		<link rel="alternate" type="text/html" href="https://lea-linux.org/docs/index.php?title=Trucs:Prompt_:_une_invite_de_commande_en_couleur&amp;diff=16814"/>
		<updated>2009-03-02T13:58:38Z</updated>

		<summary type="html">&lt;p&gt;LeaJice : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div class=&amp;quot;leapar&amp;quot;&amp;gt;asteroid&amp;lt;l.asteroid chez laposte.net&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il est utile quand on travaille en console de différencier du premier coup d&#039;œil le résultat d&#039;une commande. Pour ça, on peut customiser le prompt de différentes façons :&lt;br /&gt;
&lt;br /&gt;
* utilisez un prompt en couleur&lt;br /&gt;
* utilisez le retour à la ligne en fin de prompt&lt;br /&gt;
* combiner les deux :)&lt;br /&gt;
&lt;br /&gt;
Pour ça il vous faut modifier le fichier &amp;lt;code&amp;gt;.bashrc&amp;lt;/code&amp;gt; qui se trouve dans votre répertoire personnel en rajoutant à la fin &amp;lt;code&amp;gt;PS1=&amp;quot;votre \prompt\perso&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Je ne vais pas entrer dans le détail (sauf si on me le demande) car tout le web en parle. Seulement je vais m&#039;attarder sur un point qui est très gênants, la couleur.&lt;br /&gt;
&lt;br /&gt;
Pour la suite il faut juste savoir que :&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;\u&amp;lt;/code&amp;gt; est le nom de l&#039;utilisateur (root, pikachou, asteroid, ...)&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;\h&amp;lt;/code&amp;gt; est votre hostname (bench, monPC, station, MIR, ...), jusqu&#039;au premier point&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;\H&amp;lt;/code&amp;gt; est votre hostname complet&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;\W&amp;lt;/code&amp;gt; est le répertoire courant (celui dans lequel vous êtes)&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;\w&amp;lt;/code&amp;gt; est le chemin complet du répertoire courant&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;\n&amp;lt;/code&amp;gt; permet de revenir à la ligne&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;\r&amp;lt;/code&amp;gt; est le retour chariot&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;\D{format}&amp;lt;/code&amp;gt; est la date courante, formatée comme expliqué dans &amp;lt;code&amp;gt;man strftime&amp;lt;/code&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;\$&amp;lt;/code&amp;gt; qui met un $ quand vous n&#039;êtes pas root ou un # si vous l&#039;êtes&amp;lt;br /&amp;gt;&lt;br /&gt;
et :&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;\e&amp;lt;/code&amp;gt; séquence d&#039;échappement pour les couleurs&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;\[&amp;lt;/code&amp;gt; début de texte non imprimable&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;\]&amp;lt;/code&amp;gt; fin de texte non imprimable&amp;lt;br /&amp;gt;&lt;br /&gt;
(voir [http://fr.wikipedia.org/wiki/Bourne-Again_shell#Caract.C3.A8re_d.27.C3.A9chappement_anti-slash_.28.22.5C.22.29 la page sur Bash de Wikipedia])&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Par défaut le PS1 est [\u@\h \W]\$ et on le connait en faisant &amp;lt;code&amp;gt;echo $PS1&amp;lt;/code&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Lorsque j&#039;ai mis de la couleur dans mon prompt j&#039;ai fait &amp;lt;code&amp;gt;PS1=&amp;quot;\e[1;31m\u sur \h dans \w \n=&amp;gt;\e[0m&amp;quot;&amp;lt;/code&amp;gt; ce qui me donne un prompt rouge du style :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;root sur machine dans /home/pikachou&amp;lt;br /&amp;gt;&lt;br /&gt;
=&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Remarque : &#039;&#039;&#039;[01;31m&#039;&#039;&#039; est de type [&#039;&#039;&#039;couleur de fond&#039;&#039;&#039;;&#039;&#039;&#039;couleur du texte&#039;&#039;&#039;m&lt;br /&gt;
&lt;br /&gt;
Le fait de saisir PS1=&amp;quot;... dans une console permet de voir les modifs sans pour autant les enregistrer directement. un &amp;lt;code&amp;gt;exit&amp;lt;/code&amp;gt; vous remettra au prompt précédent. Mais malheureusement, lorsque je tapais des commandes qui dépassaient la fin de la ligne ça ré-écrivait sur le prompt au lieu d&#039;aller à la ligne.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;&#039;&#039;&#039;L&#039;astuce&#039;&#039;&#039;&amp;lt;/u&amp;gt; consiste donc à remplacer &amp;lt;code&amp;gt;\e[1;31m&amp;lt;/code&amp;gt; par &amp;lt;code&amp;gt;\[\e[1;31m\]&amp;lt;/code&amp;gt; et pareil pour arrêter la couleur le &amp;lt;code&amp;gt;\[\e[0m\]&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Pour conclure :&lt;br /&gt;
&amp;lt;code&amp;gt;\[\e[1;31m\]&amp;lt;/code&amp;gt; commence la couleur dans le Bash (ici uniquement le prompt) et &amp;lt;code&amp;gt;\[\e[0m\]&amp;lt;/code&amp;gt; arrête la couleur.&lt;br /&gt;
&lt;br /&gt;
Le code couleurs est facile à trouver sur le web et en français avec un tas de petites explications :)&lt;br /&gt;
&lt;br /&gt;
Voila j&#039;espère que ce petit post aura résolu le problème de certains et donner envie aux autres d&#039;en savoir plus sur le bash et son prompt :-)&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;aparte&amp;quot;&amp;gt;Merci a babar et scriptfanix pour mes lacunes en anglais.&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;note&amp;quot;&amp;gt;&amp;lt;u&amp;gt;Note&amp;lt;/u&amp;gt;: certains shell n&#039;acceptent pas \e comme caractère d&#039;échappement (ou le remplacent par \033). Il faut utiliser &amp;lt;code&amp;gt;\033&amp;lt;/code&amp;gt; à la place. Par exemple &amp;lt;code&amp;gt;\[\033[01;31m\]&amp;lt;/code&amp;gt; au lieu de &amp;lt;code&amp;gt;\[\e[01;31m\]&amp;lt;/code&amp;gt;.&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Voir aussi http://blog.gnusquad.org/2008/11/22/mettez-de-la-couleur-dans-votre-prompt/&lt;br /&gt;
&lt;br /&gt;
[[Catégorie:Trucs_Shell]]&lt;/div&gt;</summary>
		<author><name>LeaJice</name></author>
	</entry>
	<entry>
		<id>https://lea-linux.org/docs/index.php?title=Trucs:Prompt_:_une_invite_de_commande_en_couleur&amp;diff=16813</id>
		<title>Trucs:Prompt : une invite de commande en couleur</title>
		<link rel="alternate" type="text/html" href="https://lea-linux.org/docs/index.php?title=Trucs:Prompt_:_une_invite_de_commande_en_couleur&amp;diff=16813"/>
		<updated>2009-03-02T13:56:50Z</updated>

		<summary type="html">&lt;p&gt;LeaJice : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div class=&amp;quot;leapar&amp;quot;&amp;gt;asteroid&amp;lt;l.asteroid chez laposte.net&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il est utile quand on travaille en console de différencier du premier coup d&#039;œil le résultat d&#039;une commande. Pour ça, on peut customiser le prompt de différentes façons :&lt;br /&gt;
&lt;br /&gt;
* utilisez un prompt en couleur&lt;br /&gt;
* utilisez le retour à la ligne en fin de prompt&lt;br /&gt;
* combiner les deux :)&lt;br /&gt;
&lt;br /&gt;
Pour ça il vous faut modifier le fichier &amp;lt;code&amp;gt;.bashrc&amp;lt;/code&amp;gt; qui se trouve dans votre répertoire personnel en rajoutant à la fin &amp;lt;code&amp;gt;PS1=&amp;quot;votre \prompt\perso&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Je ne vais pas entrer dans le détail (sauf si on me le demande) car tout le web en parle. Seulement je vais m&#039;attarder sur un point qui est très gênants, la couleur.&lt;br /&gt;
&lt;br /&gt;
Pour la suite il faut juste savoir que :&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;\u&amp;lt;/code&amp;gt; est le nom de l&#039;utilisateur (root, pikachou, asteroid, ...)&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;\h&amp;lt;/code&amp;gt; est votre hostname (bench, monPC, station, MIR, ...), jusqu&#039;au premier point&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;\H&amp;lt;/code&amp;gt; est votre hostname complet&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;\W&amp;lt;/code&amp;gt; est le répertoire courant (celui dans lequel vous êtes)&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;\w&amp;lt;/code&amp;gt; est le chemin complet du répertoire courant&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;\n&amp;lt;/code&amp;gt; permet de revenir à la ligne&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;\r&amp;lt;/code&amp;gt; est le retour chariot&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;\D{format}&amp;lt;/code&amp;gt; est la date courante, formatée comme expliqué dans &amp;lt;code&amp;gt;man strftime&amp;lt;/code&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;\$&amp;lt;/code&amp;gt; qui met un $ quand vous n&#039;êtes pas root ou un # si vous l&#039;êtes&amp;lt;br /&amp;gt;&lt;br /&gt;
et :&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;\e&amp;lt;/code&amp;gt; séquence d&#039;échappement pour les couleurs&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;\[&amp;lt;/code&amp;gt; début de texte non imprimable&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;\]&amp;lt;/code&amp;gt; fin de texte non imprimable&amp;lt;br /&amp;gt;&lt;br /&gt;
(voir [http://fr.wikipedia.org/wiki/Bourne-Again_shell#Caract.C3.A8re_d.27.C3.A9chappement_anti-slash_.28.22.5C.22.29 la page sur Bash de Wikipedia])&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Par défaut le PS1 est [\u@\h \W]\$ et on le connait en faisant &amp;lt;code&amp;gt;echo $PS1&amp;lt;/code&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Lorsque j&#039;ai mis de la couleur dans mon prompt j&#039;ai fait &amp;lt;code&amp;gt;PS1=&amp;quot;\e[1;31m\u sur \h dans \w \n=&amp;gt;\e[0m&amp;quot;&amp;lt;/code&amp;gt; ce qui me donne un prompt rouge du style :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;root sur machine dans /home/pikachou&amp;lt;br /&amp;gt;&lt;br /&gt;
=&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;note&amp;gt;&#039;&#039;&#039;[01;31m&#039;&#039;&#039; est de type [&#039;&#039;&#039;couleur de fond&#039;&#039;&#039;;&#039;&#039;&#039;couleur du texte&#039;&#039;&#039;m&amp;lt;/note&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le fait de saisir PS1=&amp;quot;... dans une console permet de voir les modifs sans pour autant les enregistrer directement. un &amp;lt;code&amp;gt;exit&amp;lt;/code&amp;gt; vous remettra au prompt précédent. Mais malheureusement, lorsque je tapais des commandes qui dépassaient la fin de la ligne ça ré-écrivait sur le prompt au lieu d&#039;aller à la ligne.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;&#039;&#039;&#039;L&#039;astuce&#039;&#039;&#039;&amp;lt;/u&amp;gt; consiste donc à remplacer &amp;lt;code&amp;gt;\e[1;31m&amp;lt;/code&amp;gt; par &amp;lt;code&amp;gt;\[\e[1;31m&amp;lt;/code&amp;gt; et pareil pour arrêter la couleur le &amp;lt;code&amp;gt;\[\e[0m&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Pour conclure :&lt;br /&gt;
&amp;lt;code&amp;gt;\[\e[1;31m\]&amp;lt;/code&amp;gt; commence la couleur dans le Bash (ici uniquement le prompt) et &amp;lt;code&amp;gt;\[\e[0m\]&amp;lt;/code&amp;gt; arrête la couleur.&lt;br /&gt;
&lt;br /&gt;
Le code couleurs est facile à trouver sur le web et en français avec un tas de petites explications :)&lt;br /&gt;
&lt;br /&gt;
Voila j&#039;espère que ce petit post aura résolu le problème de certains et donner envie aux autres d&#039;en savoir plus sur le bash et son prompt :-)&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;aparte&amp;quot;&amp;gt;Merci a babar et scriptfanix pour mes lacunes en anglais.&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;note&amp;quot;&amp;gt;&amp;lt;u&amp;gt;Note&amp;lt;/u&amp;gt;: certains shell n&#039;acceptent pas \e comme caractère d&#039;échappement (ou le remplacent par \033). Il faut utiliser &amp;lt;code&amp;gt;\033&amp;lt;/code&amp;gt; à la place. Par exemple &amp;lt;code&amp;gt;\[\033[01;31m\]&amp;lt;/code&amp;gt; au lieu de &amp;lt;code&amp;gt;\[\e[01;31m\]&amp;lt;/code&amp;gt;.&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Voir aussi http://blog.gnusquad.org/2008/11/22/mettez-de-la-couleur-dans-votre-prompt/&lt;br /&gt;
&lt;br /&gt;
[[Catégorie:Trucs_Shell]]&lt;/div&gt;</summary>
		<author><name>LeaJice</name></author>
	</entry>
	<entry>
		<id>https://lea-linux.org/docs/index.php?title=Trucs:Prompt_:_une_invite_de_commande_en_couleur&amp;diff=16812</id>
		<title>Trucs:Prompt : une invite de commande en couleur</title>
		<link rel="alternate" type="text/html" href="https://lea-linux.org/docs/index.php?title=Trucs:Prompt_:_une_invite_de_commande_en_couleur&amp;diff=16812"/>
		<updated>2009-03-02T13:54:47Z</updated>

		<summary type="html">&lt;p&gt;LeaJice : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div class=&amp;quot;leapar&amp;quot;&amp;gt;asteroid&amp;lt;l.asteroid chez laposte.net&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il est utile quand on travaille en console de différencier du premier coup d&#039;œil le résultat d&#039;une commande. Pour ça, on peut customiser le prompt de différentes façons :&lt;br /&gt;
&lt;br /&gt;
* utilisez un prompt en couleur&lt;br /&gt;
* utilisez le retour à la ligne en fin de prompt&lt;br /&gt;
* combiner les deux :)&lt;br /&gt;
&lt;br /&gt;
Pour ça il vous faut modifier le fichier &amp;lt;code&amp;gt;.bashrc&amp;lt;/code&amp;gt; qui se trouve dans votre répertoire personnel en rajoutant à la fin &amp;lt;code&amp;gt;PS1=&amp;quot;votre \prompt\perso&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Je ne vais pas entrer dans le détail (sauf si on me le demande) car tout le web en parle. Seulement je vais m&#039;attarder sur un point qui est très gênants, la couleur.&lt;br /&gt;
&lt;br /&gt;
Pour la suite il faut juste savoir que :&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;\u&amp;lt;/code&amp;gt; est le nom de l&#039;utilisateur (root, pikachou, asteroid, ...)&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;\h&amp;lt;/code&amp;gt; est votre hostname (bench, monPC, station, MIR, ...), jusqu&#039;au premier point&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;\H&amp;lt;/code&amp;gt; est votre hostname complet&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;\W&amp;lt;/code&amp;gt; est le répertoire courant (celui dans lequel vous êtes)&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;\w&amp;lt;/code&amp;gt; est le chemin complet du répertoire courant&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;\n&amp;lt;/code&amp;gt; permet de revenir à la ligne&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;\r&amp;lt;/code&amp;gt; est le retour chariot&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;\D{format}&amp;lt;/code&amp;gt; est la date courante, formatée comme expliqué dans &amp;lt;code&amp;gt;man strftime&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;\$&amp;lt;/code&amp;gt; qui met un $ quand vous n&#039;êtes pas root ou un # si vous l&#039;êtes&amp;lt;br /&amp;gt;&lt;br /&gt;
et :&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;\e&amp;lt;/code&amp;gt; séquence d&#039;échappement pour les couleurs&lt;br /&gt;
&amp;lt;code&amp;gt;\[&amp;lt;/code&amp;gt; début de texte non imprimable&lt;br /&gt;
&amp;lt;code&amp;gt;\]&amp;lt;/code&amp;gt; fin de texte non imprimable&lt;br /&gt;
(voir [http://fr.wikipedia.org/wiki/Bourne-Again_shell#Caract.C3.A8re_d.27.C3.A9chappement_anti-slash_.28.22.5C.22.29 la page sur Bash de Wikipedia])&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Par défaut le PS1 est [\u@\h \W]\$ et on le connait en faisant &amp;lt;code&amp;gt;echo $PS1&amp;lt;/code&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Lorsque j&#039;ai mis de la couleur dans mon prompt j&#039;ai fait &amp;lt;code&amp;gt;PS1=&amp;quot;\e[1;31m\u sur \h dans \w \n=&amp;gt;\e[0m&amp;quot;&amp;lt;/code&amp;gt; ce qui me donne un prompt rouge du style :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;root sur machine dans /home/pikachou&amp;lt;br /&amp;gt;&lt;br /&gt;
=&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;note&amp;gt;&#039;&#039;&#039;[01;31m&#039;&#039;&#039; est de type [&#039;&#039;&#039;couleur de fond&#039;&#039;&#039;;&#039;&#039;&#039;couleur du texte&#039;&#039;&#039;m&amp;lt;/note&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le fait de saisir PS1=&amp;quot;... dans une console permet de voir les modifs sans pour autant les enregistrer directement. un &amp;lt;code&amp;gt;exit&amp;lt;/code&amp;gt; vous remettra au prompt précédent. Mais malheureusement, lorsque je tapais des commandes qui dépassaient la fin de la ligne ça ré-écrivait sur le prompt au lieu d&#039;aller à la ligne.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;&#039;&#039;&#039;L&#039;astuce&#039;&#039;&#039;&amp;lt;/u&amp;gt; consiste donc à remplacer &amp;lt;code&amp;gt;\e[1;31m&amp;lt;/code&amp;gt; par &amp;lt;code&amp;gt;\[\e[1;31m&amp;lt;/code&amp;gt; et pareil pour arrêter la couleur le &amp;lt;code&amp;gt;\[\e[0m&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Pour conclure :&lt;br /&gt;
&amp;lt;code&amp;gt;\[\e[1;31m&amp;lt;/code&amp;gt; commence la couleur dans le Bash (ici uniquement le prompt) et &amp;lt;code&amp;gt;\[\e[0m&amp;lt;/code&amp;gt; arrête la couleur.&lt;br /&gt;
&lt;br /&gt;
Le code couleurs est facile a trouver sur le web et en français avec un tas de petites explications :)&lt;br /&gt;
&lt;br /&gt;
Voila j&#039;espère que ce petit post aura résolu le problème de certains et donner envie aux autres d&#039;en savoir plus sur le bash et son prompt :-)&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;aparte&amp;quot;&amp;gt;Merci a babar et scriptfanix pour mes lacunes en anglais.&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;note&amp;quot;&amp;gt;&amp;lt;u&amp;gt;Note&amp;lt;/u&amp;gt;: certains shell n&#039;acceptent pas \e comme caractère d&#039;échappement (ou le remplacent par \033). Il faut utiliser &amp;lt;code&amp;gt;\033&amp;lt;/code&amp;gt; à la place. Par exemple &amp;lt;code&amp;gt;\[\033[01;31m\]&amp;lt;/code&amp;gt; au lieu de &amp;lt;code&amp;gt;\[\e[01;31m\]&amp;lt;/code&amp;gt;.&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Voir aussi http://blog.gnusquad.org/2008/11/22/mettez-de-la-couleur-dans-votre-prompt/&lt;br /&gt;
&lt;br /&gt;
[[Catégorie:Trucs_Shell]]&lt;/div&gt;</summary>
		<author><name>LeaJice</name></author>
	</entry>
	<entry>
		<id>https://lea-linux.org/docs/index.php?title=Trucs:Prompt_:_une_invite_de_commande_en_couleur&amp;diff=16811</id>
		<title>Trucs:Prompt : une invite de commande en couleur</title>
		<link rel="alternate" type="text/html" href="https://lea-linux.org/docs/index.php?title=Trucs:Prompt_:_une_invite_de_commande_en_couleur&amp;diff=16811"/>
		<updated>2009-03-02T13:53:57Z</updated>

		<summary type="html">&lt;p&gt;LeaJice : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div class=&amp;quot;leapar&amp;quot;&amp;gt;asteroid&amp;lt;l.asteroid chez laposte.net&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il est utile quand on travaille en console de différencier du premier coup d&#039;œil le résultat d&#039;une commande. Pour ça, on peut customiser le prompt de différentes façons :&lt;br /&gt;
&lt;br /&gt;
* utilisez un prompt en couleur&lt;br /&gt;
* utilisez le retour à la ligne en fin de prompt&lt;br /&gt;
* combiner les deux :)&lt;br /&gt;
&lt;br /&gt;
Pour ça il vous faut modifier le fichier &amp;lt;code&amp;gt;.bashrc&amp;lt;/code&amp;gt; qui se trouve dans votre répertoire personnel en rajoutant à la fin &amp;lt;code&amp;gt;PS1=&amp;quot;votre \prompt\perso&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Je ne vais pas entrer dans le détail (sauf si on me le demande) car tout le web en parle. Seulement je vais m&#039;attarder sur un point qui est très gênants, la couleur.&lt;br /&gt;
&lt;br /&gt;
Pour la suite il faut juste savoir que :&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;\u&amp;lt;/code&amp;gt; est le nom de l&#039;utilisateur (root, pikachou, asteroid, ...)&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;\h&amp;lt;/code&amp;gt; est votre hostname (bench, monPC, station, MIR, ...), jusqu&#039;au premier point&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;\H&amp;lt;/code&amp;gt; est votre hostname complet&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;\W&amp;lt;/code&amp;gt; est le répertoire courant (celui dans lequel vous êtes)&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;\w&amp;lt;/code&amp;gt; est le chemin complet du répertoire courant&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;\n&amp;lt;/code&amp;gt; permet de revenir à la ligne&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;\r&amp;lt;/code&amp;gt; est le retour chariot&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;\D{format}&amp;lt;/code&amp;gt; est la date courante, formatée comme expliqué dans &amp;lt;code&amp;gt;man strftime&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;\$&amp;lt;/code&amp;gt; qui met un $ quand vous n&#039;êtes pas root ou un # si vous l&#039;êtes&amp;lt;br /&amp;gt;&lt;br /&gt;
et :&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;\e&amp;lt;/code&amp;gt; séquence d&#039;échappement pour les couleurs&lt;br /&gt;
&amp;lt;code&amp;gt;\[&amp;lt;/code&amp;gt; début de texte non imprimable&lt;br /&gt;
&amp;lt;code&amp;gt;\]&amp;lt;/code&amp;gt; fin de texte non imprimable&lt;br /&gt;
(voir [http://fr.wikipedia.org/wiki/Bourne-Again_shell#Caract.C3.A8re_d.27.C3.A9chappement_anti-slash_.28.22.5C.22.29 la page sur Bash de Wikipedia])&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Par défaut le PS1 est [\u@\h \W]\$ et on le connait en faisant &amp;lt;code&amp;gt;echo $PS1&amp;lt;/code&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Lorsque j&#039;ai mis de la couleur dans mon prompt j&#039;ai fait &amp;lt;code&amp;gt;PS1=&amp;quot;\e[1;31m\u sur \h dans \w \n=&amp;gt;\e[0m&amp;quot;&amp;lt;/code&amp;gt; ce qui me donne un prompt rouge du style :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;cadre console&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;root sur machine dans /home/pikachou&amp;lt;br /&amp;gt;&lt;br /&gt;
=&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;note&amp;gt;&#039;&#039;&#039;[01;31m&#039;&#039;&#039; est de type [&#039;&#039;&#039;couleur de fond&#039;&#039;&#039;;&#039;&#039;&#039;couleur du texte&#039;&#039;&#039;m&amp;lt;/note&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le fait de saisir PS1=&amp;quot;... dans une console permet de voir les modifs sans pour autant les enregistrer directement. un &amp;lt;code&amp;gt;exit&amp;lt;/code&amp;gt; vous remettra au prompt précédent. Mais malheureusement, lorsque je tapais des commandes qui dépassaient la fin de la ligne ça ré-écrivait sur le prompt au lieu d&#039;aller à la ligne.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;&#039;&#039;&#039;L&#039;astuce&#039;&#039;&#039;&amp;lt;/u&amp;gt; consiste donc à remplacer &amp;lt;code&amp;gt;\e[1;31m&amp;lt;/code&amp;gt; par &amp;lt;code&amp;gt;\[\e[1;31m&amp;lt;/code&amp;gt; et pareil pour arrêter la couleur le &amp;lt;code&amp;gt;\[\e[0m&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Pour conclure :&lt;br /&gt;
&amp;lt;code&amp;gt;\[\e[1;31m&amp;lt;/code&amp;gt; commence la couleur dans le Bash (ici uniquement le prompt) et &amp;lt;code&amp;gt;\[\e[0m&amp;lt;/code&amp;gt; arrête la couleur.&lt;br /&gt;
&lt;br /&gt;
Le code couleurs est facile a trouver sur le web et en français avec un tas de petites explications :)&lt;br /&gt;
&lt;br /&gt;
Voila j&#039;espère que ce petit post aura résolu le problème de certains et donner envie aux autres d&#039;en savoir plus sur le bash et son prompt :-)&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;aparte&amp;quot;&amp;gt;Merci a babar et scriptfanix pour mes lacunes en anglais.&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;note&amp;quot;&amp;gt;&amp;lt;u&amp;gt;Note&amp;lt;/u&amp;gt;: certains shell n&#039;acceptent pas \e comme caractère d&#039;échappement (ou le remplacent par \033). Il faut utiliser &amp;lt;code&amp;gt;\033&amp;lt;/code&amp;gt; à la place. Par exemple &amp;lt;code&amp;gt;\[\033[01;31m\]&amp;lt;/code&amp;gt; au lieu de &amp;lt;code&amp;gt;\[\e[01;31m\]&amp;lt;/code&amp;gt;.&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Voir aussi http://blog.gnusquad.org/2008/11/22/mettez-de-la-couleur-dans-votre-prompt/&lt;br /&gt;
&lt;br /&gt;
[[Catégorie:Trucs_Shell]]&lt;/div&gt;</summary>
		<author><name>LeaJice</name></author>
	</entry>
	<entry>
		<id>https://lea-linux.org/docs/index.php?title=Installer_une_webcam_USB_avec_un_noyau_Linux_2.2_ou_2.4&amp;diff=16810</id>
		<title>Installer une webcam USB avec un noyau Linux 2.2 ou 2.4</title>
		<link rel="alternate" type="text/html" href="https://lea-linux.org/docs/index.php?title=Installer_une_webcam_USB_avec_un_noyau_Linux_2.2_ou_2.4&amp;diff=16810"/>
		<updated>2009-03-02T11:20:07Z</updated>

		<summary type="html">&lt;p&gt;LeaJice : Révocation des modifications par 83.233.165.17 (Discussion) vers la dernière version de LeaJice&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Installer une WebCam USB =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;leatitre&amp;quot;&amp;gt;Installer une WebCam USB&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;leapar&amp;quot;&amp;gt;par [mailto:tux.le.pengouin@free.fr Fred] et [mailto:dclatot@free.fr Dimitri]&amp;lt;div class=&amp;quot;leadesc&amp;quot;&amp;gt;Un certain nombre de WebCams sont maintenant prises en charge par Linux, voyons comment en faire fonctionner une.&amp;lt;/div&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Dans ce document, je vais expliquer comment installer une WebCam sous Linux, mais je ne parlerai que de celles ayant un pilote en GPL.&lt;br /&gt;
&lt;br /&gt;
Il existe plusieurs types de WebCam prises en charge par Linux avec des pilotes GPL :&lt;br /&gt;
* celles utilisant le modules &#039;&#039;&#039;uvcvideo&#039;&#039;&#039; (voir ci-dessous) &lt;br /&gt;
&amp;lt;div class=&amp;quot;note&amp;quot;&amp;gt;Grâce à Microsoft (une fois n&#039;est pas coutume), l&#039;installation d&#039;une webcam sous Linux va devenir beaucoup plus simple. En effet, pour avoir le logo &amp;quot;Vista certified&amp;quot;, une webcam doit respecter la norme USB Video (l&#039;équivalent de USB Storage pour les clefs USB). A priori, ce sera le cas de la grande majorité des nouvelles webcams, un seul pilote sera donc nécessaire pour toutes. Ce pilote existe déjà, il se nomme &#039;&#039;&#039;uvcvideo&#039;&#039;&#039; ; on le trouve [http://linux-uvc.berlios.de à cette adresse].&lt;br /&gt;
&lt;br /&gt;
Si votre webcam est reconnue par le pilote, les lignes suivantes (à la référence de la webcam près) devraient apparaître si vous tapez &amp;lt;code&amp;gt;dmesg&amp;lt;/code&amp;gt; :&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;uvcvideo: Found UVC 1.00 device Philips SPC 1000NC Webcam (0471:0332)&lt;br /&gt;
usbcore: registered new driver uvcvideo&lt;br /&gt;
USB Video Class driver (v0.1.0)&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Bien qu&#039;elle soit reconnue, elle peut ne pas fonctionner, car le pilote est récent. C&#039;est mon cas (Mandriva 2008.0). J&#039;ai donc installé la dernière version comme expliqué [http://linux-uvc.berlios.de#download sur le site] :&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;$ svn checkout svn://svn.berlios.de/linux-uvc/linux-uvc/trunk&lt;br /&gt;
$ cd trunk&lt;br /&gt;
$ make&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
puis en tant que root :&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;# make install&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Enfin, je retire l&#039;ancien pilote de la mémoire puis charge le nouveau par :&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;# rmmod uvcvideo&lt;br /&gt;
# modprobe uvcvideo&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Et voilà, vous pouvez essayer les logiciels video, en commençant par [http://mxhaard.free.fr/spca50x/Investigation/uvc/luvcview-20070512.tar.gz luvcview] (à compiler soi-même), ou mplayer par la commande :&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;mplayer tv:// -tv driver=v4l2&amp;lt;/div&amp;gt;&lt;br /&gt;
ou en spécifiant plus d&#039;options, comme par exemple :&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;mplayer tv:// -tv driver=v4l2:device=/dev/video1:width=320:height=240:fps=25:outfmt=rgb24&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note : xawtv ne fonctionne pas avec ma webcam, car celle-ci produit une video au format MJPEG, non géré par xawtv.&lt;br /&gt;
&lt;br /&gt;
(mise à jour par [[Utilisateur:LeaJice|LeaJice]] 3 fév 2008 à 21:57 (CET))&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* celles utilisant le module &#039;&#039;&#039;CPiA&#039;&#039;&#039; ([http://webcam.sourceforge.net/ liste]), &lt;br /&gt;
* celles utilisant le modules &#039;&#039;&#039;OV511&#039;&#039;&#039; ([http://alpha.dyndns.org/ov511/cameras.html liste]),&lt;br /&gt;
* de nombreuses webcams sont prises en charge par le pilote &#039;&#039;&#039;spca5xx&#039;&#039;&#039; ([http://mxhaard.free.fr/spca5xx.html liste]).&lt;br /&gt;
Après avoir consulté les listes retenez bien le nom du pilote que vous devrez charger. &lt;br /&gt;
* Les Webcam Philips (Vesta, ToUCam), dont le pilote est maintenant en GPL (sauf la partie, optionnelle, gérant la compression qui permet d&#039;améliorer la fluidité). Voir la [http://www.smcc.demon.nl/webcam/  page de ce pilote], une [http://frlinux.net/?section=systeme&amp;amp;article=52 page sur l&#039;installation de cette webcam sur FRLinux.net (en 2002)] et un article faisant [http://www.steletch.org/spip.php?article39#forum61 le point par rapport à la Mandriva 2007]. &lt;br /&gt;
* la Quickcam Express de Logitech, de 2 manières : &lt;br /&gt;
** une application + module permettant de visionner la video (disponible [http://hotswap.in.tum.de/~acher/quickcam/quickcam.html ici]). La compilation des sources produit 2 fichiers : &amp;lt;tt&amp;gt;quickcamex.o&amp;lt;/tt&amp;gt; (le module) et &amp;lt;tt&amp;gt;quickcam&amp;lt;/tt&amp;gt; (le visionneur). Créez le périphérique par &amp;quot;&amp;lt;tt&amp;gt;mknode /dev/quick c 180 80&amp;lt;/tt&amp;gt;&amp;quot;, chargez le module : &amp;quot;&amp;lt;tt&amp;gt;insmod ./quickcamex.o&amp;lt;/tt&amp;gt;&amp;quot; ; vous pouvez visionner la webcam avec &amp;lt;tt&amp;gt;./quickcam&amp;lt;/tt&amp;gt; (et seulement ce logiciel). Pour faire des photos, utilisez un outil de capture d&#039;écran. &lt;br /&gt;
** un pilote &amp;quot;normal&amp;quot;, i.e. compatible video4linux, disponible [http://qce-ga.sourceforge.net/ ici]. Ce pilote est livré en standard avec la Mandrake 8, il se nomme &amp;lt;tt&amp;gt;mod_quickcam.o&amp;lt;/tt&amp;gt; et est chargé automatiquement au démarrage si la webcam est branchée. Si vous ne l&#039;avez pas, récupérez-le tarball (cf lien précédent), décompressez-le ; un simple &amp;quot;&amp;lt;tt&amp;gt;make&amp;lt;/tt&amp;gt;&amp;quot; le compilera, vous pouvez alors le copier dans &amp;lt;tt&amp;gt;/lib/modules/2.x.y&amp;lt;/tt&amp;gt; pour l&#039;installer. Pour le reste, remplacez &#039;&#039;&#039;ov511&#039;&#039;&#039; par &#039;&#039;&#039;mod_quickcam&#039;&#039;&#039; ci-dessous, car il s&#039;utilise de la même manière.  &lt;br /&gt;
* depuis peu (02/2006) la Logitech Quickcam Messenger en utilisant [http://prdownloads.sourceforge.net/oss-drivers/qc-usb-messenger-1.1.tar.gz?download   qc-usb-messenger-1.1.tar.gz]. L&#039;installation est expliquée en suivant [http://sourceforge.net/project/shownotes.php?group_id=157095&amp;amp;release_id=390811 le lien].&lt;br /&gt;
* d&#039;autres ? [mailto:taz98@altern.org envoyez-nous] vos expériences... &lt;br /&gt;
&lt;br /&gt;
Dans la suite, la partie concernant les logiciels est commune à toutes les webcams, mais pour l&#039;installation des pilotes, je ne vais parler que des WebCams utilisant ov511 car les deux WebCams que j&#039;ai testées (une &#039;&#039;&#039;Trust Sp@ce cam 300 USB&#039;&#039;&#039; et une &#039;&#039;&#039;Creative Video Blaster Webcam 3 USB&#039;&#039;&#039;) utilisent ce pilote.&amp;lt;br /&amp;gt;[mailto:Pierre%20Yves&amp;lt;pierre-yves.b chez wanadoo.fr&amp;gt; Pierre-Yves] me signale que la procedure d&#039;installation est presque identique pour les WebCams utilisant le pilote CPiA (lui il a une &#039;&#039;&#039;Mustek Vcam-300 USB&#039;&#039;&#039;) : il suffit de changer (presque partout cela suffit) : ov511 par cpia.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;u&amp;gt;Prérequis&amp;lt;/u&amp;gt; : Vous devez avoir installé un noyau prenant en charge l&#039;USB (c&#039;est le cas du noyau des Mandrake 7.2, SuSE 7.0, RedHat 7.0 et sans doute de toutes les dernières versions des grandes distributions) :&lt;br /&gt;
&lt;br /&gt;
* soit un noyau 2.2.14 et plus avec le patch USB, voir [/hardware/usbscan.php3#compil_noyau cet article]. &lt;br /&gt;
* soit un noyau 2.4.x, voir [/kernel/kernel24.php3 cet article]. &lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Installation et configuration du noyau ==&lt;br /&gt;
&lt;br /&gt;
Si vous utilisez une distribution récente tout est déjà configuré correctement dans votre noyau, vous pouvez passer à la [#installation_driver suite]. Sinon nous allons devoir recompiler le noyau.&lt;br /&gt;
&lt;br /&gt;
Pour cela, [/kernel/kernel.php3 voyez cet article]. Le mieux est d&#039;utiliser un noyau 2.4.2 (dernière version à la date de rédaction de cet article) : il contient forcement les dernières versions des pilotes mais vous pouvez toujours télécharger celles-ci sur les sites : [http://alpha.dyndns.org/ov511 OV511 : http://alpha.dyndns.org/ov511] ou [http://webcam.sourceforge.net/ CPiA : http://webcam.sourceforge.net]. Pour compiler les pilotes, vous devez, dans la rubrique &amp;lt;tt&amp;gt;USB Support&amp;lt;/tt&amp;gt; activer en tant que modules les options suivantes (au moins) :&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;tt&amp;gt;USB support&amp;lt;/tt&amp;gt; : ça coule de source. &lt;br /&gt;
# &amp;lt;tt&amp;gt;Preliminary USB device filesystem&amp;lt;/tt&amp;gt; : ça ne coute rien et ça pourra vous servir (à reconnaitre un périphérique, et c.). &lt;br /&gt;
# &amp;lt;tt&amp;gt;L&#039;un des pilote suivant : UHCI (Intel PIIX4, VIA, ...)&amp;lt;/tt&amp;gt; (module : &#039;&#039;&#039;uhci.o&#039;&#039;&#039;) ou &amp;lt;tt&amp;gt;UHCI Alternate Driver (JE)&amp;lt;/tt&amp;gt; (module : &#039;&#039;&#039;uhci.o&#039;&#039;&#039;) ou &amp;lt;tt&amp;gt;OHCI (Compaq, iMac, OPTi, SiS, ALi)&amp;lt;/tt&amp;gt; (module : &#039;&#039;&#039;ohci.o&#039;&#039;&#039;) : suivant votre carte mère (regardez l&#039;aide), c&#039;est le pilote des ports USB de votre ordinateur (si vous devez charger un pilote uhci, préférez &amp;lt;tt&amp;gt;UHCI Alternate Driver (JE)&amp;lt;/tt&amp;gt; sauf s&#039;il plante votre ordinateur : il est parait-il plus performant). &lt;br /&gt;
&lt;br /&gt;
et soit :&lt;br /&gt;
&lt;br /&gt;
* vous activez (dans la même catégorie) &amp;lt;tt&amp;gt;USB OV511 Camera&amp;lt;/tt&amp;gt; : si votre WebCam doit utiliser un pilote &#039;&#039;&#039;OV511&#039;&#039;&#039; &lt;br /&gt;
* dans la catégorie &amp;lt;tt&amp;gt;Multimedia devices&amp;lt;/tt&amp;gt;, sous catégorie &amp;lt;tt&amp;gt;Video For Linux&amp;lt;/tt&amp;gt; : vous activez &amp;lt;tt&amp;gt;CPiA Video For Linux&amp;lt;/tt&amp;gt; et &amp;lt;tt&amp;gt;CPiA USB Lowlevel&amp;lt;/tt&amp;gt; dans le cas ou votre WebCam utilise un pilote &#039;&#039;&#039;CPiA&#039;&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
Enfin vous compilez et installez ce nouveau noyau. Un petit reboot et tout ce passera bien.&lt;br /&gt;
&lt;br /&gt;
== Installation et configuration des pilotes ==&lt;br /&gt;
&lt;br /&gt;
Si l&#039;USB, n&#039;est pas pris en charge par votre distribution il faut maintenant charger le pilote USB de votre carte mère, c&#039;est soit : &#039;&#039;&#039;ohci&#039;&#039;&#039; soit : &#039;&#039;&#039;uhci&#039;&#039;&#039;. Tapez :&lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;90%&amp;quot; bgcolor=&amp;quot;#fcfcd8e&amp;quot;&lt;br /&gt;
| &amp;lt;tt&amp;gt;modprobe usbcore&amp;lt;/tt&amp;gt; (sans doute inutile)&amp;lt;tt&amp;gt;&amp;lt;br /&amp;gt;modprobe ohci&amp;lt;/tt&amp;gt; ou &amp;lt;tt&amp;gt;modprobe uhci&amp;lt;/tt&amp;gt; (inutile si votre ditribution prend en charge l&#039;USB)&amp;lt;tt&amp;gt;&amp;lt;br /&amp;gt;modprobe videodev&amp;lt;/tt&amp;gt; (sans doute inutile)&amp;lt;tt&amp;gt;&amp;lt;br /&amp;gt;modprobe ov511&amp;lt;/tt&amp;gt; ou &amp;lt;tt&amp;gt;modprobe cpia&amp;lt;br /&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Pour automatiser ce chargement au démarage de votre machine, il y a deux solutions envisageables :&lt;br /&gt;
&lt;br /&gt;
* vous insésez les lignes précédantes dans un script lancé au démarage de votre machine (exemple : à la fin de /etc/rc.d/rc.local) &lt;br /&gt;
* si vous n&#039;avez qu&#039;un seul périphérique video, vous pouvez ajouter en fin du fichier /etc/modules.conf (parfois aussi nommé /etc/conf.modules) la ligne : &lt;br /&gt;
{| width=&amp;quot;90%&amp;quot; bgcolor=&amp;quot;#fcfcd8&amp;quot;&lt;br /&gt;
| &amp;lt;tt&amp;gt;alias char-major-81 ov511 &amp;lt;/tt&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
 ou &lt;br /&gt;
{| width=&amp;quot;90%&amp;quot; bgcolor=&amp;quot;#fcfcd8&amp;quot;&lt;br /&gt;
| height=&amp;quot;17&amp;quot; | &amp;lt;tt&amp;gt;alias char-major-81 cpia &amp;lt;/tt&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
 ce qui demande au chargeur de modules de charger ov511 (ou cpia) si l&#039;on accède à un périphérique dont le numéro de majeur est 81 (ie: un /dev/video). &lt;br /&gt;
&lt;br /&gt;
A ce stade votre WebCam est prise en charge par le noyau, mais il reste à se procurer de quoi visualiser les videos en provenance de celle-ci.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note(1) : &#039;&#039;&#039;Pour les WebCams OV511, vérifiez que votre WebCam est correctement détectée, tapez :&lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;90%&amp;quot; bgcolor=&amp;quot;#fcfcd8&amp;quot;&lt;br /&gt;
| &amp;lt;tt&amp;gt;[root@duron]# tail -n 5 /var/log/messages&amp;lt;br /&amp;gt;Mar 8 13:55:50 duron kernel: usb.c: registered new driver ov511&amp;lt;br /&amp;gt;&#039;&#039;&#039;Mar 8 13:55:50 duron kernel: ov511.c: USB OV511+ camera found&#039;&#039;&#039;&amp;lt;br /&amp;gt;Mar 8 13:55:50 duron kernel: ov511.c: camera: Creative Labs WebCam 3&amp;lt;br /&amp;gt;Mar 8 13:55:50 duron kernel: ov511.c: Sensor is an OV7620&amp;lt;br /&amp;gt;Mar 8 13:55:50 duron kernel: ov511.c: ov511 driver version 1.34 registered &amp;lt;/tt&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
 Si vous voyez une ligne du type de celle en gras c&#039;est que votre WebCam est reconnue, sinon c&#039;est que quelque chose manque ou que votre WebCam n&#039;est pas prise en charge par ce module (essayez l&#039;autre, vérifiez dans les listes de matériels pris en charge). &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note(2) : &#039;&#039;&#039;Pour les WebCams OV511, si vous avez plusieurs WebCams OV511, il en faut préciser le nombre sur la ligne de commande, si vous avez 2 WebCams :&lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;90%&amp;quot; bgcolor=&amp;quot;#fcfcd8&amp;quot;&lt;br /&gt;
| &amp;lt;tt&amp;gt;[root@duron]# modprobe ov511 cams=2&amp;lt;/tt&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
 La première WebCam détectée sera &amp;lt;tt&amp;gt;/dev/video0&amp;lt;/tt&amp;gt; la seconde &amp;lt;tt&amp;gt;/dev/video1&amp;lt;/tt&amp;gt; et c. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note(3) : &#039;&#039;&#039;Il est possible (non testé) de charger en meme temps un pilote ov511, cpia et bttv chacun des périphériques détectés sera accessible via un /dev/video&#039;&#039;xx&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== W3Cam ==&lt;br /&gt;
&lt;br /&gt;
W3Cam est un programme qui permet de diffuser à la demande les images sur votre serveur WEB (vous devez avoir installé Apache (par exemple) pour pouvoir l&#039;utiliser). Mais le paquetage W3Cam permet aussi de tester rapidement sa WebCam car il contient le programme (fonctionnant en ligne de commande) : vidcat qui lui ne nécessite pas d&#039;installer Apache.&lt;br /&gt;
&lt;br /&gt;
=== Compilation et installation ===&lt;br /&gt;
&lt;br /&gt;
Comme toujours on peut récupérer un paquetage précompilé pour sa distribution, mais je préfère compiler moi même ce type de programme : je n&#039;expliquerais pas comment faire, mais vous pouvez le faire en allant sur [http://rpmfind.net/ rpmfind.net] par exemple. Nous allons récupérer les sources là : http://www.hdk-berlin.de/~rasca/w3cam/&lt;br /&gt;
&lt;br /&gt;
Puis on décompresse le tout et on compile :&lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;90%&amp;quot; bgcolor=&amp;quot;#fcfcd8&amp;quot;&lt;br /&gt;
| &amp;lt;tt&amp;gt;tar xzf w3cam-0.6.6.tar.gz&amp;lt;br /&amp;gt;cd w3cam&amp;lt;br /&amp;gt;./configure&amp;lt;br /&amp;gt;make&amp;lt;br /&amp;gt;make install &amp;lt;/tt&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Maintenant tout est installé dans /usr/local/bin et /usr/local/cgi-bin, n&#039;oubliez pas d&#039;ajouter /usr/local/bin à votre PATH.&lt;br /&gt;
&lt;br /&gt;
Faisons un petit test :&lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;90%&amp;quot; bgcolor=&amp;quot;#fcfcd8&amp;quot;&lt;br /&gt;
| &amp;lt;tt&amp;gt;vidcat -d /dev/video0 -s 320x240 -f jpeg &amp;gt; ~/essai.jpeg&amp;lt;/tt&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt; Essayer de regarder le fichier ~/essai.jpeg. S&#039;il est un peut sombre, c&#039;est que les réglages automatiques n&#039;ont pas pu se faire à la première prise de vue, essayez d&#039;en faire d&#039;autre : l&#039;image s&#039;éclaircie petit à petit. Ça y est votre WebCaebc fonctionne sous Linux !&lt;br /&gt;
&lt;br /&gt;
=== Votre tête sur le Web ! ===&lt;br /&gt;
&lt;br /&gt;
Vous avez acheté une webcam, ce n&#039;est certainement pas pour prendre des photos... Une première solution : mettez votre tête animée sur le Web. Pour cela vous devez avoir installé Apache sur votre machine. Puis copiez le contenu de /usr/local/cgi-bin vers le répertoire des cgi d&#039;apache (sur la Mandrake 7.2 c&#039;est /var/www/cgi-bin, sur la 7.0 c&#039;est /home/httpd/cgi-bin) :&lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;90%&amp;quot; bgcolor=&amp;quot;#fcfcd8&amp;quot;&lt;br /&gt;
| &amp;lt;tt&amp;gt;cp -R /usr/local/cgi-bin/* /var/www/cgi-bin&amp;lt;/tt&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Puis, éditez le fichier : /var/www/cgi-bin/w3cam.cgi.scf. Ci-après vous trouverez le mien :&lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;90%&amp;quot; bgcolor=&amp;quot;#fcfcd8&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# SCFF/sh &amp;lt;/nowiki&amp;gt;&amp;lt;br /&amp;gt; # Ce fichier doit se trouver dans le même répertoire &amp;lt;br /&amp;gt; # que w3cam.cgi &amp;lt;br /&amp;gt; # Décommentez et renseignez les &amp;lt;br /&amp;gt; # lignes suivantes si vous souhaitez &amp;lt;br /&amp;gt; # modifier les couleurs de fond et &amp;lt;br /&amp;gt; # celles d&#039;avant plan &amp;lt;br /&amp;gt; # background=#ffffff &amp;lt;br /&amp;gt; # foreground=#000000 &amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; # Ce paramètre existe mais je &amp;lt;br /&amp;gt; # ne sait pas à quoi il sert &amp;lt;br /&amp;gt; # source_url=&amp;quot;http://home.pages.de/~rasca/w3cam/&amp;quot; &amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; # Si vous souhaitez utiliser une feuille de style &amp;lt;br /&amp;gt; # décomentez la ligne suivantes &amp;lt;br /&amp;gt; # stylesheet=&amp;quot;/~rasca/w3cam/w3cam.css&amp;quot; &amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; # mettre protected à 1 permet d&#039;éviter &amp;lt;br /&amp;gt; # de prendre en compte les champs du formulaire&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;protected=0 &amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; # mettez ici votre périphérique video &amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;device = &amp;quot;/dev/video&amp;quot; &amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; # taille d&#039;image en provenance de la WebCam (ou la carte TV) &amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;width=320&amp;lt;br /&amp;gt; height=240 &amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; # pour avoir de jpeg en couleurs (0 : noir et blanc) color=1 &amp;lt;br /&amp;gt; # temps à attendre entre deux images &amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;refresh=&amp;quot;0.1&amp;quot; &amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; # norm, 0=PAL, 1=NTSC, 2=SECAM &amp;lt;br /&amp;gt; # utile uniquement avec une carte TV #norm=&amp;quot;0&amp;quot; &amp;lt;br /&amp;gt; # input, 0=TV, 1=Composite1, 2=Composite2, 3=S-Video &amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; input=&amp;quot;1&amp;quot; # avec une WebCam (évite les bouton unutiles avec une WebCam)&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; # format, 1=PPM, 2=JPEG, 3=PNG &amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;format=&amp;quot;2&amp;quot; &amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; # qualité des jpeg : 1-100&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; quality=&amp;quot;50&amp;quot; &amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; # mode, 0=plain, 1=gui (pour avoir un control sur w3cam) &amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;mode=&amp;quot;1&amp;quot; &amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; # attendre 0,5 secondes avant de commencer la capture &amp;lt;br /&amp;gt; # (ie : 500000 microsecondes) &amp;lt;br /&amp;gt; # usleep=&amp;quot;500000&amp;quot; &amp;lt;br /&amp;gt; # fréquence du tunner en 1/16 MHz &amp;lt;br /&amp;gt; # uniquement pour les carte TV &amp;lt;br /&amp;gt; # freq=&amp;quot;9076&amp;quot; &amp;lt;br /&amp;gt; # liste des fréquences &amp;lt;br /&amp;gt; # freqlist=&amp;quot;878;9076;9844;9460&amp;quot; &amp;lt;br /&amp;gt; # Pour mettre l&#039;heures sur les images de votre WebCam &amp;lt;br /&amp;gt; # les mots clefs ne sont utilisables que dans ce fichier &amp;lt;br /&amp;gt; # vous &#039;&#039;&#039;devez&#039;&#039;&#039; renseigner les champ &amp;quot;font&amp;quot; et &amp;quot;timestamp&amp;quot; &amp;lt;br /&amp;gt; # &amp;lt;br /&amp;gt; # font = /usr/local/X11/lib/ttfonts/arial.ttf &amp;lt;br /&amp;gt; # font_size = 12 &amp;lt;br /&amp;gt; # &amp;lt;br /&amp;gt; # Pour la chaine de format de l&#039;heure voir la manpage : strftime(3)&amp;lt;br /&amp;gt; # timestamp = &amp;quot;Berlin, %H:%M %d.%m.%Y&amp;quot; &amp;lt;br /&amp;gt; # timestamp_border = 2 &amp;lt;br /&amp;gt; # &amp;lt;br /&amp;gt; # blend value: 1 .. 100 &amp;lt;br /&amp;gt; # timestamp_blend = 60 &amp;lt;br /&amp;gt; # alignment: 0 = upper left corner, 1 = upper right corner, &amp;lt;br /&amp;gt; # 2 = lower left corner, 3 = lower right corner &amp;lt;br /&amp;gt; # timestamp_align = 1 &amp;lt;/tt&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt; Puis lancez votre navigateur web préféré (je crois que cela ne fonctionne pas avec MS IE mais je n&#039;ai pas pu essayer...) et tapez l&#039;url suivante : http://localhost/cgi-bin/w3cam.cgi : ça y est ça bouge !&lt;br /&gt;
&lt;br /&gt;
Pour acceder à votre webcam depuis le net il suffit, dans l&#039;adresse ci-dessus, de remplacer localhost par votre ip (que l&#039;on peut obtenir en faisant ifconfig ppp0 si l&#039;on est connecté via pppd) et c&#039;est tout. &#039;&#039;&#039;Note : &#039;&#039;&#039;Si l&#039;image que vous voyez semble provenir de Canal+ sans décodeur, c&#039;est souvant que vous demandez une capture dans une résolution qui n&#039;est pas prise en charge soit par le pilote soit par la WebCam.&lt;br /&gt;
&lt;br /&gt;
== Motion ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;partie écrite par : [mailto:dclatot@free.fr Dimitri].&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Vous suspectez des fantômes de venir hanter votre maison en votre absence sans jamais les avoir vus et bien voici ce qu&#039;il vous faut. Motion permet de détecter les mouvements faits devant votre webcam et de les enregistrer. Plus d&#039;infos:&lt;br /&gt;
&lt;br /&gt;
http://www.lavrsen.dk/twiki/bin/view/Motion/WebHome&lt;br /&gt;
&lt;br /&gt;
=== Compilation et installation ===&lt;br /&gt;
&lt;br /&gt;
L&#039;auteur propose le rpm compilé ou les sources que l&#039;on peut trouver ici: http://motion.technolust.cx/download/. Voici comment installer les sources :&lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;90%&amp;quot; bgcolor=&amp;quot;#FCFCD8&amp;quot;&lt;br /&gt;
| &amp;lt;tt&amp;gt;$ tar zxvf motion-2.X.X.tar.gz&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;$ cd motion-2.X.X&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;$ ./configure &#039;&#039;(ajoutez ici : &#039;&#039;--prefix=/usr&amp;lt;/tt&amp;gt;&#039;&#039; si vous voulez l&#039;installer dans /usr et pas /usr/local comme c&#039;est le cas par défaut)&#039;&#039;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;$ make&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;$ su&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;Password: xxxxxxx&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# make install &amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Big Brother is watching You ===&lt;br /&gt;
&lt;br /&gt;
motion s&#039;installe par défaut dans /usr/local/bin&lt;br /&gt;
&lt;br /&gt;
Pour tester le fonctionnement avec votre webcam, lancer:&lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;90%&amp;quot; bgcolor=&amp;quot;#FCFCD8&amp;quot;&lt;br /&gt;
| &amp;lt;tt&amp;gt;[dimitri@micro quickcam]$/usr/local/bin/motion&amp;lt;/tt&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Motion crée à partir du répertoire où vous avez lancé l&#039;exécutable (ici quickcam), une arborescence avec l&#039;année, le mois, le jour, l&#039;heure et la minute de l&#039;enregistrement. A l&#039;intérieur du dernier sous-répertoire on trouve les images jpeg datées avec en encadré les changements détectés. [http://motion.technolust.cx/examples/index.html Exemples] sur le site de Motion.&lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;90%&amp;quot; bgcolor=&amp;quot;#FCFCD8&amp;quot;&lt;br /&gt;
| &amp;lt;tt&amp;gt;[dimitri@micro quickcam]$ ls -a 2001/05/26/09/57/&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;./ ../ 36-00.jpg 36-01.jpg 36-02.jpg&amp;lt;/tt&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Maintenant que vous avez vu que tout fonctionne, vous allez pouvoir le paramétrer plus finement. Pour cela, vous avez 2 possibilités, par la ligne de commande (man motion) ou par un fichier de configuration &#039;motion.conf&#039; à placer dans le même répertoire à partir duquel vous exécutez motion.&lt;br /&gt;
&lt;br /&gt;
Exemple: Exécute motion sous forme de démon avec des images en ppm&lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;90%&amp;quot; bgcolor=&amp;quot;#FCFCD8&amp;quot;&lt;br /&gt;
| &amp;lt;tt&amp;gt;[dimitri@micro quickcam]$ motion -D -p&amp;lt;/tt&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Vous trouverez un exemple de fichier de configuration dans le répertoire /usr/local/examples/motion-2.X.X .&lt;br /&gt;
&lt;br /&gt;
Motion offre beaucoup de possibilités de configuration, comme stocker les évènements dans une base MySQL, vous envoyer des mails ou SMS pour vous prévenir, ou faire une vidéo des images capturées.&lt;br /&gt;
&lt;br /&gt;
== D&#039;autres programmes ==&lt;br /&gt;
&lt;br /&gt;
Ici, je vais mettre une liste de programmes qui peuvent utiliser votre WebCam.&lt;br /&gt;
&lt;br /&gt;
* [http://www.strusel007.de/linux/xawtv/ Xawtv] : prévu pour regarder la TV avec Linux, ce programme fonctionne aussi parfois avec les WebCams (par exemple ça marche avec ma Trust Space Cam 300 mais pas avec ma Creative WebCam 3 !). &lt;br /&gt;
* [http://www-mice.cs.ucl.ac.uk/multimedia/software/vic/ vic] : programme de video conférence sous Linux (existe sur la plupart des plateformes : Windows, Solaris, Mac, et...), sont fonctionnement n&#039;est pas forcément évident mais il donne de bon résulat. &lt;br /&gt;
* [http://www.openh323.org/ ophone] : programme de visiophone (non testé : un testeur ?). &lt;br /&gt;
* [http://www.smcc.demon.nl/camstream/ camstream] : un bon remplacement pour XawTV (fonctionne avec toutes mes WebCams, mais c&#039;est moins fluide). &lt;br /&gt;
* [http://ascii.dyne.org/ hasciicam] : utiliser votre WebCam dans un terminal en ASCII (ça marche! et on se reconnait!) &lt;br /&gt;
* [http://www.freewebfone.com/ FreeWebFone] : le nom parle tout seul (Dimitri : &amp;quot;J&#039;ai testé le programme FreeWebFone sous Linux avec un ami qui était lui sous windows. Dans les 2 versions de ce produit, le processeur est pris à 100% lors de son utilisation, néanmoins l&#039;application ne nécessite aucun réglage particulier et ne fonctionne pas trop mal.&amp;quot;).&lt;br /&gt;
* [http://cu30.sourceforge.net/ qVix] : [mailto:Pierre%20Yves&amp;lt;pierre-yves.b@wanadoo.fr&amp;gt; Pierre-Yves] l&#039;a testé mais n&#039;a pas réussi à le faire fonctionner, moi non plus : peut-être faut-il attendre une meilleur version.&lt;br /&gt;
* [http://www.pangea.org/~mavilar/qseeme/qseeme.html Q-SeeMe] : programme de video conférence utilisant le protocol CU-See-Me. &lt;br /&gt;
* [http://www.ekiga.org ekiga] : au départ c&#039;est un clone de NetMeeting, mais c&#039;est maintenant un softphone complet utilisant les protocoles sip et h263.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;merci&amp;quot;&amp;gt;Cette page est issue de la documentation &#039;pré-wiki&#039; de Léa a été convertie avec HTML::WikiConverter. Elle fut créée par Frédéric Bonnaud.&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Copy|2004|[[Utilisateur:Fred|Fred]], Dimitri Clatot|CC-BY-SA}}&lt;/div&gt;</summary>
		<author><name>LeaJice</name></author>
	</entry>
	<entry>
		<id>https://lea-linux.org/docs/index.php?title=Intro-wannapenguin&amp;diff=16806</id>
		<title>Intro-wannapenguin</title>
		<link rel="alternate" type="text/html" href="https://lea-linux.org/docs/index.php?title=Intro-wannapenguin&amp;diff=16806"/>
		<updated>2009-02-27T11:03:26Z</updated>

		<summary type="html">&lt;p&gt;LeaJice : /* Archlinux */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Introduction à Linux]]&lt;br /&gt;
= Un manchot sur ma machine =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;leatitre&amp;quot;&amp;gt;Un manchot sur ma machine&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;leapar&amp;quot;&amp;gt;par [http://groupe.lea-linux.org/slack/alive/ Seb]&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;leadesc&amp;quot;&amp;gt;Petit tour d&#039;horizon des distributions GNU/Linux.&amp;lt;/div&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
Cet article a été conçu suite à la grande récurrence sur le forum de fils de discussion demandant des conseils pour choisir une première ou seconde distribution. Il n&#039;est en effet pas toujours évident de choisir une distribution qui convienne à ses attentes, le champ d&#039;investigation étant plus que vaste ([http://distrowatch.com Distrowatch] recense plus de 300 distributions actives), et les querelles de clocher — même courtoises — courantes.&lt;br /&gt;
&lt;br /&gt;
Ce qui va suivre a pour objectif de vous renseigner sur les caractéristiques des principales distributions utilisées d&#039;après ce qui ressort du forum de Léa. Ne vous attendez cependant pas à apprendre ici quelle distribution est la meilleure car chacune compte ses inconditionnels, signe s&#039;il en est qu&#039;elles ont toutes des qualités qui leur sont propres (sans ça, ce site s&#039;appellerait « &amp;lt;distribution&amp;gt; entre amis » ;) ). Nous nous cantonnerons donc à une description technique et neutre autant que possible.&lt;br /&gt;
&lt;br /&gt;
== Lire cette présentation ==&lt;br /&gt;
&lt;br /&gt;
Toujours dans un souci d&#039;objectivité − inaccessible étoile ! — nous avons opté pour une présentation en un formulaire. Cela garantit en effet un traitement égal à chacune des distributions tout en explicitant avec clarté les caractéristiques de celles-ci. Voici une notice qui vous indiquera ce que vous trouverez dans chacun des points abordés par le formulaire.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Par :&#039;&#039;&#039; &#039;&#039;% mentione l&#039;auteur de la présentation avec éventuellement une adresse électronique où vous pourrez le joindre.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Site officiel :&#039;&#039;&#039; &amp;lt;url_du_site&amp;gt; &#039;&#039;% ici est indiquée l&#039;adresse du site officiel de la distribution. Vous y trouverez des informations complémentaires et pourrez y télécharger celle-ci.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Type de distribution :&#039;&#039;&#039; binaire | source &#039;&#039;% cela vous indiquera à quel type de distribution vous avez affaire.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;source : les applications des distributions sources doivent êtres compilées (parfois très longuement) en préalable à leur utilisation. En contre-partie celles-ci sont optimisées pour votre configuration.&#039;&#039;&lt;br /&gt;
* &#039;&#039;binaire : les programmes installés sont immédiatement utilisables mais génériques. Les avantages en sont avant tout que ces distributions sont rapides à mettre en place et ne nécessitent pas d&#039;installer d&#039;outils de compilation.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Autonomie :&#039;&#039;&#039; 0 | 1 | 2 &#039;&#039;% cela vous renseignera sur ce que vous pouvez attendre de la distribution — &amp;lt;u&amp;gt;dans le meilleur des cas&amp;lt;/u&amp;gt; — quant à la gestion du matériel par le système.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;0 : vous devrez tout gérer manuellement, déclaration du matériel et configuration.&#039;&#039;&lt;br /&gt;
* &#039;&#039;1 : la distribution détecte automatiquement le matériel mais vous laisse le configurer.&#039;&#039;&lt;br /&gt;
* &#039;&#039;2 : la distribution détecte et configure automatiquement votre matériel.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Option(s) de configuration :&#039;&#039;&#039; LC | IG | LC/IG+ | LC+/IG &#039;&#039;% cela vous informera sur la méthode de configuration pour laquelle la distribution a été pensée.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;LC : &amp;quot;Ligne de Commande&amp;quot;, la distribution est conçue pour être gérée via le shell et l&#039;édition de ses fichiers.&#039;&#039;&lt;br /&gt;
* &#039;&#039;IG : &amp;quot;Interface Graphique&amp;quot;, la distribution est prévue pour être configurée via des outils graphiques.&#039;&#039;&lt;br /&gt;
* &#039;&#039;LC/IG+ | LC+/IG : lorsque les deux modes de configuration sont possibles un « + » indique celui qui est prépondérant par rapport à la conception de la distribution.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Petite configuration :&#039;&#039;&#039; -1 | 0 | 1 &#039;&#039;% pour les machines qui ont peu de ressources, indique à quel degré la distribution convient ou non à ce profil.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;-1 : impossible sinon infernal.&#039;&#039;&lt;br /&gt;
* &#039;&#039;0 : possible mais pas pensé pour ça.&#039;&#039;&lt;br /&gt;
* &#039;&#039;1 : cadre avec la conception de la distribution.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;note&amp;quot;&amp;gt;Notez que ces indications sont largement basées sur la philosophie de la distribution en question, l&#039;obtention d&#039;une solution légère passant avant toute chose par un choix judicieux d&#039;interface graphique (préférez les gestionnaires de fenêtres tels que Fluxbox, FVWM, ou Window Maker aux environnements de bureau &amp;quot;lourds&amp;quot; comme KDE et GNOME.).&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Gestionnaire de paquets :&#039;&#039;&#039; &#039;&#039;% nom du gestionnaire de paquets et description succinte de son utilisation.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Philosophie d&#039;utilisation :&#039;&#039;&#039; &#039;&#039;% description rapide de la philosophie de la distribution selon ce qu&#039;il ressort du site officiel.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;note&amp;quot;&amp;gt;Concernant une utilisation de type serveur, traditionnellement vous serez orienté sur une Debian ou une Slackware. Sachez que dans les faits, la plupart des distributions peuvent se prêter à cet usage, le tout étant pour vous de savoir épurer votre système afin de pouvoir le sécuriser efficacement (ce qui est évidemment plus facile à faire sur des distributions se configurant en ligne de commande).&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Quelques articles relatifs disponibles sur Léa :&#039;&#039;&#039; &#039;&#039;% les éventuels articles de Léa consacrés à la distribution et susceptibles de vous épauler dans sa mise en place.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Trouver la grenouille :&#039;&#039;&#039; &#039;&#039;% les distributions étant très souvent anglophones, quelques adresses pour joindre les communautés françaises de la distribution.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Les Neufs samouraïs de Léa ==&lt;br /&gt;
=== Ubuntu ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Par [http://www.ubuntu-fr.org Régis].&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Site officiel :&#039;&#039;&#039; http://www.ubuntu.com&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Type de distribution :&#039;&#039;&#039; binaire.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Autonomie :&#039;&#039;&#039; 2.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Option(s) de configuration :&#039;&#039;&#039; LC/IG+.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Petite configuration :&#039;&#039;&#039; -1.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Gestionnaire de paquets :&#039;&#039;&#039; Ubuntu est distribution basée sur Debian, elle utilise donc &amp;lt;code&amp;gt;dpkg&amp;lt;/code&amp;gt; qui est l&#039;outil en ligne de commande chargé de l&#039;installation, la création, la suppression et la gestion des paquets Debian .deb. Il permet aussi la gestion de paquets Debian en provenance de sources extérieures aux dépôts &amp;lt;code&amp;gt;apt&amp;lt;/code&amp;gt;. Pour l&#039;installation de paquets en mode graphique, il existe l&#039;outil &amp;lt;code&amp;gt;GDebi&amp;lt;/code&amp;gt; qui est une interface graphique de &amp;lt;code&amp;gt;dpkg&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Philosophie d&#039;utilisation :&#039;&#039;&#039;&lt;br /&gt;
Ubuntu est une distribution GNU/Linux basée sur Debian qui privilégie l&#039;environnement GNOME et destinée à proposer un système convivial, ergonomique, libre et gratuit pour le grand public. Ubuntu est donc une distribution facile d&#039;installation et d&#039;utilisation. Il existe également une version serveur, mais on préférera généralement d&#039;autres distributions pour cette tâche.&lt;br /&gt;
&lt;br /&gt;
Si vous êtes totalement novice en matière de GNU/Linux, et même d&#039;ordinateurs, cette distrib&#039; vous permettra de faire vos premiers pas de façon très rassurante. De même, si vous êtes un utilisateur expérimenté de GNU/Linux qui n&#039;a pas beaucoup de temps pour configurer son système, mais qui veut un système fonctionnel, Ubuntu peut être faite pour vous.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Quelques articles relatifs disponibles sur Léa :&#039;&#039;&#039; [http://lea-linux.org/software/soft_gere/apt_dpkg.html Apt, dpkg et paquets Debian].&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Trouver la grenouille :&#039;&#039;&#039;&lt;br /&gt;
Rendez-vous sur le site de la communauté francophone des utilisateurs d&#039;Ubuntu : http://www.ubuntu-fr.org&lt;br /&gt;
&lt;br /&gt;
=== Mandriva (anciennement Mandrake)===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Par [mailto:ceric35@hotmail.com ceric35]&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Site officiel :&#039;&#039;&#039; http://www.mandrivalinux.com&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Type de distribution :&#039;&#039;&#039; binaire.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Autonomie :&#039;&#039;&#039; 2.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Option(s) de configuration :&#039;&#039;&#039; LC/IG+.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Petite configuration :&#039;&#039;&#039; 0.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Gestionnaire de paquets :&#039;&#039;&#039; &amp;lt;code&amp;gt;rpmdrake&amp;lt;/code&amp;gt; est l&#039;interface graphique des outils &amp;lt;code&amp;gt;urpm*&amp;lt;/code&amp;gt; (User RPM) servant à la gestion des packages Mandriva. Il permet d&#039;installer facilement n&#039;importe quel package et gère automatiquement les dépendances associées. En plus des sources locales (CD), il est possible d&#039;ajouter des sources distantes pour un choix de logiciels plus vaste.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Philosophie d&#039;utilisation :&#039;&#039;&#039; Mandriva Linux a été créée dans le but de permettre au plus grand nombre d&#039;utiliser facilement un système GNU/Linux. C&#039;est une distribution française. Elle intègre de nombreux outils graphiques visant à simplifier au maximum l&#039;administration de ce système. Mandriva est donc une distribution facile d&#039;installation et d&#039;utilisation, mais s&#039;oriente plus vers les stations de travail que les serveurs (sauf à se procurer la très onéreuse version dédiée à cet usage).&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Si vous êtes totalement novice en matière de GNU/Linux, et même d&#039;ordinateurs, cette distrib&#039; vous permettra de faire vos premiers pas de façon très rassurante. De même, si vous êtes un utilisateur expérimenté de GNU/Linux qui n&#039;a pas beaucoup de temps pour configurer son système, mais qui veut un système fonctionnel, Mandriva peut être faite pour vous.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Quelques articles relatifs disponibles sur Léa :&#039;&#039;&#039; [http://lea-linux.org/software/inst_mdk10.html Installation de Mandrakelinux] [http://lea-linux.org/cached/index/Software-soft_gere-rpm.html RPM, URPM et apt-get].&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Trouver la grenouille :&#039;&#039;&#039;&lt;br /&gt;
La distribution étant française : http://www.mandrivalinux.com&lt;br /&gt;
&lt;br /&gt;
=== Debian ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Par [mailto:morganr@altern.org Morgan]&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Site officiel :&#039;&#039;&#039; http://www.debian.org&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Type de distribution :&#039;&#039;&#039; binaire.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Autonomie :&#039;&#039;&#039; 1.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Option(s) de configuration :&#039;&#039;&#039; LC.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Petite configuration :&#039;&#039;&#039; 1.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Gestionnaire de paquets :&#039;&#039;&#039; &amp;lt;code&amp;gt;Apt&amp;lt;/code&amp;gt; (Advanced Packaging Tool). Il s&#039;agit d&#039;une surcouche à l&#039;utilitaire de base &amp;lt;code&amp;gt;dpkg&amp;lt;/code&amp;gt;, qui permet entre autres de gérer les dépendances. Parmi les nombreuses possibilités d&#039;&amp;lt;code&amp;gt;apt&amp;lt;/code&amp;gt;, les plus utilisées sont celles offertes par les commandes suivantes:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;apt-cache search&amp;lt;/code&amp;gt; pour faire une recherche dans la liste de paquetages disponibles,&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;apt-get install&amp;lt;/code&amp;gt; pour installer un, ou des paquetages,&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;apt-get update&amp;lt;/code&amp;gt; pour mettre à jour la liste des paquetages,&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;apt-get upgrade&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;apt-get  dist-upgrade&amp;lt;/code&amp;gt; pour mettre à jour les paquetages installés.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Philosophie d&#039;utilisation :&#039;&#039;&#039; Les priorités de Debian sont la stabilité et l&#039;efficacité, et non pas la facilité d&#039;utilisation. Afin de laisser la plus grande marge de manœuvre possible à l&#039;utilisateur, n&#039;est installé par défaut que ce qui est indispensable. La gestion des paquetages est aisée, le reste se fait à la main. Trois versions sont disponibles selon les goûts et le type d&#039;utilisation:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;stable&#039;&#039; : particulièrement stable et sécurisée. Les paquetages ont été testés et retestés pendant au moins 6 mois avant d&#039;être figés. Il s&#039;agit donc de versions parfois très anciennes de ces paquetages.&lt;br /&gt;
* &#039;&#039;testing&#039;&#039; : bon compromis pour une utilisation de bureau. Des paquetages assez récents, mais parfois quelques ennuis.&lt;br /&gt;
* &#039;&#039;unstable&#039;&#039; : des paquetages très récents et non-testés. Se destine plutôt à des utilisateurs avertis.&lt;br /&gt;
&lt;br /&gt;
Même si sa réputation de difficulté est quelque peu exagérée, c&#039;est plutôt une distribution à conseiller soit à des gens qui ont déjà quelques connaissances en GNU/Linux, soit à des débutants curieux de comprendre le fonctionnement du système et qui auront pris la peine de s&#039;armer d&#039;une bonne documentation.&amp;lt;br&amp;gt;&lt;br /&gt;
Cette distrib&#039; est très distincte des autres car :&amp;lt;br&amp;gt;&lt;br /&gt;
- C&#039;est la plus communautaire. Des milliers des personnes en assurent la maintenance.&amp;lt;br&amp;gt;&lt;br /&gt;
- C&#039;est celle qui intègre le plus de programmes.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Quelques articles relatifs disponibles sur Léa :&#039;&#039;&#039; [http://lea-linux.org/software/soft_gere/apt_dpkg.html Apt, dpkg et paquets Debian].&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Trouver la grenouille :&#039;&#039;&#039; Consultez le [http://lea-linux.org/ressources/PAFDebian.html Petit Annuaire Francophone Debian].&lt;br /&gt;
&lt;br /&gt;
=== Fedora ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Par [mailto:Fedora@FamilleCollet.com Remi]&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Sites officiels :&#039;&#039;&#039; http://www.fedora.redhat.com, http://www.fedoraforum.org.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Type de distribution :&#039;&#039;&#039; binaire.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Autonomie :&#039;&#039;&#039; 2.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Option(s) de configuration :&#039;&#039;&#039; LC/IG+.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Petite configuration :&#039;&#039;&#039; 0.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Gestionnaire de paquets :&#039;&#039;&#039; Fedora utilise les packages RPM, packages qui sont très simples à installer. Pour encore plus de facilité, des gestionnaires de packages tels &amp;lt;code&amp;gt;Up2date&amp;lt;/code&amp;gt; (par défaut), &amp;lt;code&amp;gt;Yum&amp;lt;/code&amp;gt; (en standard), &amp;lt;code&amp;gt;Apt-rpm&amp;lt;/code&amp;gt; ou &amp;lt;code&amp;gt;Smart&amp;lt;/code&amp;gt; furent créés afin de résoudre les problèmes de dépendances manquantes. Ces outils (qui disposent aussi d&#039;interfaces graphiques) récupèrent les bibliothèques nécessaires à d’autres paquets sur le réseau, à partir de dépôts et se chargent d&#039;installer ou supprimer des logiciels, mettre à jour le système automatiquement, et ce, très facilement.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Philosophie d&#039;utilisation :&#039;&#039;&#039; Fedora offre un confort et une facilité d&#039;installation, d&#039;utilisation, d&#039;administration poussés et est accessible à tous, qu&#039;ils soient confirmés sous GNU/Linux ou débutants. RedHat utilise Fedora comme plan de travail pour ses propres solutions professionnelles, en y incorporant les dernières technologies du monde GNU/Linux. Elle est idéale pour ceux qui veulent disposer de mises à jour rapides et des derniers correctifs de sécurité. Le projet sort deux à trois nouvelles versions par an.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Quelques articles relatifs disponibles sur Léa :&#039;&#039;&#039; [http://lea-linux.org/cached/index/Software-soft_gere-rpm.html RPM, URPM et apt-get]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Trouver la grenouille :&#039;&#039;&#039; http://www.fedora-fr.org.&lt;br /&gt;
&lt;br /&gt;
=== Gentoo ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Par [mailto:fanchtastux@yahoo.fr tuxfanch]&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Site officiel :&#039;&#039;&#039; http://www.gentoo.org&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Type de distribution :&#039;&#039;&#039; source / binaire (si on utilise la version Gentoo Reference Platform).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;note&amp;quot;&amp;gt;A noter toutefois que Gentoo est pensée pour être essentiellement utilisée en mode source.&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Autonomie :&#039;&#039;&#039; 1 / 1.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Option(s) de configuration :&#039;&#039;&#039; LC / LC.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Petite configuration :&#039;&#039;&#039; -1 / 1.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Gestionnaire de paquets :&#039;&#039;&#039; &amp;lt;code&amp;gt;Portage&amp;lt;/code&amp;gt;, par le biais de la commande &amp;lt;code&amp;gt;emerge&amp;lt;/code&amp;gt; ; il est assez similaire au système du port de BSD. De plus, Gentoo étant une distribution source, il faut y ajouter (entre autres) un fichier &amp;lt;code&amp;gt;make.conf&amp;lt;/code&amp;gt; qui définit les directives de compilation communes, la langue à utiliser (français, anglais, chinois ... ) les éléments facultatifs à supporter (par exemple, si l&#039;on a uniquement KDE, on peut vouloir se passer des capacités d&#039;un soft à s&#039;intégrer dans gnome). &amp;lt;code&amp;gt;Portage&amp;lt;/code&amp;gt; gère les dépendances lors de l&#039;installation et lors de la désinstallation de paquets : par exemple, on installe un nouveau paquet par &amp;lt;code&amp;gt;emerge &amp;lt;nom_du_paquet&amp;gt;&amp;lt;/code&amp;gt;. La commande &amp;lt;code&amp;gt;revdep-rebuild&amp;lt;/code&amp;gt; permet de reconstruire les dépendances inverses. On désinstalle un paquet d&#039;un coup de &amp;lt;code&amp;gt;emerge --unmerge &amp;lt;nom_du_paquet&amp;gt;&amp;lt;/code&amp;gt;, et on nettoie les dépendances par &amp;lt;code&amp;gt;emerge --depclean&amp;lt;/code&amp;gt;. Par ailleurs, seuls les paquets validés pour une architecture sont disponibles directement, sinon ils sont &#039;&#039;masqués&#039;&#039; (on peut toujours leur enlever le masquage et les installer quand même, mais faudra pas venir se plaindre après!).&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il n&#039;y a pas de branche &#039;&#039;stable&#039;&#039;, &#039;&#039;test&#039;&#039; et &#039;&#039;devel&#039;&#039; chez Gentoo. Les paquets sont soit utilisables (parfaitement testés mais non figés, ce n&#039;est donc pas une branche &amp;quot;stable&amp;quot; au sens Debian) ou masqués. Il y a cependant plusieurs types de masquages : Les paquets pas encore testés à fond (mais qui fonctionnent la plupart du temps sans problème) et les paquets &amp;quot;hard-masqués&amp;quot; dont on sait qu&#039;il ont des bogues importants, souvent des failles de sécurité.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La capacité de portage à mélanger des branches et son excellente gestion des dépendances ainsi que le choix des fonctionnalités à compiler font de lui un des meilleurs outils de gestion des paquets, si ce n&#039;est le meilleur.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Philosophie d&#039;utilisation :&#039;&#039;&#039; Gentoo (qui, au passage, se prononce &#039;&#039;djen-tou&#039;&#039; et désigne un manchot papou) fût principalement créée par Daniel Robbins. L&#039;historique de la distribution est disponible [http://www.gentoo.org/main/fr/about.xml ici] ; mais pour faire court, disons que c&#039;est le résultat de la visite d&#039;un linuxien chez FreeBSD. C&#039;est par ce côté polymorphe couplé à son aspect source que Gentoo ne se désigne plus comme une distribution mais comme une méta-distribution (on peut en effet installer un noyau BSD au lieu du noyau Linux). Gentoo a pour but d&#039;être rapide (à l&#039;exécution, pas à l&#039;installation ;-) ), portée sur de très nombreuses architectures et facilement maintenable (les fichiers de configuration sont très documentés). Cependant, même si la documentation en ligne est traduite en français à 99%, il est préférable d&#039;avoir quelques notions d&#039;anglais (les aides dans les fichiers de configuration sont en anglais).&lt;br /&gt;
&lt;br /&gt;
Gentoo offre des possibilités de configuration extrèmes et des peformances excellentes. La souplesse de portage permet de l&#039;optimiser pour tous les usages, du serveur de jeux à la station de travail en passant par la production musicale. Ces avantages se paient par une configuration peu aisée pour le débutant. L&#039;installation se fait en mode texte dans un environnement chrooté. Mais courage, la documentation détaille les étapes pas à pas.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Quelques articles relatifs disponibles sur Léa :&#039;&#039;&#039; [http://lea-linux.org/docs/contribs.html Certainement un injuste vide à combler :)]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Trouver la grenouille :&#039;&#039;&#039; http://fr.gentoo-wiki.com/Accueil. &lt;br /&gt;
Le forum francophone de Gentoo : http://forums.gentoo.org/viewforum-f-35.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Slackware ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Par [http://groupe.lea-linux.org/slack/alive/ Le Groupe Slackware]&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Site officiel :&#039;&#039;&#039; [http://slackware.com  http://slackware.com]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Type de distribution :&#039;&#039;&#039; binaire.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Autonomie :&#039;&#039;&#039; 1.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Option(s) de configuration :&#039;&#039;&#039; LC.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Petite configuration :&#039;&#039;&#039; 1.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Gestionnaire de paquets :&#039;&#039;&#039; &amp;lt;code&amp;gt;pkgtool&amp;lt;/code&amp;gt;. Cet outil est, entre autres, le regroupement de trois autres commandes : &amp;lt;code&amp;gt;installpkg&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;removepkg&amp;lt;/code&amp;gt;, et &amp;lt;code&amp;gt;updgradepkg&amp;lt;/code&amp;gt; qui servent respectivement à installer, supprimer et mettre à jour les paquets. Pour s&#039;en servir, il suffit de taper &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;*pkg &amp;lt;nom_du_paquet.tgz&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; ou tout simplement &amp;lt;code&amp;gt;pkgtool&amp;lt;/code&amp;gt; dans le répertoire courant. Cet outil ne propose pas de gestion automatique des dépendances, mais on peut utiliser à cette fin un autre gestionnaire de paquets, [http://swaret.org &amp;lt;code&amp;gt;swaret&amp;lt;/code&amp;gt;], toutefois &#039;&#039;non-supporté officiellement&#039;&#039; par Patrick Volkerding, le créateur et mainteneur de la distribution.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Philosophie d&#039;utilisation :&#039;&#039;&#039; La Slackware est la plus ancienne des distributions GNU/Linux et a toujours suivi ces principes : simplicité et robustesse à l&#039;usage. Dans cette optique, elle s&#039;attache à compenser son absence d&#039;automatisation par une facilitation de la gestion manuelle, grâce notamment à des fichiers de configuration bien commentés et à des ressources d&#039;aide embarquées assez conséquentes. Une maîtrise moyenne de l&#039;anglais est cependant bienvenue si l&#039;on veut pouvoir la prendre en main rapidement sans trop de difficulté.&amp;lt;br&amp;gt;&lt;br /&gt;
Cette distribution est très proche des UNIX et des *BSD de par son système d&#039;initialisation, et les connaissances acquises à son contact permettent d&#039;aborder n&#039;importe quel *NIX avec aisance.&amp;lt;br&amp;gt;&lt;br /&gt;
Du serveur à la station de hardcore-gaming, la Slackware fournit un socle stable et solide. Elle se destine plutôt aux utilisateurs expérimentés.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Quelques articles relatifs disponibles sur Léa :&#039;&#039;&#039; [http://www.lea-linux.org/install/slack_install.html Installer la Slackware], [http://www.lea-linux.org/install/LFSlack.html Linux From Slack], [http://lea-linux.org/pho/list/2#debut Les paquetages Slackware].&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Trouver la grenouille :&#039;&#039;&#039; http://slackfr.org, http://slack-fr.org.&lt;br /&gt;
&lt;br /&gt;
=== SourceMage ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Par [mailto:f.bridault@fra.net Vlaaad]&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Site officiel :&#039;&#039;&#039; http://www.sourcemage.org.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Type de distribution :&#039;&#039;&#039; source.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Autonomie :&#039;&#039;&#039; 1.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Option(s) de configuration :&#039;&#039;&#039; LC.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Petite configuration :&#039;&#039;&#039; -1.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Gestionnaire de paquets :&#039;&#039;&#039; &amp;lt;code&amp;gt;Sorcery&amp;lt;/code&amp;gt; est le nom donné à l&#039;ensemble des commandes de gestion de paquetages. La métaphore de &amp;lt;code&amp;gt;sorcery&amp;lt;/code&amp;gt; amuse beaucoup ses utilisateurs :-) : &amp;lt;code&amp;gt;cast &amp;lt;spell&amp;gt;&amp;lt;/code&amp;gt; permet par exemple de lancer un sort (télécharger les sources, compiler et installer le paquetage), &amp;lt;code&amp;gt;dispel &amp;lt;spell&amp;gt;&amp;lt;/code&amp;gt; de le dissiper (désinstaller), &amp;lt;code&amp;gt;gaze&amp;lt;/code&amp;gt; d&#039;obtenir des informations. La gestion des &amp;lt;code&amp;gt;grimoires&amp;lt;/code&amp;gt; (répertoires de sorts) se réalise à l&#039;aide de la commande &amp;lt;code&amp;gt;scribe&amp;lt;/code&amp;gt;. Enfin, &amp;lt;code&amp;gt;Sorcery&amp;lt;/code&amp;gt; peut se mettre jour grâce à la commande du même nom.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Philosophie d&#039;utilisation :&#039;&#039;&#039; SourceMage est destinée aux utilisateurs qui aiment avoir le choix. Elle convient donc avant tout aux utilisateurs confirmés, soucieux d&#039;obtenir un système optimisé pour leur architecture et qui correspond uniquement à leurs besoins. La stabilité de la distribution est atteinte en utilisant les dernières versions de logiciels libres, plutôt que sur des versions plus anciennes et patchées. Il s&#039;agit d&#039;une distribution communautaire anglophone, la maîtrise de l&#039;anglais y est donc bienvenue.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Quelques articles relatifs disponibles sur Léa :&#039;&#039;&#039; [http://lea-linux.org/docs/contribs.html Certainement un injuste vide à combler :)]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Trouver la grenouille :&#039;&#039;&#039; Les utilisateurs de SourceMage peuvent se documenter sur le [http://wiki.sourcemage.org wiki] (traduction française en cours, les volontaires sont les bienvenus). Le forum n&#039;est pas très actif, en revanche, le canal IRC #sourcemage, et son petit frère français #sourcemagefr (sur irc.freenode.net) accueillent très volontiers les nouveaux arrivants et leurs questions.&lt;br /&gt;
&lt;br /&gt;
=== SuSE ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Par [mailto:suse@tele2.fr Phil]&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Site officiel :&#039;&#039;&#039; http://www.suse.fr/fr/&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Type de distribution :&#039;&#039;&#039; binaire.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Autonomie :&#039;&#039;&#039; 2.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Option(s) de configuration :&#039;&#039;&#039; LC/IG+.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Petite configuration :&#039;&#039;&#039; 0.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Gestionnaire de paquets :&#039;&#039;&#039; &amp;lt;code&amp;gt;Yast&amp;lt;/code&amp;gt;. Cet outil graphique est un centre de contrôle prévu pour gérer l&#039;ensemble de la machine. Parmi ses modules, celui des logiciels propose l&#039;installation et la désinstallation des paquets, mais gère en même temps de manière automatique les dépendances. S&#039;il en manque lors d&#039;une installation, &amp;lt;code&amp;gt;Yast&amp;lt;/code&amp;gt; précise quelles sont les dépendances requises (avec leurs numéros de version). Il est également possible de gérer les paquets en installant un autre gestionnaire, par exemple &amp;lt;code&amp;gt;apt4rpm&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Philosophie d&#039;utilisation :&#039;&#039;&#039; La SuSE est une distribution très populaire en Allemagne (mais pas seulement). Son utilisation s&#039;adresse aux débutants comme aux personnes aguerries. Elle est donc tous publics. &amp;lt;code&amp;gt;Yast&amp;lt;/code&amp;gt; contribue pour beaucoup à faciliter la gestion de la SuSE, grâce à une configuration entièrement graphique (il reste néanmoins possible de modifier les fichiers de configuration manuellement). La langue française est bien intégrée à l&#039;ensemble de la distribution, même si certains modules de &amp;lt;code&amp;gt;Yast &amp;lt;/code&amp;gt;demandent encore à être améliorés.&amp;lt;br&amp;gt;&lt;br /&gt;
SuSE a été racheté par Novell, et l&#039;on peut se réjouir du fait qu&#039;un effort substanciel est fait pour imposer GNU/Linux en tant que station de travail. Un gros travail à été fourni du côté de l&#039;interface graphique, pour le plus grand bonheur des utilisateurs.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Quelques articles relatifs disponibles sur Léa :&#039;&#039;&#039; [http://lea-linux.org/docs/contribs.html Certainement un injuste vide à combler :)]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Trouver la grenouille :&#039;&#039;&#039; http://frenchsuse.free.fr, http://www.alionet.org.&lt;br /&gt;
&lt;br /&gt;
=== Archlinux ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Par [mailto:albireo.es@gmail.com albireo]&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Site officiel :&#039;&#039;&#039; http://www.archlinux.org&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Type de distribution :&#039;&#039;&#039; binaire et/ou sources.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Autonomie :&#039;&#039;&#039; 1.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Option(s) de configuration :&#039;&#039;&#039; LC.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Petite configuration :&#039;&#039;&#039; 1.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Gestionnaire de paquets :&#039;&#039;&#039;Arch Linux utilise un gestionnaire de paquets (&amp;lt;code&amp;gt;pacman&amp;lt;/code&amp;gt;) qui combine un format de paquets binaires simple à un système de création de paquets facile à utiliser, permettant aux utilisateurs de gérer et personnaliser facilement leurs paquets, que ce soient des paquets officiels Arch ou ceux qu’ils auront eux-même créés. Parmi les nombreuses possibilités de &amp;lt;code&amp;gt;pacman&amp;lt;/code&amp;gt;, les plus utilisées sont celles offertes par les commandes suivantes: &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;pacman -Syu&amp;lt;/code&amp;gt; met à jour la liste des paquets et votre système,&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;pacman -S _un paquet_&amp;lt;/code&amp;gt; pour installer un ou des paquetages,&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;pacman -R _un paquet_&amp;lt;/code&amp;gt; pour supprimer un paquet,&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;pacman -Ss _mot_&amp;lt;/code&amp;gt;recherche d&#039;un paquet.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Philosophie d&#039;utilisation :&#039;&#039;&#039; Arch Linux est une distribution GNU/Linux à usage général qui peut être adaptée à vos propres besoins. Elle est rapide, légère, flexible et la plupart des éléments qui la composent sont assez faciles à comprendre et à modifier, ce qui en fait une bonne distrib&#039; pour en apprendre davantage sur le fonctionnement en profondeur de votre système. Nous ne fournissons aucun utilitaire d’aide à la configuration, Vous deviendrez donc rapidement très compétents dans la configuration de votre système en ligne de commande dans une console. Les paquets sont très récents et mis à jour régulièrement.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Quelques articles relatifs disponibles sur Léa : &#039;&#039;&#039; un vide qui se comblera certainement très vite :)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Trouver la grenouille :&#039;&#039;&#039; Vous pouvez rencontrer la communauté française et francophone d&#039;Archlinux sur son site : http://archlinux.fr où documentation, forums et wiki vous attendent pour vous aider, ainsi que sur son canal IRC #archlinux-fr (sur irc.freenode.net), qui accueillent très volontiers les nouveaux arrivants et leurs questions.&lt;br /&gt;
&lt;br /&gt;
== C&#039;est vraiment trop inzust&#039;... :( ==&lt;br /&gt;
&lt;br /&gt;
Le choix des distributions mises en avant peut paraître éminemment discutable. Ne sachant sur quel critère intangible nous baser, nous avons en effet décidé de reprendre peu ou prou celles mentionnées dans les intitulés des forums de Léa. Pour les samouraï des causes oubliées, sachez que vous êtes totalement libres de poursuivre cette présentation sur la [Signalez ce lien dans le forum Léa-Site s&#039;il est mort page wiki] associée à cet article, la seule chose que nous vous demandons c&#039;est de reprendre le formulaire et de vous efforcer de rester neutres dans la mesure du possible (évitez les « c’est génial ! » et autres expressions décrivant plus votre enthousiasme que la distribution en tant que tel).&lt;br /&gt;
&lt;br /&gt;
Voici une liste commentée, mais non exhaustive, de quelques autres distributions. Les sites sont les sites originaux:&lt;br /&gt;
&lt;br /&gt;
* [http://www.redhat.com/ Red Hat] : version professionnelle et payante basée sur Fedora ([http://www.fr.redhat.com/ en français])&lt;br /&gt;
* [http://www.knoppix-fr.org/ Knoppix] : Debian &#039;&#039;live&#039;&#039;, c&#039;est à dire que l&#039;utilisateur peut lancer directement à partir d&#039;un lecteur de CD ([http://www.knoppix-fr.org/ en français])&lt;br /&gt;
* [http://kaella.linux-azur.org/ Kaella] ou KLA : Knoppix en français&lt;br /&gt;
* [http://www.mepis.org/ Mepis] : Debian &#039;&#039;live&#039;&#039;, axée sur la reconnaissance automatique du matériel ([http://www.mepis-france.org/ en français])&lt;br /&gt;
* [http://www.pclinuxonline.com/ PCLinuxOS] : Mandriva &#039;&#039;live&#039;&#039; (non officielle)&lt;br /&gt;
* [http://www.kubuntu.org/ Kubuntu] : Ubuntu avec l&#039;environnement KDE ([http://www.ubuntu-fr.org/ en français])&lt;br /&gt;
* [http://www.vectorlinux.com/ Vector] : Une distribution optimisée pour ordinateurs assez anciens (AMD K6 et K6-2, Pentium I et II…) basée sur Slackware&lt;br /&gt;
&lt;br /&gt;
Voir aussi la rubrique distribution de la [http://lea-linux.org/cached/index/Logith%C3%A8que:Distributions.html Logithèque de Léa], le [http://www.zegeniestudios.net/ldc/index.php?lang=en Linux Distribution Chooser] et pour une liste bien plus complète, voir [http://distrowatch.com/ Distrowatch].&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
Nous voici parvenus au terme de cette présentation. Nous espérons qu&#039;elle vous aura aidé à trouver votre bonheur dans la luxuriante jungle des distributions GNU/Linux. De toute manière,  gardez à l&#039;esprit que le choix d&#039;une distribution ne vous enferme nullement à vie, car la structure du système reste globalement la même de l&#039;une à l&#039;autre, si bien qu&#039;un changement ne prend pas automatiquement des tournures de révolution. Au pire, si vous hésitez, prenez celle dont la mascotte vous est le plus sympathique, l&#039;important étant moins de tomber de suite sur la bonne distribution que de devenir un manchot — un vrai — qui explore la banquise à son gré sans rien demander à personne, et pour cela aucune d&#039;entre elles n&#039;est contre-indiquée. :)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;merci&amp;quot;&amp;gt;Cette page est issue de la documentation &#039;pré-wiki&#039; de Léa et a été convertie avec HTML::WikiConverter. Elle fut créée par Seb le 02/05/2005. Mis à jour par Jiel en 2008.&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Copyright =&lt;br /&gt;
Copyright © 02/05/2005, Seb&lt;br /&gt;
{{CC-BY-NC-SA}}&lt;/div&gt;</summary>
		<author><name>LeaJice</name></author>
	</entry>
	<entry>
		<id>https://lea-linux.org/docs/index.php?title=Installer_un_logiciel_sous_Red_Hat_Enterprise_Linux&amp;diff=16804</id>
		<title>Installer un logiciel sous Red Hat Enterprise Linux</title>
		<link rel="alternate" type="text/html" href="https://lea-linux.org/docs/index.php?title=Installer_un_logiciel_sous_Red_Hat_Enterprise_Linux&amp;diff=16804"/>
		<updated>2009-02-26T20:51:03Z</updated>

		<summary type="html">&lt;p&gt;LeaJice : Révocation des modifications par 148.60.1.10 (Discussion) vers la dernière version de Jiel&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Installation, administration du système]]&lt;br /&gt;
[[Category:Gérer ses logiciels]]&lt;br /&gt;
&lt;br /&gt;
= Comment installer simplement un logiciel sous Fedora ? =&lt;br /&gt;
&lt;br /&gt;
par [[Utilisateur:Rich25200|Rich25200]], complété par par [mailto:jiel@lea-linux.org Jiel]&lt;br /&gt;
&lt;br /&gt;
== A propos de l&#039;installation ==&lt;br /&gt;
&lt;br /&gt;
Attention. Sous GNU/Linux, on n&#039;installe pas du tout un logiciel comme sous Microsoft Windows. &lt;br /&gt;
&lt;br /&gt;
Sous GNU/Linux, on installe un paquet (en anglais, &amp;lt;em&amp;gt;package&amp;lt;/em&amp;gt;) qui contient non seulement le programme, mais aussi la documentation, les fichiers de configuration, et les bibliothèques associées. &lt;br /&gt;
&lt;br /&gt;
Au lieu d&#039;aller chercher des programmes sur internet, on se procure les paquets &amp;lt;u&amp;gt;auprès de sa distribution&amp;lt;/u&amp;gt;, ce qui garantit que les paquets ont été testés pour la version de votre distribution : c&#039;est un gage de stabilité et de sécurité.&lt;br /&gt;
&lt;br /&gt;
== YUM == &lt;br /&gt;
&lt;br /&gt;
Le gestionnaire de paquet de Fedora est YUM. C&#039;est un gestionnaire issu de la distribution Yellow Dog, et similaire à urpmi, le gestionnaire de Mandriva. Il installe des paquets qui sont des fichiers du type &amp;lt;code&amp;gt;&amp;lt;nomdupaquet&amp;gt;.rpm&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Il existe des interfaces graphiques qui permettent d&#039;installer des logiciels sous Fedora, mais elles sont peu utilisées. Cette fiche expliquera donc comment installer des logiciels avec YUM, en ligne de commande.&lt;br /&gt;
&lt;br /&gt;
== Installer un programme ==&lt;br /&gt;
&lt;br /&gt;
Pour installer un programme, ou plutôt un paquet, ouvrez un terminal ou shell (par exemple xterm). Loguez vous en root (avec la commande &amp;quot;su&amp;quot;) et tapez simplement :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;yum install &amp;lt;nomduprogramme&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
exemple : &amp;lt;code&amp;gt;yum install mplayer&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Acceptez (en tapant &amp;quot;y&amp;quot;) si YUM vous demande d&#039;installer d&#039;autres paquets en plus de celui que vous avez choisi. En effet, certains paquets ont besoin d&#039;autres paquets - on appelle cela des dépendances - pour fonctionner.&lt;br /&gt;
&lt;br /&gt;
== Désinstaller un programme ==&lt;br /&gt;
&lt;br /&gt;
Pour désinstaller un programme, tapez maintenant :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;yum remove &amp;lt;nomduprogramme&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Encore une fois, acceptez si YUM vous demande de désinstaller d&#039;autres paquets en plus de celui que vous avez choisi.&lt;br /&gt;
&lt;br /&gt;
== Mettre à jour un programme ==&lt;br /&gt;
&lt;br /&gt;
La commande est la suivante :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;yum update &amp;lt;nomduprogramme&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Rechercher un programme ==&lt;br /&gt;
&lt;br /&gt;
Il peut être utile de rechercher un programme à installer, si on est pas sûr du nom ou pas sûr qu&#039;il est dans les dépôts (voir c-dessous ce que c&#039;est) :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;yum list &amp;lt;nomduprogramme&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Mettre à jour tout le système ==&lt;br /&gt;
&lt;br /&gt;
Pour mettre à jour tout le système d&#039;un seul coup, tapez :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;yum update&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Attention, cette commande est périlleuse. En effet, tous les paquets (des centaines) vont être mis à jour.&lt;br /&gt;
&lt;br /&gt;
== Configuration des dépôts ==&lt;br /&gt;
&lt;br /&gt;
Les dépôts (en anglais &amp;lt;em&amp;gt;repository&amp;lt;/em&amp;gt;), sont grosso-modo des bases de données contenant des listes de paquets installables. Certains sont déjà configurés à l&#039;installation de Fedora.&lt;br /&gt;
&lt;br /&gt;
Voici les dépôts que nous vous conseillons d&#039;utiliser :&lt;br /&gt;
* &amp;lt;b&amp;gt;fedora&amp;lt;/b&amp;gt; : dépôt de base de la distribution.&lt;br /&gt;
* &amp;lt;b&amp;gt;updates-released&amp;lt;/b&amp;gt; : mises à jour officielles de la distribution.&lt;br /&gt;
* &amp;lt;b&amp;gt;kde-redhat&amp;lt;/b&amp;gt; : paquets de l&#039;environnement KDE.&lt;br /&gt;
&lt;br /&gt;
Pour installer un dépôt, il est nécessaire de créer un fichier dans &amp;lt;code&amp;gt;/etc/yum.repos.d/&amp;lt;/code&amp;gt; de la forme &amp;lt;code&amp;gt;&amp;lt;nomdudepot&amp;gt;.repo&amp;lt;/code&amp;gt; et de l&#039;éditer avec les bons paramètres. C&#039;est une opération complexe, cependant, beaucoup de fichiers .repo sont disponibles sur internet. Par exemple, le .repo pour kde-redhat se trouve ici :  http://apt.kde-redhat.org/apt/kde-redhat/fedora/kde-redhat.repo. Pour l&#039;utiliser, il suffit donc juste de placer le fichier .repo dans &amp;lt;code&amp;gt;/etc/yum.repos.d&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Versions utilisés ==&lt;br /&gt;
&lt;br /&gt;
Ce tutoriel a été testé sous Fedora 6, 9, 10. &lt;br /&gt;
&lt;br /&gt;
= Copyright =&lt;br /&gt;
Copyright &amp;amp;copy; 2006,2008 [[Utilisateur:Rich25200|Rich25200]] et Jiel Beaumadier&lt;br /&gt;
{{CC-BY-SA}}&lt;/div&gt;</summary>
		<author><name>LeaJice</name></author>
	</entry>
	<entry>
		<id>https://lea-linux.org/docs/index.php?title=Installation_de_Linux&amp;diff=16803</id>
		<title>Installation de Linux</title>
		<link rel="alternate" type="text/html" href="https://lea-linux.org/docs/index.php?title=Installation_de_Linux&amp;diff=16803"/>
		<updated>2009-02-26T20:49:31Z</updated>

		<summary type="html">&lt;p&gt;LeaJice : Révocation des modifications par 174.37.15.66 (Discussion) vers la dernière version de Lea&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Installer Linux]]&lt;br /&gt;
= Installation de Linux =&lt;br /&gt;
&lt;br /&gt;
Tout ce qu&#039;il faut savoir pour installer Linux et les différentes distributions.&lt;br /&gt;
&lt;br /&gt;
{{Plan-install}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;merci&amp;quot;&amp;gt;Cette page est issue de la documentation &#039;pré-wiki&#039; de Léa a été convertie avec HTML::WikiConverter. Elle fut créée par Frédéric Bonnaud le 10/02/2003.&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Copy|10/02/2003-2006|Frédéric Bonnaud et [[Utilisateur:LeaJice|LeaJice]]|CC-BY-SA}}&lt;/div&gt;</summary>
		<author><name>LeaJice</name></author>
	</entry>
	<entry>
		<id>https://lea-linux.org/docs/index.php?title=Discussion:Rubrique_:_noyau_et_modules&amp;diff=16791</id>
		<title>Discussion:Rubrique : noyau et modules</title>
		<link rel="alternate" type="text/html" href="https://lea-linux.org/docs/index.php?title=Discussion:Rubrique_:_noyau_et_modules&amp;diff=16791"/>
		<updated>2009-02-24T12:56:29Z</updated>

		<summary type="html">&lt;p&gt;LeaJice : A protégé « Discuter:Rubrique : noyau et modules »: Vandalisme [edit=autoconfirmed:move=autoconfirmed] (expire le 24 août 2009 à 11:56)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;pourquoi [[Kernel-modules]] est-il marqué comme obsolète ? A part les numéros de versions à mettre à jour, il est toujours applicable non ? [[Utilisateur:LeaJice|LeaJice]] 4 sep 2006 à 12:54 (CEST)&lt;/div&gt;</summary>
		<author><name>LeaJice</name></author>
	</entry>
	<entry>
		<id>https://lea-linux.org/docs/index.php?title=Discussion:Rubrique_:_noyau_et_modules&amp;diff=16790</id>
		<title>Discussion:Rubrique : noyau et modules</title>
		<link rel="alternate" type="text/html" href="https://lea-linux.org/docs/index.php?title=Discussion:Rubrique_:_noyau_et_modules&amp;diff=16790"/>
		<updated>2009-02-24T12:55:34Z</updated>

		<summary type="html">&lt;p&gt;LeaJice : Annulation des modifications 16782 par 190.90.34.149 (Discuter)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;pourquoi [[Kernel-modules]] est-il marqué comme obsolète ? A part les numéros de versions à mettre à jour, il est toujours applicable non ? [[Utilisateur:LeaJice|LeaJice]] 4 sep 2006 à 12:54 (CEST)&lt;/div&gt;</summary>
		<author><name>LeaJice</name></author>
	</entry>
	<entry>
		<id>https://lea-linux.org/docs/index.php?title=Discussion:Rubrique_:_noyau_et_modules&amp;diff=16789</id>
		<title>Discussion:Rubrique : noyau et modules</title>
		<link rel="alternate" type="text/html" href="https://lea-linux.org/docs/index.php?title=Discussion:Rubrique_:_noyau_et_modules&amp;diff=16789"/>
		<updated>2009-02-24T12:54:45Z</updated>

		<summary type="html">&lt;p&gt;LeaJice : Révocation des modifications par 212.38.100.62 (Discussion) vers la dernière version de 190.90.34.149&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Good design!  http://forums.slimdevices.com/member.php?u=25741 37 5mg phentermine sales http://forums.slimdevices.com/member.php?u=25744 363 snorting xanax http://forums.slimdevices.com/member.php?u=25743 37 5mg online tramadol pharmacy&lt;/div&gt;</summary>
		<author><name>LeaJice</name></author>
	</entry>
	<entry>
		<id>https://lea-linux.org/docs/index.php?title=Discussion:Rubrique_:_noyau_et_modules&amp;diff=16780</id>
		<title>Discussion:Rubrique : noyau et modules</title>
		<link rel="alternate" type="text/html" href="https://lea-linux.org/docs/index.php?title=Discussion:Rubrique_:_noyau_et_modules&amp;diff=16780"/>
		<updated>2009-02-23T20:23:02Z</updated>

		<summary type="html">&lt;p&gt;LeaJice : Révocation des modifications par 212.117.188.77 (Discussion) vers la dernière version de LeaJice&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;pourquoi [[Kernel-modules]] est-il marqué comme obsolète ? A part les numéros de versions à mettre à jour, il est toujours applicable non ? [[Utilisateur:LeaJice|LeaJice]] 4 sep 2006 à 12:54 (CEST)&lt;/div&gt;</summary>
		<author><name>LeaJice</name></author>
	</entry>
	<entry>
		<id>https://lea-linux.org/docs/index.php?title=Lea_Linux:%C3%80_propos&amp;diff=16770</id>
		<title>Lea Linux:À propos</title>
		<link rel="alternate" type="text/html" href="https://lea-linux.org/docs/index.php?title=Lea_Linux:%C3%80_propos&amp;diff=16770"/>
		<updated>2009-02-22T19:17:58Z</updated>

		<summary type="html">&lt;p&gt;LeaJice : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[http://www.lea-linux.org/?p=1 Voir ce billet]&lt;/div&gt;</summary>
		<author><name>LeaJice</name></author>
	</entry>
	<entry>
		<id>https://lea-linux.org/docs/index.php?title=Utilisateur:Fred&amp;diff=16769</id>
		<title>Utilisateur:Fred</title>
		<link rel="alternate" type="text/html" href="https://lea-linux.org/docs/index.php?title=Utilisateur:Fred&amp;diff=16769"/>
		<updated>2009-02-22T19:12:46Z</updated>

		<summary type="html">&lt;p&gt;LeaJice : Révocation des modifications par 194.143.146.166 (Discussion) vers la dernière version de Fred (phorum)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Fonctions ==&lt;br /&gt;
* Administrateur de la partie &amp;quot;web&amp;quot; de Léa (la partie administration globale du serveur est gérée par [[Utilisateur:Prae|prae]]),&lt;br /&gt;
* ex-Trésorier de l&#039;association,&lt;br /&gt;
* Professeur de Mathématiques,&lt;br /&gt;
* Buveur de bière,&lt;br /&gt;
* Inventeur de bugs&lt;br /&gt;
* Éradicateur de bugs&lt;br /&gt;
* Secoueur de puces.&lt;br /&gt;
&lt;br /&gt;
== Fortune ==&lt;br /&gt;
&amp;lt;fortune&amp;gt;random&amp;lt;/fortune&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Copy|2005|Frédéric Bonnaud|CC-BY-SA}}&lt;/div&gt;</summary>
		<author><name>LeaJice</name></author>
	</entry>
	<entry>
		<id>https://lea-linux.org/docs/index.php?title=Discussion:Pure-FTPd&amp;diff=16749</id>
		<title>Discussion:Pure-FTPd</title>
		<link rel="alternate" type="text/html" href="https://lea-linux.org/docs/index.php?title=Discussion:Pure-FTPd&amp;diff=16749"/>
		<updated>2009-02-20T11:56:47Z</updated>

		<summary type="html">&lt;p&gt;LeaJice : Révocation des modifications par 81.192.109.72 (Discussion) vers la dernière version de PingouinMigrateur&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Commentaires de : EnnaeL=&lt;br /&gt;
posté le 2005-04-09 16:08:00&lt;br /&gt;
&lt;br /&gt;
Il y a une petite erreur (pure-ftpdd écrit à la place de pure-ftpd) dans certaines lignes de commande :&lt;br /&gt;
La ligne avec erreur dans le paragraphe &amp;quot;Configuration&amp;quot; :&lt;br /&gt;
/usr/local/sbin/pure-ftpdd -A -b -B -c 15 -C 2 -E -j -l puredb:/etc/pureftpd.pdb -R -u 1 -X -F /usr/share/games/fortunes/fr/amusantes -H&lt;br /&gt;
La ligne corrigée :&lt;br /&gt;
/usr/local/sbin/pure-ftpd -A -b -B -c 15 -C 2 -E -j -l puredb:/etc/pureftpd.pdb -R -u 1 -X -F /usr/share/games/fortunes/fr/amusantes -H&lt;br /&gt;
&lt;br /&gt;
De même, dans le paragraphe &amp;quot;Serveur anonyme&amp;quot; :&lt;br /&gt;
/usr/local/sbin/pure-ftpdd -A -b -B -c 15 -C 2 -j -l puredb:/etc/pureftpd.pdb -R -u 1 -X -F /usr/share/games/fortunes/fr/amusantes -H&lt;br /&gt;
devient une fois corrigé :&lt;br /&gt;
/usr/local/sbin/pure-ftpd -A -b -B -c 15 -C 2 -j -l puredb:/etc/pureftpd.pdb -R -u 1 -X -F /usr/share/games/fortunes/fr/amusantes -H&lt;br /&gt;
&lt;br /&gt;
Anne : Corrigé merci&lt;br /&gt;
--------------=Commentaires de : EnnaeL=&lt;br /&gt;
posté le 2005-04-09 16:08:00&lt;br /&gt;
&lt;br /&gt;
Il y a une petite erreur (pure-ftpdd écrit à la place de pure-ftpd) dans certaines lignes de commande :&lt;br /&gt;
La ligne avec erreur dans le paragraphe &amp;quot;Configuration&amp;quot; :&lt;br /&gt;
/usr/local/sbin/pure-ftpdd -A -b -B -c 15 -C 2 -E -j -l puredb:/etc/pureftpd.pdb -R -u 1 -X -F /usr/share/games/fortunes/fr/amusantes -H&lt;br /&gt;
La ligne corrigée :&lt;br /&gt;
/usr/local/sbin/pure-ftpd -A -b -B -c 15 -C 2 -E -j -l puredb:/etc/pureftpd.pdb -R -u 1 -X -F /usr/share/games/fortunes/fr/amusantes -H&lt;br /&gt;
&lt;br /&gt;
De même, dans le paragraphe &amp;quot;Serveur anonyme&amp;quot; :&lt;br /&gt;
/usr/local/sbin/pure-ftpdd -A -b -B -c 15 -C 2 -j -l puredb:/etc/pureftpd.pdb -R -u 1 -X -F /usr/share/games/fortunes/fr/amusantes -H&lt;br /&gt;
devient une fois corrigé :&lt;br /&gt;
/usr/local/sbin/pure-ftpd -A -b -B -c 15 -C 2 -j -l puredb:/etc/pureftpd.pdb -R -u 1 -X -F /usr/share/games/fortunes/fr/amusantes -H&lt;br /&gt;
&lt;br /&gt;
Anne : Corrigé merci&lt;br /&gt;
--------------=Commentaires de : EnnaeL=&lt;br /&gt;
posté le 2005-04-09 16:08:00&lt;br /&gt;
&lt;br /&gt;
Il y a une petite erreur (pure-ftpdd écrit à la place de pure-ftpd) dans certaines lignes de commande :&lt;br /&gt;
La ligne avec erreur dans le paragraphe &amp;quot;Configuration&amp;quot; :&lt;br /&gt;
/usr/local/sbin/pure-ftpdd -A -b -B -c 15 -C 2 -E -j -l puredb:/etc/pureftpd.pdb -R -u 1 -X -F /usr/share/games/fortunes/fr/amusantes -H&lt;br /&gt;
La ligne corrigée :&lt;br /&gt;
/usr/local/sbin/pure-ftpd -A -b -B -c 15 -C 2 -E -j -l puredb:/etc/pureftpd.pdb -R -u 1 -X -F /usr/share/games/fortunes/fr/amusantes -H&lt;br /&gt;
&lt;br /&gt;
De même, dans le paragraphe &amp;quot;Serveur anonyme&amp;quot; :&lt;br /&gt;
/usr/local/sbin/pure-ftpdd -A -b -B -c 15 -C 2 -j -l puredb:/etc/pureftpd.pdb -R -u 1 -X -F /usr/share/games/fortunes/fr/amusantes -H&lt;br /&gt;
devient une fois corrigé :&lt;br /&gt;
/usr/local/sbin/pure-ftpd -A -b -B -c 15 -C 2 -j -l puredb:/etc/pureftpd.pdb -R -u 1 -X -F /usr/share/games/fortunes/fr/amusantes -H&lt;br /&gt;
&lt;br /&gt;
Anne : Corrigé merci&lt;br /&gt;
--------------=Commentaires de : EnnaeL=&lt;br /&gt;
posté le 2005-04-09 16:08:00&lt;br /&gt;
&lt;br /&gt;
Il y a une petite erreur (pure-ftpdd écrit à la place de pure-ftpd) dans certaines lignes de commande :&lt;br /&gt;
La ligne avec erreur dans le paragraphe &amp;quot;Configuration&amp;quot; :&lt;br /&gt;
/usr/local/sbin/pure-ftpdd -A -b -B -c 15 -C 2 -E -j -l puredb:/etc/pureftpd.pdb -R -u 1 -X -F /usr/share/games/fortunes/fr/amusantes -H&lt;br /&gt;
La ligne corrigée :&lt;br /&gt;
/usr/local/sbin/pure-ftpd -A -b -B -c 15 -C 2 -E -j -l puredb:/etc/pureftpd.pdb -R -u 1 -X -F /usr/share/games/fortunes/fr/amusantes -H&lt;br /&gt;
&lt;br /&gt;
De même, dans le paragraphe &amp;quot;Serveur anonyme&amp;quot; :&lt;br /&gt;
/usr/local/sbin/pure-ftpdd -A -b -B -c 15 -C 2 -j -l puredb:/etc/pureftpd.pdb -R -u 1 -X -F /usr/share/games/fortunes/fr/amusantes -H&lt;br /&gt;
devient une fois corrigé :&lt;br /&gt;
/usr/local/sbin/pure-ftpd -A -b -B -c 15 -C 2 -j -l puredb:/etc/pureftpd.pdb -R -u 1 -X -F /usr/share/games/fortunes/fr/amusantes -H&lt;br /&gt;
&lt;br /&gt;
Anne : Corrigé merci&lt;br /&gt;
--------------=Commentaires de : EnnaeL=&lt;br /&gt;
posté le 2005-04-09 16:08:00&lt;br /&gt;
&lt;br /&gt;
Il y a une petite erreur (pure-ftpdd écrit à la place de pure-ftpd) dans certaines lignes de commande :&lt;br /&gt;
La ligne avec erreur dans le paragraphe &amp;quot;Configuration&amp;quot; :&lt;br /&gt;
/usr/local/sbin/pure-ftpdd -A -b -B -c 15 -C 2 -E -j -l puredb:/etc/pureftpd.pdb -R -u 1 -X -F /usr/share/games/fortunes/fr/amusantes -H&lt;br /&gt;
La ligne corrigée :&lt;br /&gt;
/usr/local/sbin/pure-ftpd -A -b -B -c 15 -C 2 -E -j -l puredb:/etc/pureftpd.pdb -R -u 1 -X -F /usr/share/games/fortunes/fr/amusantes -H&lt;br /&gt;
&lt;br /&gt;
De même, dans le paragraphe &amp;quot;Serveur anonyme&amp;quot; :&lt;br /&gt;
/usr/local/sbin/pure-ftpdd -A -b -B -c 15 -C 2 -j -l puredb:/etc/pureftpd.pdb -R -u 1 -X -F /usr/share/games/fortunes/fr/amusantes -H&lt;br /&gt;
devient une fois corrigé :&lt;br /&gt;
/usr/local/sbin/pure-ftpd -A -b -B -c 15 -C 2 -j -l puredb:/etc/pureftpd.pdb -R -u 1 -X -F /usr/share/games/fortunes/fr/amusantes -H&lt;br /&gt;
&lt;br /&gt;
Anne : Corrigé merci&lt;br /&gt;
--------------&lt;/div&gt;</summary>
		<author><name>LeaJice</name></author>
	</entry>
	<entry>
		<id>https://lea-linux.org/docs/index.php?title=Discussion:Rubrique_:_noyau_et_modules&amp;diff=16745</id>
		<title>Discussion:Rubrique : noyau et modules</title>
		<link rel="alternate" type="text/html" href="https://lea-linux.org/docs/index.php?title=Discussion:Rubrique_:_noyau_et_modules&amp;diff=16745"/>
		<updated>2009-02-18T12:22:03Z</updated>

		<summary type="html">&lt;p&gt;LeaJice : Révocation des modifications par 217.114.210.193 (Discussion) vers la dernière version de LeaJice&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;pourquoi [[Kernel-modules]] est-il marqué comme obsolète ? A part les numéros de versions à mettre à jour, il est toujours applicable non ? [[Utilisateur:LeaJice|LeaJice]] 4 sep 2006 à 12:54 (CEST)&lt;/div&gt;</summary>
		<author><name>LeaJice</name></author>
	</entry>
	<entry>
		<id>https://lea-linux.org/docs/index.php?title=Discussion:Rubrique_:_noyau_et_modules&amp;diff=16743</id>
		<title>Discussion:Rubrique : noyau et modules</title>
		<link rel="alternate" type="text/html" href="https://lea-linux.org/docs/index.php?title=Discussion:Rubrique_:_noyau_et_modules&amp;diff=16743"/>
		<updated>2009-02-17T20:09:08Z</updated>

		<summary type="html">&lt;p&gt;LeaJice : Révocation des modifications par 217.114.210.189 (Discussion) vers la dernière version de 88.175.61.7&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;pourquoi [[Kernel-modules]] est-il marqué comme obsolète ? A part les numéros de versions à mettre à jour, il est toujours applicable non ? [[Utilisateur:LeaJice|LeaJice]] 4 sep 2006 à 12:54 (CEST)&lt;/div&gt;</summary>
		<author><name>LeaJice</name></author>
	</entry>
	<entry>
		<id>https://lea-linux.org/docs/index.php?title=Installer_une_webcam_USB_avec_un_noyau_Linux_2.2_ou_2.4&amp;diff=16734</id>
		<title>Installer une webcam USB avec un noyau Linux 2.2 ou 2.4</title>
		<link rel="alternate" type="text/html" href="https://lea-linux.org/docs/index.php?title=Installer_une_webcam_USB_avec_un_noyau_Linux_2.2_ou_2.4&amp;diff=16734"/>
		<updated>2009-02-13T17:18:39Z</updated>

		<summary type="html">&lt;p&gt;LeaJice : Révocation des modifications par 83.233.30.38 (Discussion) vers la dernière version de 212.11.59.198&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Installer une WebCam USB =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;leatitre&amp;quot;&amp;gt;Installer une WebCam USB&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;leapar&amp;quot;&amp;gt;par [mailto:tux.le.pengouin@free.fr Fred] et [mailto:dclatot@free.fr Dimitri]&amp;lt;div class=&amp;quot;leadesc&amp;quot;&amp;gt;Un certain nombre de WebCams sont maintenant prises en charge par Linux, voyons comment en faire fonctionner une.&amp;lt;/div&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Dans ce document, je vais expliquer comment installer une WebCam sous Linux, mais je ne parlerai que de celles ayant un pilote en GPL.&lt;br /&gt;
&lt;br /&gt;
Il existe plusieurs types de WebCam prises en charge par Linux avec des pilotes GPL :&lt;br /&gt;
* celles utilisant le modules &#039;&#039;&#039;uvcvideo&#039;&#039;&#039; (voir ci-dessous) &lt;br /&gt;
&amp;lt;div class=&amp;quot;note&amp;quot;&amp;gt;Grâce à Microsoft (une fois n&#039;est pas coutume), l&#039;installation d&#039;une webcam sous Linux va devenir beaucoup plus simple. En effet, pour avoir le logo &amp;quot;Vista certified&amp;quot;, une webcam doit respecter la norme USB Video (l&#039;équivalent de USB Storage pour les clefs USB). A priori, ce sera le cas de la grande majorité des nouvelles webcams, un seul pilote sera donc nécessaire pour toutes. Ce pilote existe déjà, il se nomme &#039;&#039;&#039;uvcvideo&#039;&#039;&#039; ; on le trouve [http://linux-uvc.berlios.de à cette adresse].&lt;br /&gt;
&lt;br /&gt;
Si votre webcam est reconnue par le pilote, les lignes suivantes (à la référence de la webcam près) devraient apparaître si vous tapez &amp;lt;code&amp;gt;dmesg&amp;lt;/code&amp;gt; :&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;uvcvideo: Found UVC 1.00 device Philips SPC 1000NC Webcam (0471:0332)&lt;br /&gt;
usbcore: registered new driver uvcvideo&lt;br /&gt;
USB Video Class driver (v0.1.0)&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Bien qu&#039;elle soit reconnue, elle peut ne pas fonctionner, car le pilote est récent. C&#039;est mon cas (Mandriva 2008.0). J&#039;ai donc installé la dernière version comme expliqué [http://linux-uvc.berlios.de#download sur le site] :&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;$ svn checkout svn://svn.berlios.de/linux-uvc/linux-uvc/trunk&lt;br /&gt;
$ cd trunk&lt;br /&gt;
$ make&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
puis en tant que root :&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;# make install&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Enfin, je retire l&#039;ancien pilote de la mémoire puis charge le nouveau par :&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;# rmmod uvcvideo&lt;br /&gt;
# modprobe uvcvideo&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Et voilà, vous pouvez essayer les logiciels video, en commençant par [http://mxhaard.free.fr/spca50x/Investigation/uvc/luvcview-20070512.tar.gz luvcview] (à compiler soi-même), ou mplayer par la commande :&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;mplayer tv:// -tv driver=v4l2&amp;lt;/div&amp;gt;&lt;br /&gt;
ou en spécifiant plus d&#039;options, comme par exemple :&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;mplayer tv:// -tv driver=v4l2:device=/dev/video1:width=320:height=240:fps=25:outfmt=rgb24&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note : xawtv ne fonctionne pas avec ma webcam, car celle-ci produit une video au format MJPEG, non géré par xawtv.&lt;br /&gt;
&lt;br /&gt;
(mise à jour par [[Utilisateur:LeaJice|LeaJice]] 3 fév 2008 à 21:57 (CET))&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* celles utilisant le module &#039;&#039;&#039;CPiA&#039;&#039;&#039; ([http://webcam.sourceforge.net/ liste]), &lt;br /&gt;
* celles utilisant le modules &#039;&#039;&#039;OV511&#039;&#039;&#039; ([http://alpha.dyndns.org/ov511/cameras.html liste]),&lt;br /&gt;
* de nombreuses webcams sont prises en charge par le pilote &#039;&#039;&#039;spca5xx&#039;&#039;&#039; ([http://mxhaard.free.fr/spca5xx.html liste]).&lt;br /&gt;
Après avoir consulté les listes retenez bien le nom du pilote que vous devrez charger. &lt;br /&gt;
* Les Webcam Philips (Vesta, ToUCam), dont le pilote est maintenant en GPL (sauf la partie, optionnelle, gérant la compression qui permet d&#039;améliorer la fluidité). Voir la [http://www.smcc.demon.nl/webcam/  page de ce pilote], une [http://frlinux.net/?section=systeme&amp;amp;article=52 page sur l&#039;installation de cette webcam sur FRLinux.net (en 2002)] et un article faisant [http://www.steletch.org/spip.php?article39#forum61 le point par rapport à la Mandriva 2007]. &lt;br /&gt;
* la Quickcam Express de Logitech, de 2 manières : &lt;br /&gt;
** une application + module permettant de visionner la video (disponible [http://hotswap.in.tum.de/~acher/quickcam/quickcam.html ici]). La compilation des sources produit 2 fichiers : &amp;lt;tt&amp;gt;quickcamex.o&amp;lt;/tt&amp;gt; (le module) et &amp;lt;tt&amp;gt;quickcam&amp;lt;/tt&amp;gt; (le visionneur). Créez le périphérique par &amp;quot;&amp;lt;tt&amp;gt;mknode /dev/quick c 180 80&amp;lt;/tt&amp;gt;&amp;quot;, chargez le module : &amp;quot;&amp;lt;tt&amp;gt;insmod ./quickcamex.o&amp;lt;/tt&amp;gt;&amp;quot; ; vous pouvez visionner la webcam avec &amp;lt;tt&amp;gt;./quickcam&amp;lt;/tt&amp;gt; (et seulement ce logiciel). Pour faire des photos, utilisez un outil de capture d&#039;écran. &lt;br /&gt;
** un pilote &amp;quot;normal&amp;quot;, i.e. compatible video4linux, disponible [http://qce-ga.sourceforge.net/ ici]. Ce pilote est livré en standard avec la Mandrake 8, il se nomme &amp;lt;tt&amp;gt;mod_quickcam.o&amp;lt;/tt&amp;gt; et est chargé automatiquement au démarrage si la webcam est branchée. Si vous ne l&#039;avez pas, récupérez-le tarball (cf lien précédent), décompressez-le ; un simple &amp;quot;&amp;lt;tt&amp;gt;make&amp;lt;/tt&amp;gt;&amp;quot; le compilera, vous pouvez alors le copier dans &amp;lt;tt&amp;gt;/lib/modules/2.x.y&amp;lt;/tt&amp;gt; pour l&#039;installer. Pour le reste, remplacez &#039;&#039;&#039;ov511&#039;&#039;&#039; par &#039;&#039;&#039;mod_quickcam&#039;&#039;&#039; ci-dessous, car il s&#039;utilise de la même manière.  &lt;br /&gt;
* depuis peu (02/2006) la Logitech Quickcam Messenger en utilisant [http://prdownloads.sourceforge.net/oss-drivers/qc-usb-messenger-1.1.tar.gz?download   qc-usb-messenger-1.1.tar.gz]. L&#039;installation est expliquée en suivant [http://sourceforge.net/project/shownotes.php?group_id=157095&amp;amp;release_id=390811 le lien].&lt;br /&gt;
* d&#039;autres ? [mailto:taz98@altern.org envoyez-nous] vos expériences... &lt;br /&gt;
&lt;br /&gt;
Dans la suite, la partie concernant les logiciels est commune à toutes les webcams, mais pour l&#039;installation des pilotes, je ne vais parler que des WebCams utilisant ov511 car les deux WebCams que j&#039;ai testées (une &#039;&#039;&#039;Trust Sp@ce cam 300 USB&#039;&#039;&#039; et une &#039;&#039;&#039;Creative Video Blaster Webcam 3 USB&#039;&#039;&#039;) utilisent ce pilote.&amp;lt;br /&amp;gt;[mailto:Pierre%20Yves&amp;lt;pierre-yves.b chez wanadoo.fr&amp;gt; Pierre-Yves] me signale que la procedure d&#039;installation est presque identique pour les WebCams utilisant le pilote CPiA (lui il a une &#039;&#039;&#039;Mustek Vcam-300 USB&#039;&#039;&#039;) : il suffit de changer (presque partout cela suffit) : ov511 par cpia.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;u&amp;gt;Prérequis&amp;lt;/u&amp;gt; : Vous devez avoir installé un noyau prenant en charge l&#039;USB (c&#039;est le cas du noyau des Mandrake 7.2, SuSE 7.0, RedHat 7.0 et sans doute de toutes les dernières versions des grandes distributions) :&lt;br /&gt;
&lt;br /&gt;
* soit un noyau 2.2.14 et plus avec le patch USB, voir [/hardware/usbscan.php3#compil_noyau cet article]. &lt;br /&gt;
* soit un noyau 2.4.x, voir [/kernel/kernel24.php3 cet article]. &lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Installation et configuration du noyau ==&lt;br /&gt;
&lt;br /&gt;
Si vous utilisez une distribution récente tout est déjà configuré correctement dans votre noyau, vous pouvez passer à la [#installation_driver suite]. Sinon nous allons devoir recompiler le noyau.&lt;br /&gt;
&lt;br /&gt;
Pour cela, [/kernel/kernel.php3 voyez cet article]. Le mieux est d&#039;utiliser un noyau 2.4.2 (dernière version à la date de rédaction de cet article) : il contient forcement les dernières versions des pilotes mais vous pouvez toujours télécharger celles-ci sur les sites : [http://alpha.dyndns.org/ov511 OV511 : http://alpha.dyndns.org/ov511] ou [http://webcam.sourceforge.net/ CPiA : http://webcam.sourceforge.net]. Pour compiler les pilotes, vous devez, dans la rubrique &amp;lt;tt&amp;gt;USB Support&amp;lt;/tt&amp;gt; activer en tant que modules les options suivantes (au moins) :&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;tt&amp;gt;USB support&amp;lt;/tt&amp;gt; : ça coule de source. &lt;br /&gt;
# &amp;lt;tt&amp;gt;Preliminary USB device filesystem&amp;lt;/tt&amp;gt; : ça ne coute rien et ça pourra vous servir (à reconnaitre un périphérique, et c.). &lt;br /&gt;
# &amp;lt;tt&amp;gt;L&#039;un des pilote suivant : UHCI (Intel PIIX4, VIA, ...)&amp;lt;/tt&amp;gt; (module : &#039;&#039;&#039;uhci.o&#039;&#039;&#039;) ou &amp;lt;tt&amp;gt;UHCI Alternate Driver (JE)&amp;lt;/tt&amp;gt; (module : &#039;&#039;&#039;uhci.o&#039;&#039;&#039;) ou &amp;lt;tt&amp;gt;OHCI (Compaq, iMac, OPTi, SiS, ALi)&amp;lt;/tt&amp;gt; (module : &#039;&#039;&#039;ohci.o&#039;&#039;&#039;) : suivant votre carte mère (regardez l&#039;aide), c&#039;est le pilote des ports USB de votre ordinateur (si vous devez charger un pilote uhci, préférez &amp;lt;tt&amp;gt;UHCI Alternate Driver (JE)&amp;lt;/tt&amp;gt; sauf s&#039;il plante votre ordinateur : il est parait-il plus performant). &lt;br /&gt;
&lt;br /&gt;
et soit :&lt;br /&gt;
&lt;br /&gt;
* vous activez (dans la même catégorie) &amp;lt;tt&amp;gt;USB OV511 Camera&amp;lt;/tt&amp;gt; : si votre WebCam doit utiliser un pilote &#039;&#039;&#039;OV511&#039;&#039;&#039; &lt;br /&gt;
* dans la catégorie &amp;lt;tt&amp;gt;Multimedia devices&amp;lt;/tt&amp;gt;, sous catégorie &amp;lt;tt&amp;gt;Video For Linux&amp;lt;/tt&amp;gt; : vous activez &amp;lt;tt&amp;gt;CPiA Video For Linux&amp;lt;/tt&amp;gt; et &amp;lt;tt&amp;gt;CPiA USB Lowlevel&amp;lt;/tt&amp;gt; dans le cas ou votre WebCam utilise un pilote &#039;&#039;&#039;CPiA&#039;&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
Enfin vous compilez et installez ce nouveau noyau. Un petit reboot et tout ce passera bien.&lt;br /&gt;
&lt;br /&gt;
== Installation et configuration des pilotes ==&lt;br /&gt;
&lt;br /&gt;
Si l&#039;USB, n&#039;est pas pris en charge par votre distribution il faut maintenant charger le pilote USB de votre carte mère, c&#039;est soit : &#039;&#039;&#039;ohci&#039;&#039;&#039; soit : &#039;&#039;&#039;uhci&#039;&#039;&#039;. Tapez :&lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;90%&amp;quot; bgcolor=&amp;quot;#fcfcd8e&amp;quot;&lt;br /&gt;
| &amp;lt;tt&amp;gt;modprobe usbcore&amp;lt;/tt&amp;gt; (sans doute inutile)&amp;lt;tt&amp;gt;&amp;lt;br /&amp;gt;modprobe ohci&amp;lt;/tt&amp;gt; ou &amp;lt;tt&amp;gt;modprobe uhci&amp;lt;/tt&amp;gt; (inutile si votre ditribution prend en charge l&#039;USB)&amp;lt;tt&amp;gt;&amp;lt;br /&amp;gt;modprobe videodev&amp;lt;/tt&amp;gt; (sans doute inutile)&amp;lt;tt&amp;gt;&amp;lt;br /&amp;gt;modprobe ov511&amp;lt;/tt&amp;gt; ou &amp;lt;tt&amp;gt;modprobe cpia&amp;lt;br /&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Pour automatiser ce chargement au démarage de votre machine, il y a deux solutions envisageables :&lt;br /&gt;
&lt;br /&gt;
* vous insésez les lignes précédantes dans un script lancé au démarage de votre machine (exemple : à la fin de /etc/rc.d/rc.local) &lt;br /&gt;
* si vous n&#039;avez qu&#039;un seul périphérique video, vous pouvez ajouter en fin du fichier /etc/modules.conf (parfois aussi nommé /etc/conf.modules) la ligne : &lt;br /&gt;
{| width=&amp;quot;90%&amp;quot; bgcolor=&amp;quot;#fcfcd8&amp;quot;&lt;br /&gt;
| &amp;lt;tt&amp;gt;alias char-major-81 ov511 &amp;lt;/tt&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
 ou &lt;br /&gt;
{| width=&amp;quot;90%&amp;quot; bgcolor=&amp;quot;#fcfcd8&amp;quot;&lt;br /&gt;
| height=&amp;quot;17&amp;quot; | &amp;lt;tt&amp;gt;alias char-major-81 cpia &amp;lt;/tt&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
 ce qui demande au chargeur de modules de charger ov511 (ou cpia) si l&#039;on accède à un périphérique dont le numéro de majeur est 81 (ie: un /dev/video). &lt;br /&gt;
&lt;br /&gt;
A ce stade votre WebCam est prise en charge par le noyau, mais il reste à se procurer de quoi visualiser les videos en provenance de celle-ci.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note(1) : &#039;&#039;&#039;Pour les WebCams OV511, vérifiez que votre WebCam est correctement détectée, tapez :&lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;90%&amp;quot; bgcolor=&amp;quot;#fcfcd8&amp;quot;&lt;br /&gt;
| &amp;lt;tt&amp;gt;[root@duron]# tail -n 5 /var/log/messages&amp;lt;br /&amp;gt;Mar 8 13:55:50 duron kernel: usb.c: registered new driver ov511&amp;lt;br /&amp;gt;&#039;&#039;&#039;Mar 8 13:55:50 duron kernel: ov511.c: USB OV511+ camera found&#039;&#039;&#039;&amp;lt;br /&amp;gt;Mar 8 13:55:50 duron kernel: ov511.c: camera: Creative Labs WebCam 3&amp;lt;br /&amp;gt;Mar 8 13:55:50 duron kernel: ov511.c: Sensor is an OV7620&amp;lt;br /&amp;gt;Mar 8 13:55:50 duron kernel: ov511.c: ov511 driver version 1.34 registered &amp;lt;/tt&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
 Si vous voyez une ligne du type de celle en gras c&#039;est que votre WebCam est reconnue, sinon c&#039;est que quelque chose manque ou que votre WebCam n&#039;est pas prise en charge par ce module (essayez l&#039;autre, vérifiez dans les listes de matériels pris en charge). &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note(2) : &#039;&#039;&#039;Pour les WebCams OV511, si vous avez plusieurs WebCams OV511, il en faut préciser le nombre sur la ligne de commande, si vous avez 2 WebCams :&lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;90%&amp;quot; bgcolor=&amp;quot;#fcfcd8&amp;quot;&lt;br /&gt;
| &amp;lt;tt&amp;gt;[root@duron]# modprobe ov511 cams=2&amp;lt;/tt&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
 La première WebCam détectée sera &amp;lt;tt&amp;gt;/dev/video0&amp;lt;/tt&amp;gt; la seconde &amp;lt;tt&amp;gt;/dev/video1&amp;lt;/tt&amp;gt; et c. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note(3) : &#039;&#039;&#039;Il est possible (non testé) de charger en meme temps un pilote ov511, cpia et bttv chacun des périphériques détectés sera accessible via un /dev/video&#039;&#039;xx&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== W3Cam ==&lt;br /&gt;
&lt;br /&gt;
W3Cam est un programme qui permet de diffuser à la demande les images sur votre serveur WEB (vous devez avoir installé Apache (par exemple) pour pouvoir l&#039;utiliser). Mais le paquetage W3Cam permet aussi de tester rapidement sa WebCam car il contient le programme (fonctionnant en ligne de commande) : vidcat qui lui ne nécessite pas d&#039;installer Apache.&lt;br /&gt;
&lt;br /&gt;
=== Compilation et installation ===&lt;br /&gt;
&lt;br /&gt;
Comme toujours on peut récupérer un paquetage précompilé pour sa distribution, mais je préfère compiler moi même ce type de programme : je n&#039;expliquerais pas comment faire, mais vous pouvez le faire en allant sur [http://rpmfind.net/ rpmfind.net] par exemple. Nous allons récupérer les sources là : http://www.hdk-berlin.de/~rasca/w3cam/&lt;br /&gt;
&lt;br /&gt;
Puis on décompresse le tout et on compile :&lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;90%&amp;quot; bgcolor=&amp;quot;#fcfcd8&amp;quot;&lt;br /&gt;
| &amp;lt;tt&amp;gt;tar xzf w3cam-0.6.6.tar.gz&amp;lt;br /&amp;gt;cd w3cam&amp;lt;br /&amp;gt;./configure&amp;lt;br /&amp;gt;make&amp;lt;br /&amp;gt;make install &amp;lt;/tt&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Maintenant tout est installé dans /usr/local/bin et /usr/local/cgi-bin, n&#039;oubliez pas d&#039;ajouter /usr/local/bin à votre PATH.&lt;br /&gt;
&lt;br /&gt;
Faisons un petit test :&lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;90%&amp;quot; bgcolor=&amp;quot;#fcfcd8&amp;quot;&lt;br /&gt;
| &amp;lt;tt&amp;gt;vidcat -d /dev/video0 -s 320x240 -f jpeg &amp;gt; ~/essai.jpeg&amp;lt;/tt&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt; Essayer de regarder le fichier ~/essai.jpeg. S&#039;il est un peut sombre, c&#039;est que les réglages automatiques n&#039;ont pas pu se faire à la première prise de vue, essayez d&#039;en faire d&#039;autre : l&#039;image s&#039;éclaircie petit à petit. Ça y est votre WebCaebc fonctionne sous Linux !&lt;br /&gt;
&lt;br /&gt;
=== Votre tête sur le Web ! ===&lt;br /&gt;
&lt;br /&gt;
Vous avez acheté une webcam, ce n&#039;est certainement pas pour prendre des photos... Une première solution : mettez votre tête animée sur le Web. Pour cela vous devez avoir installé Apache sur votre machine. Puis copiez le contenu de /usr/local/cgi-bin vers le répertoire des cgi d&#039;apache (sur la Mandrake 7.2 c&#039;est /var/www/cgi-bin, sur la 7.0 c&#039;est /home/httpd/cgi-bin) :&lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;90%&amp;quot; bgcolor=&amp;quot;#fcfcd8&amp;quot;&lt;br /&gt;
| &amp;lt;tt&amp;gt;cp -R /usr/local/cgi-bin/* /var/www/cgi-bin&amp;lt;/tt&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Puis, éditez le fichier : /var/www/cgi-bin/w3cam.cgi.scf. Ci-après vous trouverez le mien :&lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;90%&amp;quot; bgcolor=&amp;quot;#fcfcd8&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# SCFF/sh &amp;lt;/nowiki&amp;gt;&amp;lt;br /&amp;gt; # Ce fichier doit se trouver dans le même répertoire &amp;lt;br /&amp;gt; # que w3cam.cgi &amp;lt;br /&amp;gt; # Décommentez et renseignez les &amp;lt;br /&amp;gt; # lignes suivantes si vous souhaitez &amp;lt;br /&amp;gt; # modifier les couleurs de fond et &amp;lt;br /&amp;gt; # celles d&#039;avant plan &amp;lt;br /&amp;gt; # background=#ffffff &amp;lt;br /&amp;gt; # foreground=#000000 &amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; # Ce paramètre existe mais je &amp;lt;br /&amp;gt; # ne sait pas à quoi il sert &amp;lt;br /&amp;gt; # source_url=&amp;quot;http://home.pages.de/~rasca/w3cam/&amp;quot; &amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; # Si vous souhaitez utiliser une feuille de style &amp;lt;br /&amp;gt; # décomentez la ligne suivantes &amp;lt;br /&amp;gt; # stylesheet=&amp;quot;/~rasca/w3cam/w3cam.css&amp;quot; &amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; # mettre protected à 1 permet d&#039;éviter &amp;lt;br /&amp;gt; # de prendre en compte les champs du formulaire&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;protected=0 &amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; # mettez ici votre périphérique video &amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;device = &amp;quot;/dev/video&amp;quot; &amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; # taille d&#039;image en provenance de la WebCam (ou la carte TV) &amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;width=320&amp;lt;br /&amp;gt; height=240 &amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; # pour avoir de jpeg en couleurs (0 : noir et blanc) color=1 &amp;lt;br /&amp;gt; # temps à attendre entre deux images &amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;refresh=&amp;quot;0.1&amp;quot; &amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; # norm, 0=PAL, 1=NTSC, 2=SECAM &amp;lt;br /&amp;gt; # utile uniquement avec une carte TV #norm=&amp;quot;0&amp;quot; &amp;lt;br /&amp;gt; # input, 0=TV, 1=Composite1, 2=Composite2, 3=S-Video &amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; input=&amp;quot;1&amp;quot; # avec une WebCam (évite les bouton unutiles avec une WebCam)&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; # format, 1=PPM, 2=JPEG, 3=PNG &amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;format=&amp;quot;2&amp;quot; &amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; # qualité des jpeg : 1-100&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; quality=&amp;quot;50&amp;quot; &amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; # mode, 0=plain, 1=gui (pour avoir un control sur w3cam) &amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;mode=&amp;quot;1&amp;quot; &amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; # attendre 0,5 secondes avant de commencer la capture &amp;lt;br /&amp;gt; # (ie : 500000 microsecondes) &amp;lt;br /&amp;gt; # usleep=&amp;quot;500000&amp;quot; &amp;lt;br /&amp;gt; # fréquence du tunner en 1/16 MHz &amp;lt;br /&amp;gt; # uniquement pour les carte TV &amp;lt;br /&amp;gt; # freq=&amp;quot;9076&amp;quot; &amp;lt;br /&amp;gt; # liste des fréquences &amp;lt;br /&amp;gt; # freqlist=&amp;quot;878;9076;9844;9460&amp;quot; &amp;lt;br /&amp;gt; # Pour mettre l&#039;heures sur les images de votre WebCam &amp;lt;br /&amp;gt; # les mots clefs ne sont utilisables que dans ce fichier &amp;lt;br /&amp;gt; # vous &#039;&#039;&#039;devez&#039;&#039;&#039; renseigner les champ &amp;quot;font&amp;quot; et &amp;quot;timestamp&amp;quot; &amp;lt;br /&amp;gt; # &amp;lt;br /&amp;gt; # font = /usr/local/X11/lib/ttfonts/arial.ttf &amp;lt;br /&amp;gt; # font_size = 12 &amp;lt;br /&amp;gt; # &amp;lt;br /&amp;gt; # Pour la chaine de format de l&#039;heure voir la manpage : strftime(3)&amp;lt;br /&amp;gt; # timestamp = &amp;quot;Berlin, %H:%M %d.%m.%Y&amp;quot; &amp;lt;br /&amp;gt; # timestamp_border = 2 &amp;lt;br /&amp;gt; # &amp;lt;br /&amp;gt; # blend value: 1 .. 100 &amp;lt;br /&amp;gt; # timestamp_blend = 60 &amp;lt;br /&amp;gt; # alignment: 0 = upper left corner, 1 = upper right corner, &amp;lt;br /&amp;gt; # 2 = lower left corner, 3 = lower right corner &amp;lt;br /&amp;gt; # timestamp_align = 1 &amp;lt;/tt&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt; Puis lancez votre navigateur web préféré (je crois que cela ne fonctionne pas avec MS IE mais je n&#039;ai pas pu essayer...) et tapez l&#039;url suivante : http://localhost/cgi-bin/w3cam.cgi : ça y est ça bouge !&lt;br /&gt;
&lt;br /&gt;
Pour acceder à votre webcam depuis le net il suffit, dans l&#039;adresse ci-dessus, de remplacer localhost par votre ip (que l&#039;on peut obtenir en faisant ifconfig ppp0 si l&#039;on est connecté via pppd) et c&#039;est tout. &#039;&#039;&#039;Note : &#039;&#039;&#039;Si l&#039;image que vous voyez semble provenir de Canal+ sans décodeur, c&#039;est souvant que vous demandez une capture dans une résolution qui n&#039;est pas prise en charge soit par le pilote soit par la WebCam.&lt;br /&gt;
&lt;br /&gt;
== Motion ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;partie écrite par : [mailto:dclatot@free.fr Dimitri].&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Vous suspectez des fantômes de venir hanter votre maison en votre absence sans jamais les avoir vus et bien voici ce qu&#039;il vous faut. Motion permet de détecter les mouvements faits devant votre webcam et de les enregistrer. Plus d&#039;infos:&lt;br /&gt;
&lt;br /&gt;
http://www.lavrsen.dk/twiki/bin/view/Motion/WebHome&lt;br /&gt;
&lt;br /&gt;
=== Compilation et installation ===&lt;br /&gt;
&lt;br /&gt;
L&#039;auteur propose le rpm compilé ou les sources que l&#039;on peut trouver ici: http://motion.technolust.cx/download/. Voici comment installer les sources :&lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;90%&amp;quot; bgcolor=&amp;quot;#FCFCD8&amp;quot;&lt;br /&gt;
| &amp;lt;tt&amp;gt;$ tar zxvf motion-2.X.X.tar.gz&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;$ cd motion-2.X.X&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;$ ./configure &#039;&#039;(ajoutez ici : &#039;&#039;--prefix=/usr&amp;lt;/tt&amp;gt;&#039;&#039; si vous voulez l&#039;installer dans /usr et pas /usr/local comme c&#039;est le cas par défaut)&#039;&#039;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;$ make&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;$ su&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;Password: xxxxxxx&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;# make install &amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Big Brother is watching You ===&lt;br /&gt;
&lt;br /&gt;
motion s&#039;installe par défaut dans /usr/local/bin&lt;br /&gt;
&lt;br /&gt;
Pour tester le fonctionnement avec votre webcam, lancer:&lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;90%&amp;quot; bgcolor=&amp;quot;#FCFCD8&amp;quot;&lt;br /&gt;
| &amp;lt;tt&amp;gt;[dimitri@micro quickcam]$/usr/local/bin/motion&amp;lt;/tt&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Motion crée à partir du répertoire où vous avez lancé l&#039;exécutable (ici quickcam), une arborescence avec l&#039;année, le mois, le jour, l&#039;heure et la minute de l&#039;enregistrement. A l&#039;intérieur du dernier sous-répertoire on trouve les images jpeg datées avec en encadré les changements détectés. [http://motion.technolust.cx/examples/index.html Exemples] sur le site de Motion.&lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;90%&amp;quot; bgcolor=&amp;quot;#FCFCD8&amp;quot;&lt;br /&gt;
| &amp;lt;tt&amp;gt;[dimitri@micro quickcam]$ ls -a 2001/05/26/09/57/&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;./ ../ 36-00.jpg 36-01.jpg 36-02.jpg&amp;lt;/tt&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Maintenant que vous avez vu que tout fonctionne, vous allez pouvoir le paramétrer plus finement. Pour cela, vous avez 2 possibilités, par la ligne de commande (man motion) ou par un fichier de configuration &#039;motion.conf&#039; à placer dans le même répertoire à partir duquel vous exécutez motion.&lt;br /&gt;
&lt;br /&gt;
Exemple: Exécute motion sous forme de démon avec des images en ppm&lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;90%&amp;quot; bgcolor=&amp;quot;#FCFCD8&amp;quot;&lt;br /&gt;
| &amp;lt;tt&amp;gt;[dimitri@micro quickcam]$ motion -D -p&amp;lt;/tt&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Vous trouverez un exemple de fichier de configuration dans le répertoire /usr/local/examples/motion-2.X.X .&lt;br /&gt;
&lt;br /&gt;
Motion offre beaucoup de possibilités de configuration, comme stocker les évènements dans une base MySQL, vous envoyer des mails ou SMS pour vous prévenir, ou faire une vidéo des images capturées.&lt;br /&gt;
&lt;br /&gt;
== D&#039;autres programmes ==&lt;br /&gt;
&lt;br /&gt;
Ici, je vais mettre une liste de programmes qui peuvent utiliser votre WebCam.&lt;br /&gt;
&lt;br /&gt;
* [http://www.strusel007.de/linux/xawtv/ Xawtv] : prévu pour regarder la TV avec Linux, ce programme fonctionne aussi parfois avec les WebCams (par exemple ça marche avec ma Trust Space Cam 300 mais pas avec ma Creative WebCam 3 !). &lt;br /&gt;
* [http://www-mice.cs.ucl.ac.uk/multimedia/software/vic/ vic] : programme de video conférence sous Linux (existe sur la plupart des plateformes : Windows, Solaris, Mac, et...), sont fonctionnement n&#039;est pas forcément évident mais il donne de bon résulat. &lt;br /&gt;
* [http://www.openh323.org/ ophone] : programme de visiophone (non testé : un testeur ?). &lt;br /&gt;
* [http://www.smcc.demon.nl/camstream/ camstream] : un bon remplacement pour XawTV (fonctionne avec toutes mes WebCams, mais c&#039;est moins fluide). &lt;br /&gt;
* [http://ascii.dyne.org/ hasciicam] : utiliser votre WebCam dans un terminal en ASCII (ça marche! et on se reconnait!) &lt;br /&gt;
* [http://www.freewebfone.com/ FreeWebFone] : le nom parle tout seul (Dimitri : &amp;quot;J&#039;ai testé le programme FreeWebFone sous Linux avec un ami qui était lui sous windows. Dans les 2 versions de ce produit, le processeur est pris à 100% lors de son utilisation, néanmoins l&#039;application ne nécessite aucun réglage particulier et ne fonctionne pas trop mal.&amp;quot;).&lt;br /&gt;
* [http://cu30.sourceforge.net/ qVix] : [mailto:Pierre%20Yves&amp;lt;pierre-yves.b@wanadoo.fr&amp;gt; Pierre-Yves] l&#039;a testé mais n&#039;a pas réussi à le faire fonctionner, moi non plus : peut-être faut-il attendre une meilleur version.&lt;br /&gt;
* [http://www.pangea.org/~mavilar/qseeme/qseeme.html Q-SeeMe] : programme de video conférence utilisant le protocol CU-See-Me. &lt;br /&gt;
* [http://www.ekiga.org ekiga] : au départ c&#039;est un clone de NetMeeting, mais c&#039;est maintenant un softphone complet utilisant les protocoles sip et h263.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;merci&amp;quot;&amp;gt;Cette page est issue de la documentation &#039;pré-wiki&#039; de Léa a été convertie avec HTML::WikiConverter. Elle fut créée par Frédéric Bonnaud.&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Copy|2004|[[Utilisateur:Fred|Fred]], Dimitri Clatot|CC-BY-SA}}&lt;/div&gt;</summary>
		<author><name>LeaJice</name></author>
	</entry>
	<entry>
		<id>https://lea-linux.org/docs/index.php?title=Lea_Linux:Compte-rendu_AG_2004&amp;diff=16733</id>
		<title>Lea Linux:Compte-rendu AG 2004</title>
		<link rel="alternate" type="text/html" href="https://lea-linux.org/docs/index.php?title=Lea_Linux:Compte-rendu_AG_2004&amp;diff=16733"/>
		<updated>2009-02-13T17:17:58Z</updated>

		<summary type="html">&lt;p&gt;LeaJice : Révocation des modifications par 212.113.48.20 (Discussion) vers la dernière version de LeaJice&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Association]]&lt;br /&gt;
&lt;br /&gt;
= Présentation =&lt;br /&gt;
Chaque année Léa réunit ses amis pour faire le point de son activité et envisager son avenir. &lt;br /&gt;
&lt;br /&gt;
Nombre d&#039;inscrits à l&#039;association : XX au 30/04/2005. Il n&#039;y a pas de quorum lors des votes.&lt;br /&gt;
&lt;br /&gt;
Nombre de présents : XX (la liste d&#039;émargement est consultable sur demande) &lt;br /&gt;
&lt;br /&gt;
Nombre de procuration : XX (les procurations ne sont pas conservées)&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|Toto||A&lt;br /&gt;
|-&lt;br /&gt;
|Tata||B&lt;br /&gt;
|-&lt;br /&gt;
|Titi||C&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Le total des voix est donc de : XX&lt;br /&gt;
&lt;br /&gt;
= Bilan moral =&lt;br /&gt;
L&#039;association Léa existe officiellement depuis maintenant 3 ans ; son existence a été rendue&lt;br /&gt;
publique lors du salon Linux Solutions de février 2003. Le site Lea-Linux.org existe, quant à lui,&lt;br /&gt;
depuis 1999.&lt;br /&gt;
&lt;br /&gt;
L&#039;année a été riche en événements pour Léa. Tout d&#039;abord, c&#039;était la seconde année où Léa&lt;br /&gt;
sortait dans la vie réelle. Ainsi avons-nous participé à de nombreuses manifestations, dont vous&lt;br /&gt;
lirez le résumé plus bas. Le site a aussi évolué, dans la forme et dans le fond, comme vous avez&lt;br /&gt;
pu le constater.&lt;br /&gt;
&lt;br /&gt;
Nous avons tout au long de l&#039;année réalisé de nombreuses actions de prosélytisme et de&lt;br /&gt;
lobbying pour Linux et les Logiciels Libres, des conférences, des install-parties. Les comptes-rendus (lorsqu&#039;ils existent) et les photos prises lors de ces manifestations se trouvent sur le site http://vizu.lea-linux.org.&lt;br /&gt;
&lt;br /&gt;
L&#039;aide aux débutants et aux utilisateurs de Logiciels Libres a également continué à travers les&lt;br /&gt;
forums de Léa et la liste de diffusion aide@lea-linux.org. De nombreux articles, trucs et astuces,&lt;br /&gt;
entrées de la logithèque, driverthèque et léannuaire ont été ajoutés au site web. Merci à tous&lt;br /&gt;
les contributeurs.&lt;br /&gt;
&lt;br /&gt;
== Compte-rendu des actions ==&lt;br /&gt;
=== Site Web ===&lt;br /&gt;
Le site Web a évolué durant l&#039;année passée :&lt;br /&gt;
Édition du « Livret » Léa Book&lt;br /&gt;
À l&#039;occasion de Linux Solutions 2004, le Léa-Book (plus de 600 pages) a été imprimé et relié par&lt;br /&gt;
un imprimeur, grâce à l&#039;aide de l&#039;AFUL.&lt;br /&gt;
&lt;br /&gt;
=== Fiches Pratiques ===&lt;br /&gt;
Celles-ci s&#039;adressent aux débutants qui arrivent sur notre système libre préféré et qui ne&lt;br /&gt;
souhaitent pas pour autant s&#039;investir plus que cela dans l&#039;apprentissage des entrailles du&lt;br /&gt;
système d&#039;exploitation. Maston est à l&#039;origine de cette rubrique. Nous recherchons des&lt;br /&gt;
contributeurs pour de nouvelles fiches. http://lea-linux.org/fiches/&lt;br /&gt;
Groupes de travail&lt;br /&gt;
&lt;br /&gt;
Des groupes de travail se sont constitués cette année afin de publier de nouveaux articles,&lt;br /&gt;
mettre à jour la documentation et l&#039;adapter à toutes les distributions. Le groupe Slackware a&lt;br /&gt;
été particulièrement actif, et a oeuvré pour toutes les distributions.&lt;br /&gt;
&lt;br /&gt;
Le groupe fonctionnait bien, mais il ne s&#039;est pas senti assez soutenu par Léa. Certains membres&lt;br /&gt;
l&#039;ont donc quitté cette année. Léa tachera de mieux soutenir ce groupe et éventuellement&lt;br /&gt;
d&#039;autres (avis à contributeurs) l&#039;année prochaine.&lt;br /&gt;
&lt;br /&gt;
=== Relooking ===&lt;br /&gt;
En septembre, Léa s&#039;est habillée de neuf. L&#039;objectif de ce changement n&#039;était pas simplement&lt;br /&gt;
d&#039;offrir à Léa un look plus moderne, mais aussi de faire en sorte que la consultation soit plus&lt;br /&gt;
aisée, et de donner aux looks de Léa, LinuxFrench et l&#039;ASiLL un air de famille. Par la même&lt;br /&gt;
occassion le système des commentaires a été déplacé sur un Wiki.&lt;br /&gt;
&lt;br /&gt;
Le modèle de l&#039;index a été réalisé par Ayo. LinuxGraphic nous avait aussi proposé plusieurs modèles dont un avait eu beaucoup de succès, mais ce n&#039;est pas celui qui a remporté l&#039;adhésion du bureau. Nous les remercions beaucoup&lt;br /&gt;
pour le travail fourni.&lt;br /&gt;
&lt;br /&gt;
=== Phorum 5 ===&lt;br /&gt;
Dans le même temps, Léa changeait de moteur de forum pour phorum 5.0. La migration a été&lt;br /&gt;
en partie forcée par le fait que la nouvelle version à venir ne permettait plus l&#039;évolution : il&lt;br /&gt;
fallait le faire d&#039;urgence. Cette urgence a occasionné quelques soucis et désagréments qui ont&lt;br /&gt;
été vite réglés.&lt;br /&gt;
&lt;br /&gt;
=== LinuxFrench ===&lt;br /&gt;
La collaboration avec LinuxFrench a été renforcée: l&#039;association LinuxFrench a été dissoute et&lt;br /&gt;
ses membres ont rejoint Léa. Le serveur de Léa héberge maintenant le site de LinuxFrench.net.&lt;br /&gt;
Lors des divers manifestation où Léa et LinuxFrench étaient présents, les deux équipes ont&lt;br /&gt;
travaillé en commun tant à la préparation que pour la tenue des stands.&lt;br /&gt;
&lt;br /&gt;
=== Asill ===&lt;br /&gt;
Le projet de site asill.org, s&#039;il n&#039;a pas été abandonné a été fortement mis en sommeil par&lt;br /&gt;
manque de temps et de bénévoles pour s&#039;en occuper.&lt;br /&gt;
&lt;br /&gt;
=== Assoces-libres.org ===&lt;br /&gt;
Mise en place du site assoces-libres.org à l&#039;occasion de Linux Solutions 2005 afin de coordonner&lt;br /&gt;
les actions des associations du libre.&lt;br /&gt;
&lt;br /&gt;
== Manifestations ==&lt;br /&gt;
Remarque : Ce rapport ne mentionne que les actions pour lesquelles le conseil&lt;br /&gt;
d&#039;administration a été mis au courant. Il est donc possible que les actions de tous les membres&lt;br /&gt;
de Léa ne soient pas dans ce rapport. Dans le cas où vous participez à une manifestation au&lt;br /&gt;
nom de Léa, merci de nous le faire savoir avant afin que l&#039;on en parle dans l&#039;édito, et après afin&lt;br /&gt;
qu&#039;elle puisse figurer dans ce compte-rendu.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;3 au 5/02/2004 : Solutions Linux&#039;&#039;&#039;: Prosélytisme Linux et vente de Live CD, Léa-Book et T-Shirts Léa a gagné le 1er prix du meilleur site web.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;30/03 au 01/04/2004 : SETI&#039;&#039;&#039; : Conférences, prosélytisme Linux et vente de Live CD, Léa-Book et T-Shirts&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;3/4/2004 : Fête de l&#039;internet avec les Logiciels Libres à la Villette&#039;&#039;&#039; : Conférences, Install-Party et prosélytisme Linux&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;9 et 10/04/2004 : Game Over à Limoges&#039;&#039;&#039; : Prosélytisme Linux et vente de Live CD, Léa-Book et T-Shirts&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;1er/05/2004 : Journée du Libre avec La Gaule&#039;&#039;&#039; - Conférences, Install-Party et prosélytisme Linux&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;23 au 25/04/2004 : Libr&#039;east&#039;&#039;&#039; : Prosélytisme Linux et vente de Live CD, Léa-Book et T-Shirts&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;26 et 27/05/2004 : LinuxEdu en Haute-Savoie&#039;&#039;&#039; : Prosélytisme Linux et vente de Live CD, Léa-Book et T-Shirts&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;26/06/2004 : Léa Party à Orsay&#039;&#039;&#039; : Journée organisée par Léa. Pique-nique, conférences en parallèle de la Traduc Party de Parinux et repas en soirée&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;6 au 10/07/2004 : RMLL à Bordeaux (Renciontres Mondiales du Logiciel Libre)&#039;&#039;&#039; : Prosélytisme Linux et vente de Live CD, Léa-Book et T-Shirts. Léa a participé à l&#039;organisation du village associatif.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;11 et 12/09/2004 : Fête de l&#039;Huma&#039;&#039;&#039; : Prosélytisme des Logiciels Libres et vente de Live CD, Léa-Book et T-Shirts&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;6/11/2004 : Léa Party à Montpellier&#039;&#039;&#039; : Journée organisée par Léa et LinuxFrench. Journée de conférences à l&#039;espace numérique Kawenga et repas en soirée&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;18 au 20/11/2004 : Salon de l&#039;Éducation&#039;&#039;&#039; : Prosélytisme des Logiciels Libres et vente de Live CD, Léa-Book et T-Shirts&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;1 au 3 février 2005 : Solutions Linux&#039;&#039;&#039; : Organisation de l&#039;espace des conférences libres. Prosélytisme Linux et vente de Live CD, Léa-Book et T-Shirts Léa a gagné le 1er prix du meilleur site web et le 3e prix du dynamisme&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;19/03/2005 : Install-Party à la Villette&#039;&#039;&#039; : Install-Party et prosélytisme Linux&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;1 et 2 avril 2005 : Game Over à Limoges&#039;&#039;&#039; : Prosélytisme Linux et vente de Live CD, Léa-Book et T-Shirts&lt;br /&gt;
&lt;br /&gt;
== Lobbying ==&lt;br /&gt;
* Envoi de courrier cet été à l&#039;appel de la FFII.&lt;br /&gt;
&lt;br /&gt;
* Envoi de mail au nom de l&#039;association à divers sites web institutionnels (Radio France, France 2/3, etc ...) pour leur demander de respecter les standards.&lt;br /&gt;
&lt;br /&gt;
== Actions à mener ==&lt;br /&gt;
=== Site Web ===&lt;br /&gt;
Dams va s&#039;occuper de définir un nouveau format de document qui permettra d&#039;utiliser le format&lt;br /&gt;
d&#039;OpenOffice.org, le xHTML, et peut-être DocBook en entrée et le PDF, et l&#039;xHTML en sortie.&lt;br /&gt;
&lt;br /&gt;
Fred et Jice sont en train de mettre en place une interface d&#039;administration afin de permettre&lt;br /&gt;
de déléguer la mise en ligne de la documentation et sa gestion.&lt;br /&gt;
&lt;br /&gt;
L&#039;organisation des documents, qui a commencé à changer sous la houlette d&#039;Anne, va&lt;br /&gt;
continuer ; en particulier le LéaBook va en tenir compte.&lt;br /&gt;
&lt;br /&gt;
La publication des articles (relecture, tests, mise au format...) ainsi que leur gestion est un&lt;br /&gt;
travail qui demande beaucoup de ressources. Il en est de même pour la modération des trucs&lt;br /&gt;
et astuces, logithèque, driverthèque et léannuaire. Nous sommes à la recherche de&lt;br /&gt;
contributeurs motivés et rigoureux afin de prendre en charge la gestion d&#039;une ou plusieurs&lt;br /&gt;
sous-sections du site.&lt;br /&gt;
&lt;br /&gt;
La mise en place prochaine d&#039;un système de paiement en ligne va simplifier l&#039;adhésion à&lt;br /&gt;
l&#039;association ainsi que les dons.&lt;br /&gt;
&lt;br /&gt;
Concernant le projet asill.org, Albert prend les rênes du projet après avoir levé le pied sur&lt;br /&gt;
LinuxFrench. Les travaux doivent redémarrer en Mai.&lt;br /&gt;
&lt;br /&gt;
Enfin, nous souhaitons mettre en place une convention avec Lost-Oasis, notre hébergeur, afin&lt;br /&gt;
de leur retourner l&#039;ascenseur (don déductible des impôts). La faisabilité est à l&#039;étude.&lt;br /&gt;
&lt;br /&gt;
=== Manifestations ===&lt;br /&gt;
* 19, 20 et 21 mai 2005 : Linux Edu en Haute-Savoie&lt;br /&gt;
* 4 au 9 juillet 2005 : RMLL (Rencontres Mondiales du Logiciel Libre) à Dijon&lt;br /&gt;
* Samedis du libre à la Vilette : participation aux IP Parinux + conférences&lt;br /&gt;
* Léa-Party : date à définir en fonction des disponibilités de chacun&lt;br /&gt;
* Install-Party : Léa répondra aux diverses proposition selon les disponibilités.&lt;br /&gt;
* Léa à Sciences-Po : Journée logiciels libres à venir&lt;br /&gt;
* Salon de l&#039;Éducation&lt;br /&gt;
&lt;br /&gt;
=== Lobbying ===&lt;br /&gt;
Aide au développement de la Free Culture : &amp;quot;Alain Legrand&amp;quot; et son projet TNL (Télévision&lt;br /&gt;
Numérique Libre par Wifi)&lt;br /&gt;
&lt;br /&gt;
== Vote du bilan moral ==&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|pour||XX&lt;br /&gt;
|-&lt;br /&gt;
|contre||0&lt;br /&gt;
|-&lt;br /&gt;
|abstentions||0&lt;br /&gt;
|}&lt;br /&gt;
adopté à l&#039;unanimité des votants&lt;br /&gt;
&lt;br /&gt;
= Bilan financier =&lt;br /&gt;
Le bilan financier et le budget sont disponibles [[Media:bilan_financier_2004.pdf|ici]].&lt;br /&gt;
&lt;br /&gt;
== Vote du bilan financier ==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|pour||XX&lt;br /&gt;
|-&lt;br /&gt;
|contre||0&lt;br /&gt;
|-&lt;br /&gt;
|abstentions||0&lt;br /&gt;
|}&lt;br /&gt;
adopté à l&#039;unanimité des votants&lt;br /&gt;
&lt;br /&gt;
= Election au CA =&lt;br /&gt;
Le candidat est :&lt;br /&gt;
* Stéphane Esté-Gracias&lt;br /&gt;
&lt;br /&gt;
=== Résultats du vote ===&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|||Pour||Contre||Abstention&lt;br /&gt;
|-&lt;br /&gt;
|Stéphane||X||0||0&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Le candidat est élu.&lt;br /&gt;
&lt;br /&gt;
Après ce vote, l&#039;AG est clôturée.&lt;br /&gt;
&lt;br /&gt;
{{DP}}&lt;/div&gt;</summary>
		<author><name>LeaJice</name></author>
	</entry>
	<entry>
		<id>https://lea-linux.org/docs/index.php?title=XMPP&amp;diff=16728</id>
		<title>XMPP</title>
		<link rel="alternate" type="text/html" href="https://lea-linux.org/docs/index.php?title=XMPP&amp;diff=16728"/>
		<updated>2009-02-09T11:06:07Z</updated>

		<summary type="html">&lt;p&gt;LeaJice : /* Matériel requis : */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Services de messagerie]]&lt;br /&gt;
= Serveur de messagerie instantanée Jabber =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;leatitre&amp;quot;&amp;gt;Serveur de messagerie instantanée Jabber&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;leapar&amp;quot;&amp;gt;par [mailto:laurent_dot_dubettier-grenier_at_laposte_dot_net Laurent DUBETTIER-GRENIER]&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;leadesc&amp;quot;&amp;gt;Installation d&#039;un serveur de messagerie instantanée Jabber&amp;lt;/div&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Introduction : ==&lt;br /&gt;
&lt;br /&gt;
Cet article est une variante de l&#039;article original paru dans le numéro 25 (Août 2003), du magazine [http://www.dppresse.com/pl.htm Planète-Linux].&lt;br /&gt;
&lt;br /&gt;
Jabber est un protocole de communication XML développé sous l&#039;égide de la [http://www.jabber.org Jabber Software Foundation]. Un protocole, c&#039;est un &amp;quot;langage&amp;quot; particulier permettant à des ordinateurs de communiquer entre eux Jabber est plus particulièrement développé pour la messagerie instantanée, et c&#039;est un protocole libre (licence [http://www.gnu.org/gpl.html GPL]/[http://www.jabber.org/jsf/josl.php JOSL]). Comme ses principaux concurrents privés (AIM, ICQ, MSN, Yahoo), il permet de connaître et de faire connaître votre état de présence sur le réseau Internet et d&#039;envoyer ou de recevoir des messages instantanément. Si vous n&#039;êtes pas connecté, vos messages sont stockés et distribués dès que vous revenez en ligne.&lt;br /&gt;
&lt;br /&gt;
L&#039;intérêt de Jabber ? il y en a plusieurs. Le protocole Jabber est libre, public, ouvert et basé sur un langage connu (XML), gage de pérennité et de développement futur. Il est et restera non payant. Il permet donc de créer des serveurs extensibles (ajout d&#039;une brique au serveur), décentralisés (création de son propre serveur) et sûr (sans espion logiciel, avec cryptage SSL). Il n&#039;est par contre pas nativement multi-protocole, mais des passerelles vers les autres services de messagerie instantanée existent, à installer en complément du serveur de base.&lt;br /&gt;
&lt;br /&gt;
Outre le serveur de messagerie instantanée Jabber, il existe de nombreux autres serveurs utilisant le protocole Jabber. [http://wpjabber.jabberstudio.org WPJabber] est une alternative libre à Jabber, tandis que le site http://www.jabber.com diffuse un des nombreux serveurs sous licence payante et propriétaire. Un bref comparatif des serveurs existant est disponible [http://www.jabber.org/admin/serverlist.php ici]. Le choix est donc vaste et devrait permettre de couvrir vos besoins : de Windows à Solaris, en passant par OS X, intégrable avec une base de données MySql, Oracle ou LDAP, vous trouverez forcément une version publique ou commerciale du serveur Jabber qui vous conviendra.&lt;br /&gt;
&lt;br /&gt;
Enfin, pour se connecter à votre serveur, une multitude de clients existent, en licence libre ou propriétaire : on peut citer [http://gabber.sourceforge.net Gabber], [http://gaim.sourceforge.net Gaim] et [http://psi.affinix.com Psi] sous Linux, Exodus sous Windows.&lt;br /&gt;
&lt;br /&gt;
L&#039;article qui suit devrait vous permettre d&#039;installer un serveur de messagerie instantanée Jabber (version 1.4.2), soit à partir des sources, soit à partir des paquetages rpm, sur un serveur [http://www.mandrakesoft.com Mandrake 9.1]. Mais le principe est identique pour toute distribution. Le hostname du serveur sera jabber.masociete.com et l&#039;adresse IP 192.168.0.1.&lt;br /&gt;
&lt;br /&gt;
== Matériel requis : ==&lt;br /&gt;
&lt;br /&gt;
Le matériel requis dépend du nombre de personnes qui vont se connecter à votre serveur : un système Linux équipé d&#039;un processeur de type Pentium avec 512 Mo de Ram peut supporter de 100 à 1000 utilisateurs, avec un taux de charge maximum de 50%. La bande passante nécessaire est de 15 bits par seconde par utilisateur connecté Attention, sans recompilation, Linux n&#039;accepte pas plus de 1024 connexions simultanées.&lt;br /&gt;
&lt;br /&gt;
== Installation à partir des sources : ==&lt;br /&gt;
&lt;br /&gt;
{{Preferer_un_paquetage|jabber}}&lt;br /&gt;
&lt;br /&gt;
Se logger comme root.&amp;lt;br /&amp;gt; Récupérer la source du serveur Jabberd à l&#039;adresse suivante : http://jabberd.jabberstudio.org/downloads/jabber-1.4.2.tar.gz&amp;lt;br /&amp;gt; et la copier dans le répertoire &amp;lt;code&amp;gt;/usr/local&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Décompresser le fichier source :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# tar zxvf jabber-1.4.2.tar.gz&amp;lt;/nowiki&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Renommer le répertoire jabber-1.4.2 :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# mv jabber-1.4.2 jabber&amp;lt;/nowiki&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Récupérer le code source de openssl (openssl-0.9.7b.tar.gz) à l&#039;adresse suivante : http://www.openssl.org. Et la copier dans le répertoire /usr/local. Décompresser le fichier source :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# tar zxvf openssl-0.9.7b.tar.gz&amp;lt;/nowiki&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Renommer le répertoire openssl-0.9.7b :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# mv openssl-0.9.7b ssl&amp;lt;/nowiki&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Changer de répertoire :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;cd ssl&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Compiler openssl (Perl5 doit notamment être installé) :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# ./config&amp;lt;/nowiki&amp;gt;&amp;lt;br /&amp;gt; # make&amp;lt;br /&amp;gt; # make test&amp;lt;br /&amp;gt; # make install&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Changer de répertoire :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;cd /usr/local/jabber&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Installer le serveur jabber, avec prise en charge du cryptage de la connexion ssl :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;$ ./configure --enable-ssl 1&amp;gt;sortie.txt 2&amp;gt;&amp;amp;1&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vérifier que ssl a bien été pris en compte. Les premières lignes du fichier sortie.txt doivent contenir :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;Running Jabber Configure&amp;lt;br /&amp;gt; Searching for SSL... Found.&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Une erreur existe dans le fichier résultant platform-settings, qu&#039;il faut corriger. Editer le fichier avec vi par exemple :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;$ vi platform-settings&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Repérer la ligne :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;CFLAGS= -I/usr/local/ssl/include/openssl -DHAVE_SSL&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Et la transformer en :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;CFLAGS=-I/usr/local/ssl/include/openssl -I/usr/local/ssl/include -DHAVE_SSL&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Faire la même modification pour la ligne &amp;lt;code&amp;gt;CCFLAGS&amp;lt;/code&amp;gt;. Taper alors :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;$ make&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Et c&#039;est terminé, votre serveur de messagerie instantanée est installé (enfin presque...) !&lt;br /&gt;
&lt;br /&gt;
== Configuration : ==&lt;br /&gt;
&lt;br /&gt;
L&#039;essentiel de la configuration du serveur s&#039;effectue en intervenant sur le fichier &amp;lt;code&amp;gt;/usr/local/jabber/jabber.xml&amp;lt;/code&amp;gt; (ou &amp;lt;code&amp;gt;/etc/jabber/jabber.xml&amp;lt;/code&amp;gt; si vous avez utilisé un paquet Mandrake). Avant toute modification, il est judicieux de faire une copie de secours du fichier original&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;note&amp;quot;&amp;gt;NB : le fichier jabber.xml étant au format XML, la mise en commentaire est réalisée en utilisant des balises : &amp;lt;tt&amp;gt;&amp;lt;!--&amp;lt;/tt&amp;gt; (balise ouvrante) et &amp;lt;tt&amp;gt;--&amp;gt;&amp;lt;/tt&amp;gt; (balise fermante), comme en HTML&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ouvrir le fichier jabber.xml et modifier la ligne :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;host&amp;gt; &amp;lt;jabberd:cmdline flag=&amp;quot;h&amp;quot;&amp;gt;localhost&amp;lt;/jabberd:cmdline&amp;gt; &amp;lt;/host&amp;gt; &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
en remplaçant localhost par votre nom de domaine (jabber.masociete.com par exemple), ou par l&#039;adresse IP de votre serveur Jabber (déconseillé). Si vous créer un serveur jabber interne, sans lien avec internet, vous pouvez commenter cette ligne :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;update&amp;gt; &amp;lt;jabberd:cmdline flag=&amp;quot;h&amp;quot;&amp;gt;localhost&amp;lt;/jabberd:cmdline&amp;gt; &amp;lt;/update&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
C&#039;est la commande permettant de contrôler automatiquement la présence de mise à jour sur le serveur jabber.org. Configurer alors le répertoire destiné à stocker les fichiers de profils des utilisateurs :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;mkdir -p /usr/local/jabber/spool/jabber.masociete.com&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
en remplaçant jabber.masociete.com par le nom que vous avez indiqué ci-dessus à la place de localhost dans la balise &amp;lt;code&amp;gt;&amp;lt;host&amp;gt;&amp;lt;/code&amp;gt; du fichier jabber.xml. Démarrez Jabber et tester son fonctionnement sans cryptage ssl (voir rubrique [#demarrer-arreter Démarrer/Arrêter le serveur]). Si tout fonctionne normalement, on peut passer à la suite.&lt;br /&gt;
&lt;br /&gt;
Il faut maintenant créer la clé de cryptage SSL. Rester dans le répertoire /usr/local/jabber et repérer l&#039;emplacement de l&#039;éxécutable openssl :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;which openssl&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il réside normalement dans le répertoire &amp;lt;code&amp;gt;/usr/bin/openssl&amp;lt;/code&amp;gt;. C&#039;est ce chemin qui devra figurer dans la première ligne du fichier keygen.sh.&amp;lt;br /&amp;gt; Créer un fichier keygen.sh :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;$ vi keygen.sh&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
et taper le code suivant :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt; #!/bin/sh&amp;lt;br /&amp;gt; ## régler le chemin ci desous sur le chemin de openssl&amp;lt;br /&amp;gt; OPENSSL=/usr/bin/openssl&amp;lt;br /&amp;gt; ## Génération du certificat et de la clé&amp;lt;br /&amp;gt; $OPENSSL req -new -x509 -newkey rsa:1024 -keyout privkey.pem -out key.pem&amp;lt;br /&amp;gt; ## effacement de la phrase servant de mot de passe&amp;lt;br /&amp;gt; $OPENSSL rsa -in privkey.pem -out privkey.pem&amp;lt;br /&amp;gt; ## Assemblage &amp;lt;br /&amp;gt; cat privkey.pem &amp;gt;&amp;gt; key.pem&amp;lt;br /&amp;gt; ## Effacement&amp;lt;br /&amp;gt; rm privkey.pem &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Enregistrer et rendre exécutable ce fichier :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;chmod u+x keygen.sh&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Exécuter ce fichier :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;./keygen.sh&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Répondre aux questions posées. A la fin de l&#039;éxécution, vous devez trouver dans le répertoire &amp;lt;code&amp;gt;/usr/local/jabber&amp;lt;/code&amp;gt; un fichier &amp;lt;code&amp;gt;key.pem&amp;lt;/code&amp;gt;. Tester alors le mode ssl :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;openssl s_client -connect 192.168.0.1:5223&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
en remplaçant 192.168.0.1 par l&#039;adresse ip de votre serveur. Vous devez recevoir une réponse du type :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;CONNECTED(00000003)&amp;lt;br /&amp;gt; depth=0 /C=FR/ST=FRANCE/L=Departement/O=organization/OU=Jabber/CN=contact name/Email=email address&amp;lt;br /&amp;gt; verify error:num=18:self signed certificate&amp;lt;br /&amp;gt; verify return:1&amp;lt;br /&amp;gt; depth=0 /C=FR/ST=FRANCE/L=Departement/O=organization/OU=Jabber/CN=contact name/Email=email address&amp;lt;br /&amp;gt; verify return:1&amp;lt;br /&amp;gt; ---&amp;lt;br /&amp;gt; Certificate chain&amp;lt;br /&amp;gt; 0 s:/C=FR/ST=FRANCE/L=Departement/O=organization/OU=Jabber/CN=contact name/Email=email address&amp;lt;br /&amp;gt; i:/C=FR/ST=FRANCE/L=Departement/O=organization/OU=Jabber/CN=contact name/Email=email address&amp;lt;br /&amp;gt; ---&amp;lt;br /&amp;gt; Server certificate&amp;lt;br /&amp;gt; -----BEGIN CERTIFICATE-----&amp;lt;br /&amp;gt; MIIDdDCCAt2gAwIBAgIBADANBgkqhkiG9w0BAQQFADCBiTELMAkGA1UEBhMCVVMx EDAOBgNVBAgTB0FyaXpvbmExEDAOBgNVBAcTB1Bob2VuaXgxETAPBgNVBAoTCERJ TExJR0FGMQ8wDQYDVQQLEwZKYWJiZXIxFzAVBgNVBAMTDkNocmlzIE1jRG9uYWxk MRkwFwYJKoZIhvcNAQkBFgpwaHgtamFiYmVyMB4XDTAxMDYwNjAxNTMwNloXDTAx MDcwNjAxNTMwNlowgYkxCzAJBgNVBAYTAlVTMRAwDgYDVQQIEwdBcml6b25hMRAw DgYDVQQHEwdQaG9lbml4MREwDwYDVQQKEwhESUxMSUdBRjEPMA0GA1UECxMGSmFi YmVyMRcwFQYDVQQDEw5DaHJpcyBNY0RvbmFsZDEZMBcGCSqGSIb3DQEJARYKcGh4 LWphYmJlcjCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEArbyosgcyf9VNpPZc +nU6yKdfAsOSpBu/n/MkChis5POuLkXo62WEoiYuDYF6bmd6XYaVC7ZwItcCwTIv OqdErh4u82E2qeArN0j9eq6EX+MMrYBSkv2nzwabNkkWPCS9VaOsVWx+kvRw598p ACyANf52liFhfDGISIoTlBOn+ysCAwEAAaOB6TCB5jAdBgNVHQ4EFgQUv9mxa1Yj o7Um9ZK0OSW0phiG23AwgbYGA1UdIwSBrjCBq4AUv9mxa1Yjo7Um9ZK0OSW0phiG 23ChgY+kgYwwgYkxCzAJBgNVBAYTAlVTMRAwDgYDVQQIEwdBcml6b25hMRAwDgYD VQQHEwdQaG9lbml4MREwDwYDVQQKEwhESUxMSUdBRjEPMA0GA1UECxMGSmFiYmVy MRcwFQYDVQQDEw5DaHJpcyBNY0RvbmFsZDEZMBcGCSqGSIb3DQEJARYKcGh4LWph YmJlcoIBADAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBBAUAA4GBAGzAwYHlBY+P ioqT8O4t4o30MkIDR7Q9Wqc0Uv1dUXViOKDzkzHXV/gB89yOmFVf6qNg7GB4rexs 0/fMmlSOkvXJPRCvmX05J9c5JpvcprkTjp7ECHPNZgaGsdNT+lilJ2f83uTvpJgM KoQY9OKbV4NnkxDM8lxCjvIvGvrbvnkR&amp;lt;br /&amp;gt; -----END CERTIFICATE-----&amp;lt;br /&amp;gt; subject=/C=FR/ST=FRANCE/L=Departement/O=organization/OU=Jabber/CN=contact name/Email=email address&amp;lt;br /&amp;gt; issuer=/C=FR/ST=FRANCE/L=Departement/O=organization/OU=Jabber/CN=contact name/Email=email address&amp;lt;br /&amp;gt; ---&amp;lt;br /&amp;gt; No client certificate CA names sent&amp;lt;br /&amp;gt;---&amp;lt;br /&amp;gt;SSL handshake has read 1042 bytes and written 320 bytes&amp;lt;br /&amp;gt;---&amp;lt;br /&amp;gt;New, TLSv1/SSLv3, Cipher is DES-CBC3-SHA&amp;lt;br /&amp;gt; Server public key is 1024 bit&amp;lt;br /&amp;gt;SSL-Session:&amp;lt;br /&amp;gt;Protocol : TLSv1&amp;lt;br /&amp;gt;Cipher : DES-CBC3-SHA&amp;lt;br /&amp;gt; Session-ID: A23C1FB04F635EC09F92CBD722DAB8BB1503B54D4A0E9C61B3708CB33D6ED372&amp;lt;br /&amp;gt; Session-ID-ctx:&amp;lt;br /&amp;gt;Master-Key: C8C25C17D5B4312E1440DBC956FF5738829C50E16E8E704010B84B1A8D33C405995D8B7FB02E06988890C7ED400ACF32&amp;lt;br /&amp;gt; Key-Arg : None&amp;lt;br /&amp;gt;Start Time: 991792771&amp;lt;br /&amp;gt;Timeout : 300 (sec)&amp;lt;br /&amp;gt;Verify return code: 0 (ok)&amp;lt;br /&amp;gt;---&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ouvrir le fichier &amp;lt;code&amp;gt;/usr/local/jabber/jabber.xml&amp;lt;/code&amp;gt; et valider la prise en charge du mode SSL en repérant la ligne :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;ip port=&#039;5222&#039;/&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
et en ajoutant la ligne suivante à la suite :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;ssl port=&#039;5223&#039;&amp;gt;192.168.0.1&amp;lt;/ssl&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
De même, repérer la ligne :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;ssl&amp;gt; &amp;lt;key ip=&#039;192.168.0.1&#039;&amp;gt;/usr/local/jabber/key.pem&amp;lt;/key&amp;gt; &amp;lt;/ssl&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Redémarrez le serveur et tester avec cryptage ssl (voir rubrique [#demarrer-arreter Démarrer/Arrêter le serveur]).&lt;br /&gt;
&lt;br /&gt;
== Installation simplifiée : ==&lt;br /&gt;
&lt;br /&gt;
Si compiler les sources vous paraît trop compliqué, sous Mandrake 9.1 et KDE 3.1, il suffit d&#039;utiliser l&#039;interface graphique (Configuration / Paquetages / Installer des logiciels). Le paquetage actuel est jabber-1.4.2a-6mdk.i586.rpm. Le fichier principal de configuration est alors &amp;lt;code&amp;gt;/etc/jabber/jabber.xml&amp;lt;/code&amp;gt;. Les seules modifications à effectuer sont celles indiquées ci-dessus concernant ce fichier. La clé SSL est générée automatiquement.&lt;br /&gt;
&lt;br /&gt;
== Démarrage/Arrêt du serveur : ==&lt;br /&gt;
&lt;br /&gt;
Si vous avez installé Jabber depuis les sources (fichier tar.gz), pour démarrez le serveur, tapez :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# ./usr/local/jabberd/jabberd&amp;lt;/nowiki&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il y a un mode debug :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# ./usr/local/jabber/jabberd/jabberd -D&amp;lt;/nowiki&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Si vous avez installé Jabber à partir du fichier rpm, pour démarrer/arrêter/redémarrer, votre serveur Jabber, tapez :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;service jabber start/stop/restart&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
et le mode &amp;quot;debug&amp;quot; (option -D) :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# service jabber stop&amp;lt;/nowiki&amp;gt;&amp;lt;br /&amp;gt; # /usr/sbin/jabberd -h jabber.masociete.com -c /etc/jabber/jabber.xml -B -D&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour vérifier que le serveur Jabber est effectivement en service, tapez :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;ps ax | grep jabber&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vous devez obtenir un résultat ressemblant aux deux lignes suivantes :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;3052 ? S 0:00 /usr/sbin/jabberd -h jabber.masociete.com -c /etc/jabber/jabber.xml -B&amp;lt;br /&amp;gt;&amp;gt; 3053 ? S 0:00 /usr/sbin/jabberd -h jabber.masociete.com -c /etc/jabber/jabber.xml -B&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
où jabber.masociete.com est remplacé par le hostname de votre serveur.&lt;br /&gt;
&lt;br /&gt;
Le serveur jabber utilise les ports 5222 (connexion normale avec le client), 5223 (connexion sécurisée avec le client) et 5269 (connexion entre serveurs). En tapant :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;netstat -an | grep -E &#039;5222&#039;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
vous devez obtenir la ligne suivante, qui vous indique que le serveur Jabber écoute le port 5222 : :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;tcp 0 0 0.0.0.0:5222 0.0.0.0:* LISTEN&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
De même pour 5223 et 5269.&lt;br /&gt;
&lt;br /&gt;
Pour gérer le démarrage, vous pouvez utiliser chkconfig :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# chkconfig --list | less # liste des services démarrés&amp;lt;/nowiki&amp;gt;&amp;lt;br /&amp;gt; # chkconfig --add jabber # ajouter jabber à la liste des services&amp;lt;br /&amp;gt; # chkconfig jabber off # inhibition du démarrage automatique&amp;lt;br /&amp;gt; # chkconfig jabber on # démarrage automatique au démarrage&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Passerelles : ==&lt;br /&gt;
&lt;br /&gt;
Il existe plusieurs briques additionnelles au serveur jabber de base : mu-conference (conférence multi-utilisateurs), jud (Jabber User Directory : répertoire des utilisateurs), et les passerelles pour les utilisateurs de AIM, ICQ, MSN et Yahoo.&amp;lt;br /&amp;gt;Les paquetages sont distribués avec la Mandrake 9.1, et peuvent donc être installés facilement (Configuration / Paquetages / Installer des logiciels).&amp;lt;br /&amp;gt;Il faut ensuite les déclarer dans le fichier jabber.xml : c&#039;est généralement expliqué dans le fichier README du paquetage (pour savoir ou il est : &amp;lt;code&amp;gt;rpm -ql nom_du_paquetage&amp;lt;/code&amp;gt;) et le fichier jabber.xml est abondamment commenté.&amp;lt;br /&amp;gt; L&#039;exemple suivant s&#039;applique au paquetage jabber-jud. Une fois le paquetage installé, il existe un fichier &amp;lt;code&amp;gt;jud.so&amp;lt;/code&amp;gt; dans le répertoire &amp;lt;code&amp;gt;/usr/lib/jabber/jud&amp;lt;/code&amp;gt;&amp;lt;br /&amp;gt; Pour activer ce service, il faut insérer les lignes suivantes dans le fichier jabber.xml, dans la zone où sont défini les services : &amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;service id=&amp;quot;jud&amp;quot;&amp;gt; &amp;lt;br /&amp;gt;&amp;lt;host&amp;gt;jud.monserveurjabber&amp;lt;/host&amp;gt;&amp;lt;br /&amp;gt; &amp;lt;load&amp;gt;&amp;lt;jud&amp;gt;./jud/jud.so&amp;lt;/jud&amp;gt;&amp;lt;/load&amp;gt;&amp;lt;br /&amp;gt; &amp;lt;jud xmlns=&amp;quot;jabber:config:jud&amp;quot;&amp;gt;&amp;lt;br /&amp;gt; &amp;lt;vcard&amp;gt;&amp;lt;br /&amp;gt; &amp;lt;fn&amp;gt;Annuaire des utilisateurs locaux&amp;lt;/fn&amp;gt;&amp;lt;br /&amp;gt; &amp;lt;desc&amp;gt;Ce service est un annuaire des utilisateurs locaux&amp;lt;/desc&amp;gt;&amp;lt;br /&amp;gt; &amp;lt;url&amp;gt;&amp;lt;/url&amp;gt;&amp;lt;br /&amp;gt; &amp;lt;/vcard&amp;gt;&amp;lt;br /&amp;gt; &amp;lt;/jud&amp;gt;&amp;lt;br /&amp;gt; &amp;lt;/service&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt; Et à la place du jud existant, qui déclare l&#039;annuaire du serveur jabber.org (users.jabber.org), dans la zone&amp;lt;code&amp;gt; &amp;lt;browse&amp;gt; &amp;lt;/code&amp;gt; :&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt; &amp;lt;service type=&amp;quot;jud&amp;quot; jid=&amp;quot;jud.monserveurjabber&amp;quot; name=&amp;quot;Annuaire des utilisateurs locaux&amp;quot;&amp;gt; &amp;lt;br /&amp;gt; &amp;lt;ns&amp;gt;jabber:iq:search&amp;lt;/ns&amp;gt;&amp;lt;br /&amp;gt; &amp;lt;ns&amp;gt;jabber:iq:register&amp;lt;/ns&amp;gt;&amp;lt;br /&amp;gt; &amp;lt;/service&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Redémarrez jabber : le service d&#039;annuaire devrait maintenant exister.&amp;lt;br /&amp;gt; Depuis Gabber, il faut choisir Actions/Consultations des agents IM pour s&#039;inscrire dans l&#039;annuaire des utilisateurs locaux de jabber.masociete.com&lt;br /&gt;
&lt;br /&gt;
Liste des extensions serveurs :&lt;br /&gt;
&lt;br /&gt;
* Conférence multi-utilisateurs : http://mu-conference.jabberstudio.org/&lt;br /&gt;
* JUD (Jabber User Directory) : http://download.jabber.org/dists/1.4/final/&lt;br /&gt;
* Passerelle AIM : http://aim-transport.jabberstudio.org/&lt;br /&gt;
* Passerelle ICQ : http://icqv7-t.sourceforge.net/&lt;br /&gt;
* Passerelle MSN : http://msn-transport.jabberstudio.org/&lt;br /&gt;
* Passerelle Yahoo : http://yahoo-transport.jabberstudio.org/&lt;br /&gt;
&lt;br /&gt;
== Intranet : ==&lt;br /&gt;
&lt;br /&gt;
Pour une utilisation en Intranet, sans communication avec l&#039;extérieur, il faut réaliser les opérations suivantes :&lt;br /&gt;
&lt;br /&gt;
* Interdire la communication entre serveurs : pour cela, fermer le port 5269 du firewall de votre organisation. &lt;br /&gt;
* Interdire la communication avec les clients extérieurs : fermer les ports 5222 et 5223 du firewall de votre passerelle internet. &lt;br /&gt;
* Commenter les sections &amp;lt;code&amp;gt;&amp;lt;service id=&amp;quot;dnsrv&amp;quot;&amp;gt;  &amp;lt;/service&amp;gt; et &amp;lt;service id=&amp;quot;s2s&amp;quot;&amp;gt;  &amp;lt;/service&amp;gt;&amp;lt;/code&amp;gt; &lt;br /&gt;
* Commenter la ligne &amp;lt;code&amp;gt;&amp;lt;update&amp;gt;  &amp;lt;/update&amp;gt;&amp;lt;/code&amp;gt; (mise à jour automatique : ce sera à vous de la faire manuellement) &lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;note&amp;quot;&amp;gt;NB : Pour bloquer des ports sur le firewall shorewall, à partir du panneau de contrôle (Configuration / Panneau de contrôle Mandrake), il faut choisir Sécurité/DrakFirewall, décocher la case Tout et cocher uniquement les services que vous souhaitez autoriser.&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Votre serveur ne peut alors plus communiquer avec l&#039;extérieur. Pour des raisons de sécurité, il est important de désactiver l&#039;authentification par mot de passe en clair : commentez la ligne &amp;lt;code&amp;gt;&amp;lt;mod_auth_plain&amp;gt; &amp;lt;mod_plain&amp;gt;&amp;lt;/code&amp;gt;. N&#039;oubliez pas de redémarrer le serveur jabber chaque fois que vous effectuez une modification du fichier jabber.xml (service jabber restart)&lt;br /&gt;
&lt;br /&gt;
== Webmin ==&lt;br /&gt;
&lt;br /&gt;
Pour configurer facilement votre serveur, éventuellement depuis un poste distant, il est judicieux d&#039;utiliser webmin. Si ce n&#039;est pas déjà fait, installer Webmin puis, depuis un navigateur Internet, rentrez l&#039;adresse &amp;lt;code&amp;gt;https://198.168.0.1:10000&amp;lt;/code&amp;gt; (toujours en remplaçant 192.168.0.1 par l&#039;adresse de votre serveur), et se connecter en tant que root.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;note&amp;quot;&amp;gt;NB : Si vous accéder à votre serveur depuis un poste distant Windows, sans service DNS, il sera nécessaire de rajouter la ligne suivante dans le fichier &amp;lt;code&amp;gt;C:\WINNT\SYSTEM32\DRIVERS\ETC\HOSTS&amp;lt;/code&amp;gt; :&amp;lt;br /&amp;gt;&amp;lt;code&amp;gt;192.168.0.1 jabber.masociete.com&amp;lt;/code&amp;gt;&amp;lt;br /&amp;gt; Ceci est d&#039;ailleurs valable aussi pour vous connecter au serveur Jabber depuis un client installé sur un poste Windows.&amp;lt;/div&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Il faut ensuite choisir l&#039;onglet &amp;quot;serveurs&amp;quot; et trouver l&#039;icône &amp;quot;Jabber IM Server&amp;quot;. L&#039;interface graphique permet la définition de nombreux paramètres :&lt;br /&gt;
&lt;br /&gt;
* Général Options : emplacement des fichiers log.&lt;br /&gt;
* IP Access Control : gestion des autorisations/refus d&#039;accès.&lt;br /&gt;
* Messages : définition des messages de bienvenue de votre serveur.&lt;br /&gt;
* User filters : options de filtrage de message.&lt;br /&gt;
* Jabber modules : modules chargés par le serveur.&lt;br /&gt;
* Administration users : définition des administrateurs et de leurs droits.&amp;lt;br /&amp;gt; Le droit lire permet de lire les messages destinés à l&#039;administrateur du serveur et de voir la liste des utilisateurs connectés&amp;lt;br /&amp;gt; Le droit écrire permet d&#039;envoyer un message à tous les utilisateurs.&lt;br /&gt;
* Karma traffic control : réglage de la bande passante allouée au serveur (taux de charge).&lt;br /&gt;
* Edit config file : édition du fichier jabber.xml.&lt;br /&gt;
&lt;br /&gt;
== Debugage ==&lt;br /&gt;
&lt;br /&gt;
Il est possible de tester le bon foctionnement de Jabber via Telnet. Ouvrir une session telnet :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;telnet jabber.masociete.com 5222&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le serveur doit vous répondre :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;Trying 127.0.0.1...&amp;lt;br /&amp;gt; Connected to jabber.masociete.com.&amp;lt;br /&amp;gt; Escape character is &#039;^]&#039;.&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Taper les instructions suivantes :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;stream:stream&amp;lt;br /&amp;gt; to=&#039;jabber.masociete.com&#039;&amp;lt;br /&amp;gt; xmlns=&#039;jabber:client&#039;&amp;lt;br /&amp;gt; xmlns:stream=&#039;http://etherx.jabber.org/streams&#039;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vous devez recevoir immédiatement une réponse :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;?xml version=&#039;1.0&#039;?&amp;gt; &amp;lt;stream:stream&amp;lt;br /&amp;gt; xmlns:stream=&#039;http://etherx.jabber.org/streams&#039; id=&#039;nombre-aleatoire&#039;&amp;lt;br /&amp;gt; xmlns=&#039;jabber:client&#039; from=&#039;jabber.masociete.com&#039;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Demander alors les informations nécessaires pour enregistrer un compte :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;iq id=&#039;reg1&#039; type=&#039;get&#039;&amp;gt;&amp;lt;br /&amp;gt; &amp;lt;query xmlns=&#039;jabber:iq:register&#039;/&amp;gt;&amp;lt;br /&amp;gt; &amp;lt;/iq&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vous devriez recevoir quelque chose du type :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;iq id=&#039;reg1&#039; type=&#039;result&#039;&amp;gt;&amp;lt;br /&amp;gt; &amp;lt;query xmlns=&#039;jabber:iq:register&#039;&amp;gt;&amp;lt;br /&amp;gt; &amp;lt;instructions&amp;gt;&amp;lt;br /&amp;gt; Choose a username and password to register with this server.&amp;lt;br /&amp;gt; &amp;lt;/instructions&amp;gt;&amp;lt;br /&amp;gt; &amp;lt;name/&amp;gt;&amp;lt;br /&amp;gt; &amp;lt;email/&amp;gt;&amp;lt;br /&amp;gt; &amp;lt;username/&amp;gt;&amp;lt;br /&amp;gt; &amp;lt;password/&amp;gt;&amp;lt;br /&amp;gt; &amp;lt;/query&amp;gt;&amp;lt;br /&amp;gt; &amp;lt;/iq&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Envoyer alors vos informations d&#039;enregistrement :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;iq id=&#039;reg2&#039; type=&#039;set&#039;&amp;gt;&amp;lt;br /&amp;gt; &amp;lt;query xmlns=&#039;jabber:iq:register&#039;&amp;gt;&amp;lt;br /&amp;gt; &amp;lt;username&amp;gt;jabberuser&amp;lt;/username&amp;gt;&amp;lt;br /&amp;gt; &amp;lt;password&amp;gt;secret&amp;lt;/password&amp;gt;&amp;lt;br /&amp;gt; &amp;lt;name&amp;gt;Votre-Nom&amp;lt;/name&amp;gt;&amp;lt;br /&amp;gt; &amp;lt;email&amp;gt;votre-email@domaine.com&amp;lt;/email&amp;gt;&amp;lt;br /&amp;gt; &amp;lt;/query&amp;gt;&amp;lt;br /&amp;gt; &amp;lt;/iq&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Si tout fonctionne correctement, vous devez recevoir :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;iq id=&#039;reg2&#039; type=&#039;result&#039;/&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Si le répertoire de spool (&amp;lt;code&amp;gt;/usr/local/jabber/spoll/jabber.masociete.com&amp;lt;/code&amp;gt;) n&#039;est pas configuré correctement :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;error code=&#039;500&#039;&amp;gt;Password Storage Failed&amp;lt;/error&amp;gt;&amp;lt;/iq&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Si votre nom d&#039;utilisateur existe déjà :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;error code=&#039;409&#039;&amp;gt;Username Not Available&amp;lt;/error&amp;gt;&amp;lt;/iq&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Avant de vous logger sur votre compte nouvellement créé, demander au serveur quelles infos sont nécessaires :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;iq id=&#039;auth1&#039; type=&#039;get&#039;&amp;gt;&amp;lt;br /&amp;gt; &amp;lt;query xmlns=&#039;jabber:iq:auth&#039;&amp;gt;&amp;lt;br /&amp;gt; &amp;lt;username&amp;gt;jabberuser&amp;lt;/username&amp;gt;&amp;lt;br /&amp;gt; &amp;lt;/query&amp;gt;&amp;lt;br /&amp;gt; &amp;lt;/iq&amp;gt; &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le serveur doit vous renvoyer les informations suivantes :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;iq id=&#039;auth1&#039; type=&#039;result&#039;&amp;gt;&amp;lt;br /&amp;gt; &amp;lt;query xmlns=&#039;jabber:iq:auth&#039;&amp;gt;&amp;lt;br /&amp;gt; &amp;lt;username&amp;gt;jabberuser&amp;lt;/username&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;password/&amp;gt;&amp;lt;digest/&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;resource/&amp;gt;&amp;lt;br /&amp;gt; &amp;lt;/query&amp;gt;&amp;lt;br /&amp;gt; &amp;lt;/iq&amp;gt; &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Connectez-vous alors à votre compte :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;iq id=&#039;auth2&#039; type=&#039;set&#039;&amp;gt;&amp;lt;br /&amp;gt; &amp;lt;query xmlns=&#039;jabber:iq:auth&#039;&amp;gt;&amp;lt;br /&amp;gt; &amp;lt;username&amp;gt;jabberuser&amp;lt;/username&amp;gt;&amp;lt;br /&amp;gt; &amp;lt;password&amp;gt;secret&amp;lt;/password&amp;gt;&amp;lt;br /&amp;gt; &amp;lt;resource&amp;gt;telnet&amp;lt;/resource&amp;gt;&amp;lt;br /&amp;gt; &amp;lt;/query&amp;gt;&amp;lt;br /&amp;gt; &amp;lt;/iq&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
Le serveur doit vous répondre :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;iq id=&#039;auth2&#039; type=&#039;result&#039;/&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Indiquer au serveur que vous êtes en ligne :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;presence/&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le serveur doit vous envoyer immédiatement un message de bienvenue (paramètrable dans le fichier jabber.xml) :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;message from=&#039;jabber.masociete.com&#039; to=&#039;jabberuser@jabber.masociete.com&#039;&amp;gt;&amp;lt;br /&amp;gt; &amp;lt;subject&amp;gt;Welcome!&amp;lt;subject&amp;gt;&amp;lt;br /&amp;gt; &amp;lt;body&amp;gt;&amp;lt;br /&amp;gt; Welcome to the Jabber server at localhost -- we &amp;lt;br /&amp;gt; hope you enjoy this service! For information about &amp;lt;br /&amp;gt; how to use Jabber, visit the Jabber User&#039;s &amp;lt;br /&amp;gt; Guide at http://docs.jabber.org/&amp;lt;br /&amp;gt; &amp;lt;/body&amp;gt;&amp;lt;br /&amp;gt; &amp;lt;/message&amp;gt; &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Refaire la même démarche depuis un autre poste distant, avec un autre nom d&#039;utilisateur, puis essayer d&#039;envoyer un message à votre premier compte :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;message to=&#039;jabberuser@jabber.masociete.com&#039;&amp;gt;&amp;lt;br /&amp;gt; &amp;lt;body&amp;gt;hi!&amp;lt;/body&amp;gt;&amp;lt;br /&amp;gt; &amp;lt;/message&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour quitter correctement vos sessions telnet :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;/stream:stream&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Si tout a fonctionné correctement, vous pouvez installer un client ([http://gabber.sourceforge.net Gabber], [http://gaim.sourceforge.net Gaim], [http://psi.affinix.com Psi], ...).&lt;br /&gt;
&lt;br /&gt;
D&#039;autres fichiers contiennent des informations importantes :&lt;br /&gt;
&lt;br /&gt;
* /var/run/jabber/jabber.pid contient le numéro de processus affecté à jabber, lorsqu&#039;il a démarré. &lt;br /&gt;
* /var/log/jabber/error.log contient la liste des erreurs. &lt;br /&gt;
* /var/log/jabber/record.log contient la liste des personnes qui se sont connectées à votre serveur, leur adresse IP, le client qu&#039;ils utilisent et la durée de leur connexion. &lt;br /&gt;
* /var/lib/jabber contient un répertoire correspondant au nom (hostname) de votre serveur, dans lequel seront stockés les profils utilisateurs.&amp;lt;br /&amp;gt; Ce sont des fichiers XML contenant notamment (en clair) le mot de passe de connexion et les contacts de l&#039;utilisateurs.&amp;lt;br /&amp;gt; &lt;br /&gt;
* /usr/share/doc/jabber-1.4.2a est un répertoire contenant une documentation succincte. &amp;lt;br /&amp;gt; &lt;br /&gt;
&lt;br /&gt;
 En cas de problème, ou pour obtenir plus de renseignement : &lt;br /&gt;
&lt;br /&gt;
* la communauté francophone des utilisateurs de Jabber : http://www.jabberfr.org &lt;br /&gt;
* La [http://www.jabber.org/user/userfaq.html#intro FAQ utilisateur] &lt;br /&gt;
* La [http://www.jabber.org/admin/adminfaq.html#intro FAQ administrateur] &lt;br /&gt;
* Enfin, après avoir consulté les archives pour vérifier que votre question (et sa réponse) ne figure pas déjà quelquepart, la mailing-list administrateur : http://mailman.jabber.org/listinfo/jadmin/ &lt;br /&gt;
&lt;br /&gt;
 &amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;merci&amp;quot;&amp;gt;Cette page est issue de la documentation &#039;pré-wiki&#039; de Léa a été convertie avec HTML::WikiConverter. Elle fut créée par Laurent DUBETTIER-GRENIER le 01/10/2003.&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Copyright =&lt;br /&gt;
Copyright &amp;amp;copy; 01/10/2003, Laurent DUBETTIER-GRENIER&lt;br /&gt;
{{CC-BY-NC-SA}}&lt;/div&gt;</summary>
		<author><name>LeaJice</name></author>
	</entry>
	<entry>
		<id>https://lea-linux.org/docs/index.php?title=Driver:Imprimantes&amp;diff=16727</id>
		<title>Driver:Imprimantes</title>
		<link rel="alternate" type="text/html" href="https://lea-linux.org/docs/index.php?title=Driver:Imprimantes&amp;diff=16727"/>
		<updated>2009-02-09T11:04:15Z</updated>

		<summary type="html">&lt;p&gt;LeaJice : Révocation des modifications par 90.4.254.10 (Discussion) vers la dernière version de LeaJice&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Imprimantes==&lt;br /&gt;
drivers d&#039;imprimantes&lt;br /&gt;
&lt;br /&gt;
===Navigation dans les logiciels===&lt;br /&gt;
&lt;br /&gt;
* [[Driver:Index|Retour à l&#039;index]]&lt;br /&gt;
&lt;br /&gt;
===Liste des logiciels [Imprimantes]===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Brother HL-1430====&lt;br /&gt;
L&#039;imprimante laser monochrome Brother HL-1430 fonctionne parfaitement sous Linux. Le pilote à installer est le hl1250 : il s&#039;agit de celui proposé par défaut par la plupart des assistants de configuration. &lt;br /&gt;
 &lt;br /&gt;
Attention : je ne parle que de la configuration CUPS, je n&#039;utilise pas le système BSD. &lt;br /&gt;
 &lt;br /&gt;
Il est à noter que l&#039;imprimante demande cependant un tout petit délai avant d&#039;imprimer. Il ne faut pas s&#039;inquiéter, il faut juste attendre quelques secondes.&lt;br /&gt;
* [http://www.linuxprinting.org/show_printer.cgi?recnum=Brother-HL-1430 http://www.linuxprinting.org/show_printer.cgi?recnum=Brother-HL-1430]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Brother HL-2030====&lt;br /&gt;
L&#039;imprimante laser monochrome Brother HL-2030 fonctionne parfaitement sous Linux, avec un [http://solutions.brother.com/linux/en_us/ driver] fourni par Brother : il s&#039;agit d&#039;un driver lpr, auquel peut s&#039;ajouter une surcouche CUPS. Testé sur Mandriva 2006.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Brother HL-4Ve====&lt;br /&gt;
fonctionne avec le driver &#039;laserjet&#039; de ghostscript (le driver pour les HP LaserJet III) mais aussi avec Gimp-print et Gimp-print-ijs&lt;br /&gt;
* [http://www.linuxprinting.org/show_printer.cgi?recnum=114592 http://www.linuxprinting.org/show_printer.cgi?recnum=114592]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Brother HL-5170 dn====&lt;br /&gt;
Installation avec cups de l&#039;imprimante Brother HL-5170 DN en utilisant le  ppm hl660 téléchargé sur le site linuxprinting.org&lt;br /&gt;
* [ les drivers]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Brother HL-8050 n====&lt;br /&gt;
Comme la HL-5170 cette imprimante fonctionne  avec cups + hpijs, &lt;br /&gt;
il suffit de copier le fichier Brother-HL-660-hpijs.ppd dispo sur &lt;br /&gt;
www.linuxprinting.org dans /usr/share/cups/model/ et de relancer cupsd.&lt;br /&gt;
* [http://www.linuxprinting.org/show_printer.cgi?recnum=Brother-HL-660 http://www.linuxprinting.org/show_printer.cgi?recnum=Brother-HL-660]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Canon FP-510====&lt;br /&gt;
Vieille imprimante couleur à jet d&#039;encre faite pour imprimer des images. C&#039;est une bonne imprimante. C&#039;est dommage qu&#039;il n&#039;existe pas de driver! :&#039;(&lt;br /&gt;
* [ http://www.linuxprinting.org/show_printer.cgi?recnum=114592]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Canon i250====&lt;br /&gt;
Canon Nouvelle-Zélande brave la maison mère qui ignore superbement Linux, et distribue des pilotes propriétaires pour Linux. Essayez aussi cette imprimante avec les pilotes libres, certains pilotes BJxxxx peuvent passer...&lt;br /&gt;
* [http://www.canon.co.nz/products/printers/colour_bj_printers/i250_drivers.html http://www.canon.co.nz/products/printers/colour_bj_printers/i250_drivers.html]&lt;br /&gt;
&lt;br /&gt;
Il existe un autre pilote propriétaire chez turboprint :&lt;br /&gt;
* http://www.turboprint.de/english.html&lt;br /&gt;
&lt;br /&gt;
====Canon i560 i850====&lt;br /&gt;
Un ftp japonais proposant il y a des drivers en rpm et autre pour i560 canon etc  &lt;br /&gt;
&lt;br /&gt;
* [ftp://download.canon.jp/pub/driver/bj/linux/ ftp://download.canon.jp/pub/driver/bj/linux/]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Canon MP370====&lt;br /&gt;
Cette multifonction fonctionne très bien pour la partie imprimante uniquement  hélas, avec le pilote de la BJC 7004 fourni avec Mandrakelinux 10.01&lt;br /&gt;
* [ http://www.canon.co.nz/products/printers/colour_bj_printers/i250_drivers.html]&lt;br /&gt;
&lt;br /&gt;
Cette multifonction fonctionne désormais en mode scanner en suivant cette installation :&lt;br /&gt;
* [ http://doc.ubuntu-fr.org/materiel/scanner_canon_multifonctions ]&lt;br /&gt;
&lt;br /&gt;
====Epson Stylus Color 480====&lt;br /&gt;
&lt;br /&gt;
* [http:// http://]&lt;br /&gt;
&lt;br /&gt;
====Epson Stylus Color C20 à C80====&lt;br /&gt;
les pilotes pour les imprimantes de la marque Epson (EPSON Stylus Color 980  &lt;br /&gt;
EPSON Stylus Color 880  &lt;br /&gt;
EPSON Stylus Color 777  &lt;br /&gt;
EPSON Stylus Color 680  &lt;br /&gt;
EPSON Stylus Color 580  &lt;br /&gt;
EPSON Stylus Color 480 &lt;br /&gt;
 EPSON Stylus C80  &lt;br /&gt;
EPSON Stylus C70  &lt;br /&gt;
EPSON Stylus C60  &lt;br /&gt;
EPSON Stylus C40 &lt;br /&gt;
 EPSON Stylus C41/C42 &lt;br /&gt;
 EPSON Stylus C20 &lt;br /&gt;
 EPSON Stylus Photo 810 &lt;br /&gt;
 EPSON Stylus Photo 820) &lt;br /&gt;
attention, le site est en japonais :)) &lt;br /&gt;
bien repérer english en page d&#039;accueil. Bien que l&#039;on puisse récupérer les sources de ces drivers, ils ne sont pas OpenSource, mais c&#039;est encore un constructeur qui développe des drivers pour Linux : un bon point.&lt;br /&gt;
* [http://www.epkowa.co.jp/english/linux_e/pips_e.html http://www.epkowa.co.jp/english/linux_e/pips_e.html]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====EPSON Stylus Photo RX425 (Multifonction)====&lt;br /&gt;
Pilotes impression et scan ( 2 pilotes distincts )disponibles pour plusieurs distributions. &lt;br /&gt;
Installation sans problème avec les rpm des pilotes pour Mandrake 10.1, tout fonctionne bien. &lt;br /&gt;
Le site, déjà signalé pour les Stylus Color, semble disposer des pilotes pour un grand nombre de matériel EPSON (jet d&#039;encre, laser, multifonction et scanner) et pour plusieurs distributions ( Vine, Fedora Core, Red Hat, Turbo Linux, SuSe, Mandriva, Debian, et autres ). &lt;br /&gt;
* [http://www.epkowa.co.jp/english/linux_e/pips_e.html http://www.epkowa.co.jp/english/linux_e/pips_e.html]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====gimp-print====&lt;br /&gt;
gimp-print est une collection de drivers pour plusieurs imprimantes. c&#039;est aussi un plugin de gimp pour permettre une impression de haute qualité. &lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Il fonctionne pour les Epson, Canon et HP (NDM:perso, sur ma HP deskjet 845c, le driver HP donne de bien meilleurs résultat, ceux fournis par gimp-print sont beaucoup trop sombres).&lt;br /&gt;
* [http://gimp-print.sourceforge.net http://gimp-print.sourceforge.net]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====HP Deskjet====&lt;br /&gt;
HP développe maintenant un driver en opensource pour ses imprimantes.&lt;br /&gt;
* [http://hpinkjet.sourceforge.net http://hpinkjet.sourceforge.net]&lt;br /&gt;
* [http://hpinkjet.sourceforge.net/productssupported.php Les modèles supportés]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====HP OfficeJet====&lt;br /&gt;
les combos imprimante/scanner/copieur de Hewlett Packard disposent de drivers libres.&lt;br /&gt;
* [http://hpoj.sourceforge.net http://hpoj.sourceforge.net]&lt;br /&gt;
* [http://hpoj.sourceforge.net/suplist.shtml Les modèles supportés]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====HP PhotoSmart 7345====&lt;br /&gt;
Cette imprimante est complèment gérée sous Linux par la conjonction des utilitaires : hpoj (pour le lecteur de carte mémoire, ainsi que l&#039;abstraction matériel), mtools (pour le lecteur de carte mémoire) et hpijs le driver d&#039;impression libre développé grace à HP.&amp;lt;br /&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
La procédure est simple mais longue : installer hpoj, et lancer le service /etc/init.d/hpoj, installer mtools (ajouter : &amp;lt;code&amp;gt;drive p: file=&amp;quot;:0&amp;quot; remote&amp;lt;/code&amp;gt; au fichier /etc/mtools/mtools.conf), puis installer le driver hpijs (recompiler au besoin ghostscript pour qu&#039;il accepte le mode ijs), enfin télécharger le &amp;quot;ppd&amp;quot; pour l&#039;imprimante et le copier dans /usr/share/cups/model, puis lancer &amp;lt;code&amp;gt;ptal-init setup&amp;lt;/code&amp;gt;, puis relancer cupsd et enfin installez l&#039;imprimante dans cups normalement (préférer l&#039;imprimante dont le nom commence par mlc).&amp;lt;br /&amp;gt;&lt;br /&gt;
L&#039;accès au lecteur de cartes mémoire passe par l&#039;utilisation des commandes mdir, mcd, etc ... ou par l&#039;utilisation de MToolsFM.&lt;br /&gt;
* [http://hpoj.sourceforge.net/ hpoj]&lt;br /&gt;
* [http://www.tux.org/pub/tux/knaff/mtools/index.html mtools]&lt;br /&gt;
* [http://hpinkjet.sourceforge.net/ hpijs]&lt;br /&gt;
* [http://www.linuxprinting.org/ppd-o-matic.cgi?driver=hpijs&amp;amp;printer=HP-PhotoSmart_7345&amp;amp;show=0 le ppd]&lt;br /&gt;
* [http://www.core-coutainville.org/MToolsFM/ mtoolsfm : un frontend graphique à mtools]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Lexmark z25 z35====&lt;br /&gt;
&lt;br /&gt;
 Pilotes pour imprimantes lexmark z25 z35.   &lt;br /&gt;
  &lt;br /&gt;
Ces imprimantes sont vendues avec le logo linux. Mais quelles difficultés pour les installer ! J&#039;y suis arrivé sur slackware 10.0. Ce doit être identique pour les autres distributions. Voici la manipulation.   &lt;br /&gt;
&lt;br /&gt;
# Téléchargez le driver :  http://www.downloaddelivery.com/srfilecache/CJLZ35LE-CUPS-1.0-1.TAR.gz Il s&#039;agit du driver pour redhat9. Il faut le télécharger dans un dossier situé dans /home   &lt;br /&gt;
# Décomprimez le 2 fois. On obtient le fichier :  z35cups-1.0-1.gz.sh   &lt;br /&gt;
# Dans une console root tapez :  &amp;lt;code&amp;gt;sh z35cups-1.0-1.gz.sh -keep  &amp;lt;/code&amp;gt; puis &amp;lt;code&amp;gt;accept next &amp;lt;/code&amp;gt; Un message d&#039;erreur apparaît, choisir d&#039;ignorer &amp;lt;code&amp;gt;(yes)&amp;lt;/code&amp;gt; choisir le pays et continuer, puis &amp;lt;code&amp;gt;test&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;exit&amp;lt;/code&amp;gt; Si l&#039;imprimante fonctionne lors du test passez directement au 5. Mais, Il est probable que l&#039;installation s&#039;arrête avant la fin. Ce n&#039;est pas grave car doit être apparu un dossier installer. &lt;br /&gt;
# Allez dans le dossier installer toujours en mode console avec midnight commander (en tapant mc). Dans ce dossier se situent 2 archives rpm :   code&amp;gt;z35cups-1.0-1.i386.rpm et z35llpddk-2.0-1.i386.rpm&amp;lt;/code&amp;gt; Dans chaque archive il faut copier le dossier &amp;lt;code&amp;gt;/usr à la racine du système &amp;lt;code&amp;gt;/&amp;lt;/code&amp;gt;.   En pratique l&#039;une des fenêtre est &amp;quot;installer&amp;quot;, l&#039;autre fenêtre est &amp;quot;/&amp;quot;   &lt;br /&gt;
# Rebootez l&#039;ordinateur.   &lt;br /&gt;
# Configurer l&#039;imprimante dans cups  :  &amp;lt;code&amp;gt;http://localhost:631/&amp;lt;/code&amp;gt; Administrer imprimante / ajout d&#039;une imprimante si elle n&#039;apparaît pas. Attention, le périphérique est : Lexmark Printer (lexmark inkjet color printer). Puis lexmark et enfin lexmark z35 v1.0-1 (en). L&#039;imprimante est dans cups.   &lt;br /&gt;
# Configurez l&#039;imprimante dans KDE (configuration, gestionnaire d&#039;impression). Pour l&#039;imprimante z35, choisir le système d&#039;impression CUPS.   &lt;br /&gt;
# Configurez l&#039;imprimante dans openoffice.org : à la racine du dossier d&#039;openoffice.org se trouve un fichier &amp;lt;code&amp;gt;spadmin&amp;lt;/code&amp;gt;.   En console root dans ce dossier tapez :  &amp;lt;code&amp;gt;./spadmin&amp;lt;/code&amp;gt; , sélectionnez generic printer et propriétés. Modifiez la commande lpr en lpr-cups   &lt;br /&gt;
# Pour mozilla la même commande doit être rentrée directement lors de la première impression en cliquant sur les propriétés de l&#039;imprimante.   &lt;br /&gt;
 &lt;br /&gt;
Olivier ERNST F5LVG&lt;br /&gt;
* [http://www.downloaddelivery.com/srfilecache/CJLZ35LE-CUPS-1.0-1.TAR.gz les drivers]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Lexmark 2050====&lt;br /&gt;
Driver pour Lexmark 2050&lt;br /&gt;
* [http://www.prato.linux.it/~mnencia/lexmark2050/ http://www.prato.linux.it/~mnencia/lexmark2050/]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Lexmark 2070 et Lexmark Z11====&lt;br /&gt;
Vous trouverez sur ce site des drivers pour les imprimantes Lexmark 2070 et Z11, ainsi qu&#039;un forum de discussion pour vous aider.&lt;br /&gt;
* [http://www.kornblum.i-p.com http://www.kornblum.i-p.com]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Lexmark 3200====&lt;br /&gt;
Driver pour imprimante Lexmark 3200. Le développement du driver semble avoir cessé il y a environ un an...&lt;br /&gt;
* [http://lxm3200.sourceforge.net/ http://lxm3200.sourceforge.net/]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Lexmark 5000====&lt;br /&gt;
Driver pour Lexmark 5000&lt;br /&gt;
* [http://homepage.powerup.com.au/~pbwest/lexmark/lexmark.html http://homepage.powerup.com.au/~pbwest/lexmark/lexmark.html]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Lexmark X75====&lt;br /&gt;
Pas de driver pour l&#039;instant (et pour longtemps je crois...) &lt;br /&gt;
:-( &lt;br /&gt;
 &lt;br /&gt;
Lexmark ne répond pas aux mails donc je n&#039;en sais pas plus...&lt;br /&gt;
* [ http://homepage.powerup.com.au/~pbwest/lexmark/lexmark.html]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Lexmark X83====&lt;br /&gt;
Il n&#039;existe pas de drivers pour cette imprimante :(&lt;br /&gt;
De manière générale, préférez les constructeurs dont les imprimantes sont supportées sous Linux.&lt;br /&gt;
* [ http://homepage.powerup.com.au/~pbwest/lexmark/lexmark.html]&lt;br /&gt;
&lt;br /&gt;
====Lexmark z12====&lt;br /&gt;
Cette imprimante n&#039;est pas encore pleinement supportée. Seul le mode noir et blanc semble fonctionner et encore : il reste un problème avec le mode bidirectionnel.&lt;br /&gt;
* [ http://www.linuxprinting.org/show_printer.cgi?recnum=486066 http://www.linuxprinting.org]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Lexmark z33====&lt;br /&gt;
Lexmark a fait des drivers mais il y a un léger problème (juste un décalage sur la feuille) et je n&#039;ai réussi à les faire fonctionner qu&#039;avec LPRng.  &lt;br /&gt;
Il y a des drivers livrés avec CUPS aussi (mdk 9.0) mais apparement la couleur ne fonctionne pas. &lt;br /&gt;
Concernant les drivers de lexmark il vaut mieux les prendre en Anglais ce sont les plus récents ...&lt;br /&gt;
* [ http://www.lexmark.com/US/support/drivers/ http://www.lexmark.com/US/support/drivers/]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Lexmark Z45====&lt;br /&gt;
Pas de drivers !!! Pas de réponse venant de Lexmark... &lt;br /&gt;
Pas de chance !&lt;br /&gt;
* [ http://www.lexmark.com/US/support/drivers/]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Lexmark Z45====&lt;br /&gt;
Il y a un driver. &lt;br /&gt;
Il suffit, sur un linux avec noyau 2.6 (je n&#039;ai pas testé avec un noyau 2.4), d&#039;utiliser le driver de la Z43 ! &lt;br /&gt;
Merci à lexmark pour leur silence le plus total...&lt;br /&gt;
* [ http://www.lexmark.com/US/support/drivers/]&lt;br /&gt;
&lt;br /&gt;
====lexmark z55====&lt;br /&gt;
&lt;br /&gt;
Nous allons telecharger les drivers compatibles CUPS. Toute les operations vont êtres faites en mode texte, étant le plus rapide et le plus convivial, c&#039;est très simple.&lt;br /&gt;
&lt;br /&gt;
On télécharge l&#039;archive;&lt;br /&gt;
&amp;lt;div class=code&amp;gt;wget http://www.downloaddelivery.com/srfilecache/CJLZ55LE-CUPS-1.0-1.TAR.GZ&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On décompresse l&#039;archive;&lt;br /&gt;
&amp;lt;div class=code&amp;gt;tar -xvzf CJLZ55LE-CUPS-1.0-1.TAR.GZ&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=code&amp;gt;sh lexmarkz55-CUPS-1.0-1.gz.sh -target imprimante&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ne faites pas attention aux messages d&#039;erreur&lt;br /&gt;
&lt;br /&gt;
On va au répertoire generé par la commande précedente&lt;br /&gt;
&amp;lt;div class=code&amp;gt;cd imprimante&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Si vous êtes sous Mandriva, Suse, Fedora... Ou n&#039;importe quel distribution utilisant le RPM, il suffit juste d&#039;installer les deux paquets RPM situé dans le repertoire imprimante avec la commande correspondant à votre distrib. Référez-vous a la documentation de votre distribution pour savoir comment vous y prendre pour installer un paquet RPM.&lt;br /&gt;
&lt;br /&gt;
Pour les Debiantistes, nous allons convertir le paquet RPM en paquet Deb. Pour cela nous allons installer Alien. Si c&#039;est déjà fait, passer cette etape.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=code&amp;gt;sudo apt-get install alien&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Une fois installer, nous allons convertir nos paquets. Toujours dans le repertoire imprimante&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=code&amp;gt;sudo alien -i lexmarkz55-CUPS-1.0-1.i386.rpm z55llpddk-2.0-2.i386.rpm&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
L&#039;option -i qui definit qu&#039;après convertion, directement l&#039;installer.&lt;br /&gt;
&lt;br /&gt;
Voilà qui est fait. Il ne reste plus qu&#039;à configurer votre imprimante avec CPUS.&lt;br /&gt;
&lt;br /&gt;
[http://www.lexmark.com/US/support/drivers/ Telechargement de drivers]&lt;br /&gt;
&lt;br /&gt;
Valable pour imprimer avec une Dell A940&lt;br /&gt;
Probablement utilisable pour une lexmark 5150&lt;br /&gt;
&lt;br /&gt;
MAJ : 22.06.2006&lt;br /&gt;
Tester sous Debian (Kernel 2.6.15, Gnome 2.14, Ubuntu Dapper 6.06)&lt;br /&gt;
Merci, à Lea pour la solution, j&#039;ai simplifié le tutorial pour que les manipulations soit accessible aux debutants.&lt;br /&gt;
&lt;br /&gt;
MAJ: 09.01.2006&lt;br /&gt;
test sous Debian (kernel 2.6.12, kde 3.4.3, knoppix 4)&lt;br /&gt;
&lt;br /&gt;
====Lexmark Z65====&lt;br /&gt;
drivers linux pour lexmark Z65 (en anglais). &lt;br /&gt;
J&#039;ai installé le driver redhat avec RHES et lexmark Z65 , selon la procédure indiquée à l&#039;url 1, puis corrigé l&#039;erreur obtenue selon la procédure indiquée à l&#039;url 2  : tout est ok&lt;br /&gt;
* [http://downloads.lexmark.com/cgi-perl/downloads.cgi?ccs=229:1:0:0:0:0 http://downloads.lexmark.com/cgi-perl/downloads.cgi?ccs=229:1:0:0:0:0]&lt;br /&gt;
* [http://www.linuxprinting.org/pipermail/lexmark-list/2004q1/002370.html http://www.linuxprinting.org/pipermail/lexmark-list/2004q1/002370.html]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Lexmark Z705 - Pilote pour CUPS====&lt;br /&gt;
Ce pilote a été développé a l&#039;aide du pack de developpement mis a disposition par Lexmark. Il est basé sur le driver du modèle Z55. Il est encore en cours d&#039;amélioration et il subsiste notamment un bug sur la prise en charge de la marge haute mais globalement  le pilote est fonctionnel ... a suivre donc et ne pas hésiter a remonter vos impressions et notamment la distribution sur laquelle vous avez testé ce pilote ... &lt;br /&gt;
* [http://users.cybercity.dk/~dko12479/ http://users.cybercity.dk/~dko12479/]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Pnm2ppa====&lt;br /&gt;
Driver pour imprimantes  HP DeskJet 710C, 712C, 720C, 722C, 820Cse, 820Cxi, 1000Cse, et 1000Cxi.&lt;br /&gt;
* [http://sourceforge.net/projects/pnm2ppa/ http://sourceforge.net/projects/pnm2ppa/]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====SAMSUNG ML-1750====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pilote gratuit mais pas libre a priori pour l&#039;imprimante laser ML-1750 Samsung, fourni par Samsung lui-même. Il s&#039;installe facilement et fonctionne sur USB2 ou port parallèle. Je l&#039;ai personnellement testé sur port parallèle et quelqu&#039;un m&#039;a rapporté que cela fonctionnait sur USB2 (ce sur quoi la doc de l&#039;imprimante &lt;br /&gt;
n&#039;est pas très claire )&lt;br /&gt;
* [http://www.samsung.com/Products/Printer/support/Download/driver/driver_SamsungLinuxDriver_0000004418_3.htm page du driver]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====SAMSUNG ML-1750====&lt;br /&gt;
Le pilote propriétaire Samsung pour cette imprimante m&#039;ayant causé quelques difficultés, j&#039;ai opté pour la solution préconisée par Linuxprinting, le driver PXLmono. &lt;br /&gt;
 &lt;br /&gt;
J&#039;ai expliqué mon setup sur la page web : &lt;br /&gt;
* [http://plaurier.free.fr/samsung.html http://plaurier.free.fr/samsung.html]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====TurboPrint====&lt;br /&gt;
Ce logiciel pilote un nombre important d&#039;imprimantes.  Il pilote parfaitement une Canon S520 qui ne disposait pas de pilote spécifique sous mdk9.0 : c&#039;est parfait. &lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Un seul inconvénient, il n&#039;est pas libre ni même gratuit : +/- 25 euros&lt;br /&gt;
* [http://www.turboprint.de/english.html http://www.turboprint.de/english.html]&lt;br /&gt;
* [http://www.turboprint.de Le même en allemand]&lt;br /&gt;
* [http://www.turboprint.de/screen1big.gif Copie d&#039;écran]&lt;/div&gt;</summary>
		<author><name>LeaJice</name></author>
	</entry>
	<entry>
		<id>https://lea-linux.org/docs/index.php?title=SquirrelMail&amp;diff=16726</id>
		<title>SquirrelMail</title>
		<link rel="alternate" type="text/html" href="https://lea-linux.org/docs/index.php?title=SquirrelMail&amp;diff=16726"/>
		<updated>2009-02-09T11:02:00Z</updated>

		<summary type="html">&lt;p&gt;LeaJice : /* SquirrelMail */ je me suis trompé en révoquant, la modif était pertinente&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Services de messagerie]]&lt;br /&gt;
= SquirrelMail =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;leatitre&amp;quot;&amp;gt;SquirrelMail&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;leapar&amp;quot;&amp;gt;par [mailto:laurent_dot_dubettier-grenier_at_laposte_dot_net Laurent DUBETTIER-GRENIER]&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;leadesc&amp;quot;&amp;gt;Installer une interface graphique de messagerie SquirrelMail&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
Vous souhaitez installer votre propre serveur de mail au sein de votre entreprise, équipé d&#039;une interface web permettant à vos collaborateurs d&#039;accéder et de gérer leur courrier électronique à distance ? C&#039;est ce que rend possible [http://www.squirrelmail.org SquirrelMail]. Rapide et stable, facile à installer, extensible par plugins à volonté, il vous permettra de créer votre propre webmail.&lt;br /&gt;
&lt;br /&gt;
Un webmail est une interface web permettant la lecture de votre courrier électronique. Vous avez certainement déjà utilisé ce type d&#039;interface, si votre adresse électronique est hébergée par [http://www.laposte.net La Poste], par exemple. L&#039;intérêt ? Pouvoir accéder de n&#039;importe où à vos messages (chez vous, au travail, dans un cybercafé...). SquirrelMail n&#039;est pas le seul webmail disponible : IMP, basé sur le projet [http://www.horde.org Horde] est une autre possibilité, très puissante, utilisée entre autres pour le webmail de [http://www.free.fr Free]. Mais SquirrelMail est beaucoup plus simple à installer, configurer et étendre que IMP. Il est de plus soutenu par une large communauté [http://www.squirrelmail-fr.org francophone].&lt;br /&gt;
&lt;br /&gt;
L&#039;objet de cet article et d&#039;expliquer la procédure d&#039;installation et de configuration d&#039;une interface graphique de messagerie basée sur SquirrelMail, sur un serveur Linux [http://www.mandrakesoft.com Mandrake] 9.2, au sein d&#039;un réseau local d&#039;entreprise. Le hostname du serveur est &amp;lt;code&amp;gt;mail.exemple.net&amp;lt;/code&amp;gt;, son adresse IP &amp;lt;code&amp;gt;192.168.0.1&amp;lt;/code&amp;gt;. Pour configurer correctement ce qui suit, il faut être connecté au serveur en tant qu&#039;administrateur (root). Cet article ne gère pas tous les éventuels problèmes de sécurité liés à la mise en place de ce service.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
Pour installer SquirrelMail, il faut un serveur Linux, sur lequel sont installés, entre autres : Apache2, Apache2-mod_php, php-ini, Apache2-mod_ssl, imap, postfix, perl, xinetd, ispell. L&#039;installation de Perl permet de configurer ultra-rapidement squirrelMail grâce à une interface développé dans ce langage, et ispell permet le fonctionnement correct du correcteur orthographique squirrelspell intégré. MySQL n&#039;est pas requis, sauf pour certains plugins. Enfin pour un fonctionnement correct, les navigateurs des postes qui utiliseront votre webmail doivent accepter les cookies.&lt;br /&gt;
&lt;br /&gt;
Vous devez avoir les services httpd, postfix, xinetd, imap activés.&amp;lt;br /&amp;gt; Pour visionner les services fonctionnant :&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# chkconfig --list | less &amp;lt;/nowiki&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour mettre en marche un service (exemple avec apache) :&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# service httpd start&amp;lt;/nowiki&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour faire en sorte qu&#039;à chaque démarrage de votre poste, le service Apache fonctionne :&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;chkconfig apache on&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il faut notamment veiller à bien lancer le service imap, dépendant de xinetd :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# chkconfig imap on&amp;lt;/nowiki&amp;gt;&amp;lt;/div&amp;gt;service xinetd restart. &lt;br /&gt;
&lt;br /&gt;
=== Php ===&lt;br /&gt;
&lt;br /&gt;
Premièrement, vérifier que PHP est installé et fonctionne correctement en créant un fichier de test dans le répertoire &amp;lt;code&amp;gt;/var/www/html&amp;lt;/code&amp;gt; : &amp;lt;br /&amp;gt;&amp;lt;code&amp;gt;vi phpinfo.php&amp;lt;br /&amp;gt;&amp;lt;/code&amp;gt; Insérer les instructions php suivantes dans ce fichier :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;?&amp;lt;br /&amp;gt; phpinfo();&amp;lt;br /&amp;gt; ?&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Puis tester le fonctionnement de php :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# lynx http://127.0.0.1/phpinfo.php&amp;lt;/nowiki&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vous devez obtenir une page donnant les caractéristiques complète de votre installation de PHP et de ces modules additionnels. Si cela fonctionne correctement, vous pouvez effacer le fichier &amp;lt;code&amp;gt;phpinfo.php&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Il faut ensuite configurer &amp;lt;code&amp;gt;/etc/php.ini&amp;lt;/code&amp;gt;, notamment : &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;session.use_cookies = 1&amp;lt;br /&amp;gt; file_uploads = On (pour autoriser les fichiers attachés)&amp;lt;br /&amp;gt; upload_max_filesize = 2M (règle la taille maxi des fichiers attachés)&amp;lt;br /&amp;gt; register_globals=off (il est placé par défaut sur On par la distribution Mandrake)&amp;lt;br /&amp;gt; expose_php = Off (sécurité : n&#039;expose pas le fait que votre serveur héberge PHP)&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le paramètre &amp;lt;code&amp;gt;session.save_path&amp;lt;/code&amp;gt; doit pointer vers un répertoire lisible uniquement par le serveur web (&amp;lt;code&amp;gt;/var/squirrel/session&amp;lt;/code&amp;gt; par exemple) :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;mkdir -p /var/squirrel/session&amp;lt;br /&amp;gt; chgrp apache /var/squirrel/session&amp;lt;br /&amp;gt; chown apache /var/squirrel/session&amp;lt;br /&amp;gt; chmod 730 /var/squirrel/session&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Redémarrer le serveur Apache :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;service httpd restart&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== SquirrelMail ===&lt;br /&gt;
&lt;br /&gt;
Pour installer SquirrelMail, il faut télécharger la dernière version (&amp;lt;code&amp;gt;squirrelmail-1.4.2.tar.gz &amp;lt;/code&amp;gt;&amp;lt;nowiki&amp;gt;: 2.74 Mo), la décompresser dans un répertoire lisible par le serveur web (&amp;lt;/nowiki&amp;gt;&amp;lt;code&amp;gt;/var/www/html/&amp;lt;/code&amp;gt; par exemple), changer le nom du répertoire (&amp;lt;code&amp;gt;mv squirrelmail-1.4.2 squirrelmail&amp;lt;/code&amp;gt;), créer les deux répertoires de stockage des données et des fichiers joints :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;mkdir -p /var/squirrel/data&amp;lt;br /&amp;gt; chown apache /var/squirrel/data&amp;lt;br /&amp;gt; chgrp apache /var/squirrel/data&amp;lt;br /&amp;gt; mkdir -p /var/squirrel/attachement&amp;lt;br /&amp;gt; chgrp apache /var/squirrel/attachement&amp;lt;br /&amp;gt; chmod 730 /var/squirrel/attachement&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ceci cause un problème : si quelqu&#039;un prépare un mail avec pièce jointe, mais interromps son action avant de l&#039;expédier, les pièces jointes resteront éternellement dans le répertoire &amp;lt;code&amp;gt;/var/squirrel/attachement&amp;lt;/code&amp;gt;. Il faut donc prévoir une tâche cron qui supprime l&#039;ensemble des fichiers de ce répertoire à intervalle régulier, en espérant que personne n&#039;est en train d&#039;envoyer une pièce jointe au même moment... Voici un exemple permettant de supprimer tous les jours à 23H15 le contenu du répertoire &amp;lt;code&amp;gt;/var/squirrel/attachement&amp;lt;/code&amp;gt; :&amp;lt;br /&amp;gt; éditer le fichier crontab et ajouter la ligne :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# crontab -e&amp;lt;/nowiki&amp;gt;&amp;lt;br /&amp;gt; 15 23 * * * /root/rm_attachement.sh&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
le fichier &amp;lt;code&amp;gt;rm_attachement.sh&amp;lt;/code&amp;gt;, executable (&amp;lt;code&amp;gt;chmod +x rm_attachement.sh&amp;lt;/code&amp;gt;), contient les lignes suivantes :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt; cd /var/squirrel/attachement&amp;lt;/nowiki&amp;gt;&amp;lt;br /&amp;gt; rm -f *&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Puis il faut alors configurer squirrelmail soit manuellement en renommant le fichier &amp;lt;code&amp;gt;config_default.php&amp;lt;/code&amp;gt; en &amp;lt;code&amp;gt;config.php&amp;lt;/code&amp;gt; (répertoire &amp;lt;code&amp;gt;/var/www/html/squirrelmail/config&amp;lt;/code&amp;gt;) puis en l&#039;éditant pour modifier ses paramètres, soit, beaucoup plus convivial, en utilisant le petit script perl &amp;lt;code&amp;gt;conf.pl&amp;lt;/code&amp;gt; situé dans ce même répertoire (nécessite que le paquetage perl soit installé). Pour le lancer : &amp;lt;code&amp;gt;./conf.pl&amp;lt;/code&amp;gt; (point slash conf.pl). Un menu comportant 9 options apparaît, qui permet de configurer complètement SquirrelMail. Quelques modifications à effectuer :&lt;br /&gt;
&lt;br /&gt;
* Organization Preferences / Default Language : remplacer en_US par fr_FR&lt;br /&gt;
* Server Settings / Domain : exemple.net&lt;br /&gt;
* General Options / Data Directory : /var/squirrel/data&lt;br /&gt;
* General Options / Attachment Directory : /var/squirrel/attachement&lt;br /&gt;
* Themes : pour choisir celui qui vous plaît !&lt;br /&gt;
* Plugins : pour installer un plugins, parmi ceux disponibles (Available Plugins)&lt;br /&gt;
* S sauve ces modifications, Q quitte l&#039;application de configuration.&lt;br /&gt;
&lt;br /&gt;
Puis, à partir d&#039;un navigateur sur un poste distant, se rendre à l&#039;url &amp;lt;code&amp;gt;http://192.168.0.1/squirrelmail/&amp;lt;/code&amp;gt; ou &amp;lt;code&amp;gt;http://mail.exemple.net/squirrelmail&amp;lt;/code&amp;gt;&amp;lt;br /&amp;gt; si vous avez un serveur DNS correctement configuré. L&#039;interface de squirrelmail apparaît.&lt;br /&gt;
&lt;br /&gt;
Remarque : Si vous n&#039;avez pas de serveur DNS, avec un poste Windows distant, il faut configurer le fichier hosts situé dans le répertoire &amp;lt;code&amp;gt;C:\WINNT\SYSTEM32\DRIVERS\ETC&amp;lt;/code&amp;gt; , et rajouter la ligne : &amp;lt;code&amp;gt;192.168.0.1 mail.exemple.net&amp;lt;/code&amp;gt;. Sur un poste Linux distant, il faut rajouter la même ligne dans le fichier &amp;lt;code&amp;gt;/etc/hosts&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Plugins ===&lt;br /&gt;
&lt;br /&gt;
Une fois que tout est installé et en état de fonctionnement, vous aurez peut-être envie d&#039;étendre les fonctionnalités de votre interface graphique de messagerie. Pour cela, il faut installer un ou plusieurs plugins, et le choix est vaste... Il en existe plus de 170 différents ! Par défaut, 16 plugins sont déjà installés (mais non activé !) :&lt;br /&gt;
&lt;br /&gt;
* Abook_take : pour récupérer facilement l&#039;adresse de l&#039;expéditeur d&#039;un mail dans votre carnet d&#039;adresse.&lt;br /&gt;
* Administrator : pour administrer à distance la configuration de SquirrelMail.&lt;br /&gt;
* Bug_report : pour reporter facilement un bug à l&#039;équipe de développement.&lt;br /&gt;
* Calendar : un calendrier simple.&lt;br /&gt;
* Delete_move_next : pour effacer et déplacer facilement vos mails.&lt;br /&gt;
* Filters : pour filtrer vos mails (antispam)&lt;br /&gt;
* Fortune : pour insérer une devise dans vos mails.&lt;br /&gt;
* Info : pour dépanner le serveur IMAP (ne pas activer en usage normal !)&lt;br /&gt;
* Listcommands : ajoute une ligne à tout mail en provenance d&#039;une mailing-list, permettant notamment de se dés-inscrire ou de visionner les archives de la mailing-list.&lt;br /&gt;
* Mail_fetch : pour récupérer vos mails sur un serveur pop.&lt;br /&gt;
* Message_details : pour accéder à la source du mail reçu.&lt;br /&gt;
* Newmail : ajoute une musique vous signalant un nouveau message reçu.&lt;br /&gt;
* Sent_subfolders : pour gérer les sous répertoires.&lt;br /&gt;
* Spamcop : pour rapidement signaler à spamcop.net un spammeur.&lt;br /&gt;
* Squirrelspell : un dictionnaire basé sur ispell.&lt;br /&gt;
* Translate : Envoi votre message vers un serveur de traduction en une autre langue.&lt;br /&gt;
&lt;br /&gt;
Pour installer un plugin c&#039;est plus ou moins simple : certains requièrent l&#039;installation de paquetages supplémentaires pour fonctionner (serveur de base de données MySQL, par exemple), d&#039;autres s&#039;installent en quelques instants. Par exemple, le plugin nommé &amp;quot;&amp;lt;code&amp;gt;Show Username and IP&amp;lt;/code&amp;gt;&amp;quot; permet d&#039;afficher l&#039;adresse IP et le nom d&#039;utilisateur de la personne connectée au webmail. Pour l&#039;installer, il suffit de télécharger le paquetage (&amp;lt;code&amp;gt;show_user_and_ip-2.2.3.tar&amp;lt;/code&amp;gt;), de le copier dans le répertoire plugins (&amp;lt;code&amp;gt;/var/www/html/squirrelmail/plugins&amp;lt;/code&amp;gt;), de le décompresser (&amp;lt;code&amp;gt;tar xvf show_user_and_ip-2.2.3.tar&amp;lt;/code&amp;gt;) et de l&#039;activer par l&#039;intermédiaire de l&#039;interface &amp;lt;code&amp;gt;conf.pl&amp;lt;/code&amp;gt; (rubrique plugins). On peut difficilement faire plus simple !&lt;br /&gt;
&lt;br /&gt;
=== Utilisateurs ===&lt;br /&gt;
&lt;br /&gt;
Seul les utilisateurs ayant un compte sur votre serveur de mail auront la possibilité d&#039;utiliser SquirrelMail. Pour créer un compte uniquement destiné à la messagerie, sans possibilité de connections sur votre serveur, il faut d&#039;abord créer un groupe d&#039;utilisateur dédié à l&#039;utilisation de SquirrelMail :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;groupadd squirrelmail&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Puis créer chaque utilisateur par l&#039;instruction suivante :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;useradd -c &amp;quot;nom_utilisateur ou commentaire&amp;quot; -s /bin/false -g squirrelmail nom_utilisateur&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Enfin définir le mot de passe pour chaque compte nouvellement créé :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;passwd nom_utilisateur&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour tester le fonctionnement, essayer d&#039;envoyer des mails à un autre compte et à vous même. Utiliser d&#039;abord une adresse mail du type &amp;lt;code&amp;gt;utilisateur@mail.exemple.net&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Postfix ===&lt;br /&gt;
&lt;br /&gt;
Pour utiliser une adresse du type &amp;lt;code&amp;gt;utilisateur@exemple.net&amp;lt;/code&amp;gt;, il faut configurer Postfix. Sinon, lorsque &amp;lt;code&amp;gt;machin@mail.exemple.net&amp;lt;/code&amp;gt; envoie un mail à &amp;lt;code&amp;gt;truc@mail.exemple.net&amp;lt;/code&amp;gt;, l&#039;adresse de réponse est &amp;lt;code&amp;gt;machin@exemple.net&amp;lt;/code&amp;gt;. Si &amp;lt;code&amp;gt;truc&amp;lt;/code&amp;gt; essaie de répondre à &amp;lt;code&amp;gt;machin&amp;lt;/code&amp;gt;, Postfix ne peut envoyer la réponse. Pour que cela fonctionne correctement, il faut rajouter (ou décommenter) les lignes suivantes du fichiers &amp;lt;code&amp;gt;/etc/postfix/main.cf&amp;lt;/code&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;myorigin = $mydomain &amp;lt;br /&amp;gt; mydestination = $myhostname, localhost.$mydomain, $mydomain &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
Et voilà, grâce à SquirrelMail, en quelques dizaines de minutes, vous avez maintenant un serveur de mail équipé d&#039;une interface de type webmail complète ! Il n&#039;y a plus maintenant qu&#039;à convaincre votre hiérarchie à acheter le serveur nécessaire à son installation, et à expliquer à vos collaborateurs comment utiliser l&#039;interface de SquirrelMail...&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;div class=&amp;quot;merci&amp;quot;&amp;gt;Cette page est issue de la documentation &#039;pré-wiki&#039; de Léa a été convertie avec HTML::WikiConverter. Elle fut créée par Laurent DUBETTIER-GRENIER le 15/01/2004.&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Copyright =&lt;br /&gt;
Copyright &amp;amp;copy; 15/01/2004, Laurent DUBETTIER-GRENIER&lt;br /&gt;
{{CC-BY-NC-SA}}&lt;/div&gt;</summary>
		<author><name>LeaJice</name></author>
	</entry>
	<entry>
		<id>https://lea-linux.org/docs/index.php?title=SquirrelMail&amp;diff=16725</id>
		<title>SquirrelMail</title>
		<link rel="alternate" type="text/html" href="https://lea-linux.org/docs/index.php?title=SquirrelMail&amp;diff=16725"/>
		<updated>2009-02-09T11:00:16Z</updated>

		<summary type="html">&lt;p&gt;LeaJice : Révocation des modifications par 88.181.92.77 (Discussion) vers la dernière version de PingouinMigrateur&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Services de messagerie]]&lt;br /&gt;
= SquirrelMail =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;leatitre&amp;quot;&amp;gt;SquirrelMail&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;leapar&amp;quot;&amp;gt;par [mailto:laurent_dot_dubettier-grenier_at_laposte_dot_net Laurent DUBETTIER-GRENIER]&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;leadesc&amp;quot;&amp;gt;Installer une interface graphique de messagerie SquirrelMail&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
Vous souhaitez installer votre propre serveur de mail au sein de votre entreprise, équipé d&#039;une interface web permettant à vos collaborateurs d&#039;accéder et de gérer leur courrier électronique à distance ? C&#039;est ce que rend possible [http://www.squirrelmail.org SquirrelMail]. Rapide et stable, facile à installer, extensible par plugins à volonté, il vous permettra de créer votre propre webmail.&lt;br /&gt;
&lt;br /&gt;
Un webmail est une interface web permettant la lecture de votre courrier électronique. Vous avez certainement déjà utilisé ce type d&#039;interface, si votre adresse électronique est hébergée par [http://www.laposte.net La Poste], par exemple. L&#039;intérêt ? Pouvoir accéder de n&#039;importe où à vos messages (chez vous, au travail, dans un cybercafé...). SquirrelMail n&#039;est pas le seul webmail disponible : IMP, basé sur le projet [http://www.horde.org Horde] est une autre possibilité, très puissante, utilisée entre autres pour le webmail de [http://www.free.fr Free]. Mais SquirrelMail est beaucoup plus simple à installer, configurer et étendre que IMP. Il est de plus soutenu par une large communauté [http://www.squirrelmail-fr.org francophone].&lt;br /&gt;
&lt;br /&gt;
L&#039;objet de cet article et d&#039;expliquer la procédure d&#039;installation et de configuration d&#039;une interface graphique de messagerie basée sur SquirrelMail, sur un serveur Linux [http://www.mandrakesoft.com Mandrake] 9.2, au sein d&#039;un réseau local d&#039;entreprise. Le hostname du serveur est &amp;lt;code&amp;gt;mail.exemple.net&amp;lt;/code&amp;gt;, son adresse IP &amp;lt;code&amp;gt;192.168.0.1&amp;lt;/code&amp;gt;. Pour configurer correctement ce qui suit, il faut être connecté au serveur en tant qu&#039;administrateur (root). Cet article ne gère pas tous les éventuels problèmes de sécurité liés à la mise en place de ce service.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
Pour installer SquirrelMail, il faut un serveur Linux, sur lequel sont installés, entre autres : Apache2, Apache2-mod_php, php-ini, Apache2-mod_ssl, imap, postfix, perl, xinetd, ispell. L&#039;installation de Perl permet de configurer ultra-rapidement squirrelMail grâce à une interface développé dans ce langage, et ispell permet le fonctionnement correct du correcteur orthographique squirrelspell intégré. MySQL n&#039;est pas requis, sauf pour certains plugins. Enfin pour un fonctionnement correct, les navigateurs des postes qui utiliseront votre webmail doivent accepter les cookies.&lt;br /&gt;
&lt;br /&gt;
Vous devez avoir les services httpd, postfix, xinetd, imap activés.&amp;lt;br /&amp;gt; Pour visionner les services fonctionnant :&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# chkconfig --list | less &amp;lt;/nowiki&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour mettre en marche un service (exemple avec apache) :&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# service httpd start&amp;lt;/nowiki&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour faire en sorte qu&#039;à chaque démarrage de votre poste, le service Apache fonctionne :&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;chkconfig apache on&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il faut notamment veiller à bien lancer le service imap, dépendant de xinetd :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# chkconfig imap on&amp;lt;/nowiki&amp;gt;&amp;lt;/div&amp;gt;service xinetd restart. &lt;br /&gt;
&lt;br /&gt;
=== Php ===&lt;br /&gt;
&lt;br /&gt;
Premièrement, vérifier que PHP est installé et fonctionne correctement en créant un fichier de test dans le répertoire &amp;lt;code&amp;gt;/var/www/html&amp;lt;/code&amp;gt; : &amp;lt;br /&amp;gt;&amp;lt;code&amp;gt;vi phpinfo.php&amp;lt;br /&amp;gt;&amp;lt;/code&amp;gt; Insérer les instructions php suivantes dans ce fichier :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;?&amp;lt;br /&amp;gt; phpinfo();&amp;lt;br /&amp;gt; ?&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Puis tester le fonctionnement de php :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# lynx http://127.0.0.1/phpinfo.php&amp;lt;/nowiki&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vous devez obtenir une page donnant les caractéristiques complète de votre installation de PHP et de ces modules additionnels. Si cela fonctionne correctement, vous pouvez effacer le fichier &amp;lt;code&amp;gt;phpinfo.php&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Il faut ensuite configurer &amp;lt;code&amp;gt;/etc/php.ini&amp;lt;/code&amp;gt;, notamment : &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;session.use_cookies = 1&amp;lt;br /&amp;gt; file_uploads = On (pour autoriser les fichiers attachés)&amp;lt;br /&amp;gt; upload_max_filesize = 2M (règle la taille maxi des fichiers attachés)&amp;lt;br /&amp;gt; register_globals=off (il est placé par défaut sur On par la distribution Mandrake)&amp;lt;br /&amp;gt; expose_php = Off (sécurité : n&#039;expose pas le fait que votre serveur héberge PHP)&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le paramètre &amp;lt;code&amp;gt;session.save_path&amp;lt;/code&amp;gt; doit pointer vers un répertoire lisible uniquement par le serveur web (&amp;lt;code&amp;gt;/var/squirrel/session&amp;lt;/code&amp;gt; par exemple) :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;mkdir -p /var/squirrel/session&amp;lt;br /&amp;gt; chgrp apache /var/squirrel/session&amp;lt;br /&amp;gt; chown apache /var/squirrel/session&amp;lt;br /&amp;gt; chmod 730 /var/squirrel/session&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Redémarrer le serveur Apache :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;service httpd restart&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== SquirrelMail ===&lt;br /&gt;
&lt;br /&gt;
Pour installer SquirrelMail, il faut télécharger la dernière version (&amp;lt;code&amp;gt;squirrelmail-1.4.2.tar.gz &amp;lt;/code&amp;gt;&amp;lt;nowiki&amp;gt;: 2.74 Mo), la décompresser dans un répertoire lisible par le serveur web (&amp;lt;/nowiki&amp;gt;&amp;lt;code&amp;gt;/var/www/html/&amp;lt;/code&amp;gt; par exemple), changer le nom du répertoire (&amp;lt;code&amp;gt;mv squirrelmail-1.4.2 squirrelmail&amp;lt;/code&amp;gt;), créer les deux répertoires de stockage des données et des fichiers joints :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;mkdir -p /var/squirrel/data&amp;lt;br /&amp;gt; chown apache /var/squirrel/data&amp;lt;br /&amp;gt; chgrp apache /var/squirrel/data&amp;lt;br /&amp;gt; mkdir -p /var/squirrel/attachement&amp;lt;br /&amp;gt; chgrp apache /var/squirrel/attachement&amp;lt;br /&amp;gt; chmod 730 /var/squirrel/attachement&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ceci cause un problème : si quelqu&#039;un prépare un mail avec pièce jointe, mais interromps son action avant de l&#039;expédier, les pièces jointes resteront éternellement dans le répertoire &amp;lt;code&amp;gt;/var/squirrel/attachement&amp;lt;/code&amp;gt;. Il faut donc prévoir une tâche cron qui supprime l&#039;ensemble des fichiers de ce répertoire à intervalle régulier, en espérant que personne n&#039;est en train d&#039;envoyer une pièce jointe au même moment... Voici un exemple permettant de supprimer tous les jours à 23H15 le contenu du répertoire &amp;lt;code&amp;gt;/var/squirrel/attachement&amp;lt;/code&amp;gt; :&amp;lt;br /&amp;gt; éditer le fichier crontab et ajouter la ligne :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# crontab -e&amp;lt;/nowiki&amp;gt;&amp;lt;br /&amp;gt; 15 23 * * * /root/rm_attachement.sh&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
le fichier &amp;lt;code&amp;gt;rm_attachement.sh&amp;lt;/code&amp;gt;, executable (&amp;lt;code&amp;gt;chmod +x rm_attachement.sh&amp;lt;/code&amp;gt;), contient les lignes suivantes :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# cd /var/squirrel/attachement&amp;lt;/nowiki&amp;gt;&amp;lt;br /&amp;gt; rm -f *&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Puis il faut alors configurer squirrelmail soit manuellement en renommant le fichier &amp;lt;code&amp;gt;config_default.php&amp;lt;/code&amp;gt; en &amp;lt;code&amp;gt;config.php&amp;lt;/code&amp;gt; (répertoire &amp;lt;code&amp;gt;/var/www/html/squirrelmail/config&amp;lt;/code&amp;gt;) puis en l&#039;éditant pour modifier ses paramètres, soit, beaucoup plus convivial, en utilisant le petit script perl &amp;lt;code&amp;gt;conf.pl&amp;lt;/code&amp;gt; situé dans ce même répertoire (nécessite que le paquetage perl soit installé). Pour le lancer : &amp;lt;code&amp;gt;./conf.pl&amp;lt;/code&amp;gt; (point slash conf.pl). Un menu comportant 9 options apparaît, qui permet de configurer complètement SquirrelMail. Quelques modifications à effectuer :&lt;br /&gt;
&lt;br /&gt;
* Organization Preferences / Default Language : remplacer en_US par fr_FR&lt;br /&gt;
* Server Settings / Domain : exemple.net&lt;br /&gt;
* General Options / Data Directory : /var/squirrel/data&lt;br /&gt;
* General Options / Attachment Directory : /var/squirrel/attachement&lt;br /&gt;
* Themes : pour choisir celui qui vous plaît !&lt;br /&gt;
* Plugins : pour installer un plugins, parmi ceux disponibles (Available Plugins)&lt;br /&gt;
* S sauve ces modifications, Q quitte l&#039;application de configuration.&lt;br /&gt;
&lt;br /&gt;
Puis, à partir d&#039;un navigateur sur un poste distant, se rendre à l&#039;url &amp;lt;code&amp;gt;http://192.168.0.1/squirrelmail/&amp;lt;/code&amp;gt; ou &amp;lt;code&amp;gt;http://mail.exemple.net/squirrelmail&amp;lt;/code&amp;gt;&amp;lt;br /&amp;gt; si vous avez un serveur DNS correctement configuré. L&#039;interface de squirrelmail apparaît.&lt;br /&gt;
&lt;br /&gt;
Remarque : Si vous n&#039;avez pas de serveur DNS, avec un poste Windows distant, il faut configurer le fichier hosts situé dans le répertoire &amp;lt;code&amp;gt;C:\WINNT\SYSTEM32\DRIVERS\ETC&amp;lt;/code&amp;gt; , et rajouter la ligne : &amp;lt;code&amp;gt;192.168.0.1 mail.exemple.net&amp;lt;/code&amp;gt;. Sur un poste Linux distant, il faut rajouter la même ligne dans le fichier &amp;lt;code&amp;gt;/etc/hosts&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Plugins ===&lt;br /&gt;
&lt;br /&gt;
Une fois que tout est installé et en état de fonctionnement, vous aurez peut-être envie d&#039;étendre les fonctionnalités de votre interface graphique de messagerie. Pour cela, il faut installer un ou plusieurs plugins, et le choix est vaste... Il en existe plus de 170 différents ! Par défaut, 16 plugins sont déjà installés (mais non activé !) :&lt;br /&gt;
&lt;br /&gt;
* Abook_take : pour récupérer facilement l&#039;adresse de l&#039;expéditeur d&#039;un mail dans votre carnet d&#039;adresse.&lt;br /&gt;
* Administrator : pour administrer à distance la configuration de SquirrelMail.&lt;br /&gt;
* Bug_report : pour reporter facilement un bug à l&#039;équipe de développement.&lt;br /&gt;
* Calendar : un calendrier simple.&lt;br /&gt;
* Delete_move_next : pour effacer et déplacer facilement vos mails.&lt;br /&gt;
* Filters : pour filtrer vos mails (antispam)&lt;br /&gt;
* Fortune : pour insérer une devise dans vos mails.&lt;br /&gt;
* Info : pour dépanner le serveur IMAP (ne pas activer en usage normal !)&lt;br /&gt;
* Listcommands : ajoute une ligne à tout mail en provenance d&#039;une mailing-list, permettant notamment de se dés-inscrire ou de visionner les archives de la mailing-list.&lt;br /&gt;
* Mail_fetch : pour récupérer vos mails sur un serveur pop.&lt;br /&gt;
* Message_details : pour accéder à la source du mail reçu.&lt;br /&gt;
* Newmail : ajoute une musique vous signalant un nouveau message reçu.&lt;br /&gt;
* Sent_subfolders : pour gérer les sous répertoires.&lt;br /&gt;
* Spamcop : pour rapidement signaler à spamcop.net un spammeur.&lt;br /&gt;
* Squirrelspell : un dictionnaire basé sur ispell.&lt;br /&gt;
* Translate : Envoi votre message vers un serveur de traduction en une autre langue.&lt;br /&gt;
&lt;br /&gt;
Pour installer un plugin c&#039;est plus ou moins simple : certains requièrent l&#039;installation de paquetages supplémentaires pour fonctionner (serveur de base de données MySQL, par exemple), d&#039;autres s&#039;installent en quelques instants. Par exemple, le plugin nommé &amp;quot;&amp;lt;code&amp;gt;Show Username and IP&amp;lt;/code&amp;gt;&amp;quot; permet d&#039;afficher l&#039;adresse IP et le nom d&#039;utilisateur de la personne connectée au webmail. Pour l&#039;installer, il suffit de télécharger le paquetage (&amp;lt;code&amp;gt;show_user_and_ip-2.2.3.tar&amp;lt;/code&amp;gt;), de le copier dans le répertoire plugins (&amp;lt;code&amp;gt;/var/www/html/squirrelmail/plugins&amp;lt;/code&amp;gt;), de le décompresser (&amp;lt;code&amp;gt;tar xvf show_user_and_ip-2.2.3.tar&amp;lt;/code&amp;gt;) et de l&#039;activer par l&#039;intermédiaire de l&#039;interface &amp;lt;code&amp;gt;conf.pl&amp;lt;/code&amp;gt; (rubrique plugins). On peut difficilement faire plus simple !&lt;br /&gt;
&lt;br /&gt;
=== Utilisateurs ===&lt;br /&gt;
&lt;br /&gt;
Seul les utilisateurs ayant un compte sur votre serveur de mail auront la possibilité d&#039;utiliser SquirrelMail. Pour créer un compte uniquement destiné à la messagerie, sans possibilité de connections sur votre serveur, il faut d&#039;abord créer un groupe d&#039;utilisateur dédié à l&#039;utilisation de SquirrelMail :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;groupadd squirrelmail&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Puis créer chaque utilisateur par l&#039;instruction suivante :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;useradd -c &amp;quot;nom_utilisateur ou commentaire&amp;quot; -s /bin/false -g squirrelmail nom_utilisateur&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Enfin définir le mot de passe pour chaque compte nouvellement créé :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;passwd nom_utilisateur&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour tester le fonctionnement, essayer d&#039;envoyer des mails à un autre compte et à vous même. Utiliser d&#039;abord une adresse mail du type &amp;lt;code&amp;gt;utilisateur@mail.exemple.net&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Postfix ===&lt;br /&gt;
&lt;br /&gt;
Pour utiliser une adresse du type &amp;lt;code&amp;gt;utilisateur@exemple.net&amp;lt;/code&amp;gt;, il faut configurer Postfix. Sinon, lorsque &amp;lt;code&amp;gt;machin@mail.exemple.net&amp;lt;/code&amp;gt; envoie un mail à &amp;lt;code&amp;gt;truc@mail.exemple.net&amp;lt;/code&amp;gt;, l&#039;adresse de réponse est &amp;lt;code&amp;gt;machin@exemple.net&amp;lt;/code&amp;gt;. Si &amp;lt;code&amp;gt;truc&amp;lt;/code&amp;gt; essaie de répondre à &amp;lt;code&amp;gt;machin&amp;lt;/code&amp;gt;, Postfix ne peut envoyer la réponse. Pour que cela fonctionne correctement, il faut rajouter (ou décommenter) les lignes suivantes du fichiers &amp;lt;code&amp;gt;/etc/postfix/main.cf&amp;lt;/code&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;myorigin = $mydomain &amp;lt;br /&amp;gt; mydestination = $myhostname, localhost.$mydomain, $mydomain &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
Et voilà, grâce à SquirrelMail, en quelques dizaines de minutes, vous avez maintenant un serveur de mail équipé d&#039;une interface de type webmail complète ! Il n&#039;y a plus maintenant qu&#039;à convaincre votre hiérarchie à acheter le serveur nécessaire à son installation, et à expliquer à vos collaborateurs comment utiliser l&#039;interface de SquirrelMail...&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;div class=&amp;quot;merci&amp;quot;&amp;gt;Cette page est issue de la documentation &#039;pré-wiki&#039; de Léa a été convertie avec HTML::WikiConverter. Elle fut créée par Laurent DUBETTIER-GRENIER le 15/01/2004.&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Copyright =&lt;br /&gt;
Copyright &amp;amp;copy; 15/01/2004, Laurent DUBETTIER-GRENIER&lt;br /&gt;
{{CC-BY-NC-SA}}&lt;/div&gt;</summary>
		<author><name>LeaJice</name></author>
	</entry>
	<entry>
		<id>https://lea-linux.org/docs/index.php?title=Utilisateur:Kozaki&amp;diff=16720</id>
		<title>Utilisateur:Kozaki</title>
		<link rel="alternate" type="text/html" href="https://lea-linux.org/docs/index.php?title=Utilisateur:Kozaki&amp;diff=16720"/>
		<updated>2009-02-05T13:33:58Z</updated>

		<summary type="html">&lt;p&gt;LeaJice : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Bonjour Houston, ici kozaki de [http://guides-info.org/linux/ guides-info.org]&lt;br /&gt;
&lt;br /&gt;
Ah wouaaaaaah !&lt;br /&gt;
La nouvelle structure, les fonctionnalités et... le contenu de Léa-Linux 2009 sont énooormes :D&lt;br /&gt;
&lt;br /&gt;
Anne, Fred, Jice et Serge c&#039;est fantastique. Bravo.&lt;br /&gt;
&lt;br /&gt;
Merci beaucoup pour les compliments, mais l&#039;équipe actuelle a bien changé, cf. la news en 1ère pagte sur les 10 ans de Léa. Je redirige donc vers Prae, Jiel et les autres :-) [[Utilisateur:LeaJice|LeaJice]] 5 février 2009 à 13:33 (UTC)&lt;/div&gt;</summary>
		<author><name>LeaJice</name></author>
	</entry>
	<entry>
		<id>https://lea-linux.org/docs/index.php?title=Logith%C3%A8que:Gestion_d%27entreprise&amp;diff=16719</id>
		<title>Logithèque:Gestion d&#039;entreprise</title>
		<link rel="alternate" type="text/html" href="https://lea-linux.org/docs/index.php?title=Logith%C3%A8que:Gestion_d%27entreprise&amp;diff=16719"/>
		<updated>2009-02-05T13:32:34Z</updated>

		<summary type="html">&lt;p&gt;LeaJice : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
entrez ci-dessous les logiciels de gestion d&#039;entreprise que vous connaissez.&lt;/div&gt;</summary>
		<author><name>LeaJice</name></author>
	</entry>
	<entry>
		<id>https://lea-linux.org/docs/index.php?title=Logith%C3%A8que:Gestion&amp;diff=16718</id>
		<title>Logithèque:Gestion</title>
		<link rel="alternate" type="text/html" href="https://lea-linux.org/docs/index.php?title=Logith%C3%A8que:Gestion&amp;diff=16718"/>
		<updated>2009-02-05T13:31:07Z</updated>

		<summary type="html">&lt;p&gt;LeaJice : a renommé Logithèque:Gestion en Logithèque:Gestion d&amp;#039;entreprise&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Logithèque:Gestion d&#039;entreprise]]&lt;/div&gt;</summary>
		<author><name>LeaJice</name></author>
	</entry>
	<entry>
		<id>https://lea-linux.org/docs/index.php?title=Logith%C3%A8que:Gestion_d%27entreprise&amp;diff=16717</id>
		<title>Logithèque:Gestion d&#039;entreprise</title>
		<link rel="alternate" type="text/html" href="https://lea-linux.org/docs/index.php?title=Logith%C3%A8que:Gestion_d%27entreprise&amp;diff=16717"/>
		<updated>2009-02-05T13:31:07Z</updated>

		<summary type="html">&lt;p&gt;LeaJice : a renommé Logithèque:Gestion en Logithèque:Gestion d&amp;#039;entreprise&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;?&lt;br /&gt;
&lt;br /&gt;
mais qu&#039;est ce que je fous la moi&lt;br /&gt;
&lt;br /&gt;
un lien du forum ubuntu m&#039;a dirigé par la pour un logiciel de gestion de stocks&lt;/div&gt;</summary>
		<author><name>LeaJice</name></author>
	</entry>
	<entry>
		<id>https://lea-linux.org/docs/index.php?title=PS2PDF&amp;diff=16716</id>
		<title>PS2PDF</title>
		<link rel="alternate" type="text/html" href="https://lea-linux.org/docs/index.php?title=PS2PDF&amp;diff=16716"/>
		<updated>2009-02-05T13:01:35Z</updated>

		<summary type="html">&lt;p&gt;LeaJice : Révocation des modifications par 62.160.58.161 (Discussion) vers la dernière version de PingouinMigrateur&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Gestion des impressions]]&lt;br /&gt;
= PS2PDF =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;leatitre&amp;quot;&amp;gt;PS2PDF&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;leapar&amp;quot;&amp;gt;par Dimitri Clatot&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;leadesc&amp;quot;&amp;gt;Ou : comment votre serveur linux convertit vos documents de différents formats en fichier PDF à partir d&#039;un client Linux ou Windows.&amp;lt;/div&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== PS2PDF ==&lt;br /&gt;
&lt;br /&gt;
=== Présentation ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ps2pdf&amp;lt;/span&amp;gt; est un filtre qui permet de transformer un document postscript (&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;.ps&amp;lt;/span&amp;gt;) en document Acrobat reader (&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;.pdf&amp;lt;/span&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Vous pouvez l&#039;utiliser en ligne de commande très simplement (&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ps2pdf &#039;&#039;doc&#039;&#039;.ps &#039;&#039;doc&#039;&#039;.pdf&amp;lt;/span&amp;gt;) ; cet article va vous expliquer comment votre serveur linux peut convertir vos documents au format PDF à partir d&#039;un client linux ou window$.&lt;br /&gt;
&lt;br /&gt;
Depuis votre client, vous allez imprimer sur une pseudo imprimante, qui va créer un document PDF, mis à disposition dans un répertoire public.&lt;br /&gt;
&lt;br /&gt;
Pour réaliser cette recette, nous avons besoin de 3 ingrédients :&lt;br /&gt;
&lt;br /&gt;
* [../reseau/samba.php3 Samba]&amp;lt;nowiki&amp;gt;: Nous l&#039;utiliserons pour partager une imprimante &#039;PDF&#039; et un répertoire public.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
* [http://www.cs.wisc.edu/~ghost/ GNU Ghostscript] est l&#039;application qui permettra à travers le script ps2pdf de transformer le travail d&#039;impression soumis à l&#039;imprimante &#039;PDF&#039; en fichier pdf.&lt;br /&gt;
* Un script d&#039;impression créé par [mailto:jbright@winfordeng.com John Bright.]&lt;br /&gt;
&lt;br /&gt;
Voici le cheminement :&lt;br /&gt;
&lt;br /&gt;
client &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--&amp;gt;&amp;lt;/span&amp;gt; imprimante PDF &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;--&amp;gt;&amp;lt;/span&amp;gt; script &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;printpdf--&amp;gt;&amp;lt;/span&amp;gt; Répertoire public &amp;lt;br /&amp;gt;Â &lt;br /&gt;
&lt;br /&gt;
=== Installation ===&lt;br /&gt;
&lt;br /&gt;
Nous allons commencer par créer le répertoire public puis celui où seront stockés les fichiers traités :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;[root@micro home]# mkdir -p /home/public/pdf&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
en affectant les droits de lecture, ecriture et exécution (rwx) à l&#039;utilisateur nobody :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;[root@micro home]# chown nobody:nobody -R /home/public &amp;lt;br /&amp;gt;[root@micro home]# chmod u+rwx -R /home/public&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;On va ensuite utiliser le script [http://www.linuxgazette.com/issue72/misc/bright/printpdf.sh.txt printpdf] suivant :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;#!/bin/sh &amp;lt;/nowiki&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;nowiki&amp;gt;# &amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;printpdf&#039;&#039;&#039;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;nowiki&amp;gt;# Simple script pour convertir un fichier postscript &amp;lt;/nowiki&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;nowiki&amp;gt;# spécifié en un document PDF et le déposer dans un &amp;lt;/nowiki&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;nowiki&amp;gt;# répertoire partagé avec Samba. &amp;lt;/nowiki&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;nowiki&amp;gt;#Â  &amp;lt;/nowiki&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;nowiki&amp;gt;# Arguments: &amp;lt;/nowiki&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;nowiki&amp;gt;# 1er - Le nom du fichier de spool &amp;lt;/nowiki&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;nowiki&amp;gt;# &amp;lt;/nowiki&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;nowiki&amp;gt;# John Bright, 2001, jbright@winfordeng.com &amp;lt;/nowiki&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;nowiki&amp;gt;# Nous allons créer le pdf dans un fichier temporaire &amp;lt;/nowiki&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;nowiki&amp;gt;# basé sur la date et l&#039;heure courante. &amp;lt;/nowiki&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;nowiki&amp;gt;# Après cela, nous le renommerons avec l&#039;extension pdf. &amp;lt;/nowiki&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;nowiki&amp;gt;# On fait cela car si un utilisateur essaie d&#039;ouvrir un &amp;lt;/nowiki&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;nowiki&amp;gt;# fichier pdf qui est encore en cours d&#039;écriture, il &amp;lt;/nowiki&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;nowiki&amp;gt;# obtiendra un message d&#039;erreur disant que le PDF est &amp;lt;/nowiki&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;nowiki&amp;gt;# corrompu, alors qu&#039;il n&#039;est simplement pas fini. &amp;lt;/nowiki&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;DATE=`date +%b%d-%H%M%S` &amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;nowiki&amp;gt;# Répertoire où placer la sortie. &amp;lt;/nowiki&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;nowiki&amp;gt;# Assurez-vous que ce répertoire existe, et que &amp;lt;/nowiki&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;nowiki&amp;gt;# l&#039;utilisateur sous lequel tourne Samba peut y écrire &amp;lt;/nowiki&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;nowiki&amp;gt;# (par exemple l&#039;utilisateur nobody) &amp;lt;/nowiki&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;OUTDIR=/home/public/pdf &amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;ps2pdf $1 $OUTDIR/$DATE.temp &amp;lt;br /&amp;gt;mv $OUTDIR/$DATE.temp $OUTDIR/$DATE.pdf &amp;lt;br /&amp;gt;rm $1&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
que l&#039;on copie dans le répertoire &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/usr/bin&amp;lt;/span&amp;gt; sans oublier de lui mettre les droits d&#039;exécution :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;[root@micro root]# mv printpdf.sh.txt /usr/bin/printpdf &amp;lt;br /&amp;gt;[root@micro root]# chmod +x /usr/bin/printpdf*&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Installation de Ghostscript ===&lt;br /&gt;
&lt;br /&gt;
Le script &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ps2pdf&amp;lt;/span&amp;gt; fait partie de l&#039;application Ghostscript que l&#039;on peut trouver sous le nom de package &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;ghostscript&amp;lt;/span&amp;gt; sur Red Hat/Mandrake, &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;gs&amp;lt;/span&amp;gt; ou &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;gs-aladdin&amp;lt;/span&amp;gt; sur Debian. Vous pouvez l&#039;installer avec le package adapté à votre distribution ou à partir des sources disponibles sur le site des auteurs.&lt;br /&gt;
&lt;br /&gt;
=== Paramètrage de Samba ===&lt;br /&gt;
&lt;br /&gt;
Nous allons créer une imprimante nommée &amp;quot;pdf&amp;quot; dans Samba. &amp;lt;br /&amp;gt;Voici le fichier de configuration mininal que vous pouvez également adapter à votre installation.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;#Fichier smb.conf &amp;lt;/nowiki&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;[global] &amp;lt;br /&amp;gt;Â guest account = nobody &amp;lt;br /&amp;gt;Â invalid users = root &amp;lt;br /&amp;gt;Â interfaces = 127.0.0.1 eth0 &amp;lt;br /&amp;gt;Â bind interfaces only = Yes &amp;lt;br /&amp;gt;Â hosts allow = 192.168. &amp;lt;br /&amp;gt;Â security = share &amp;lt;br /&amp;gt;Â workgroup = WORKGROUP &amp;lt;br /&amp;gt;Â printer driver file = /home/printer/printers.def &amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;[public] &amp;lt;br /&amp;gt;Â path = /home/public &amp;lt;br /&amp;gt;Â browseable = yes &amp;lt;br /&amp;gt;Â writeable = yes &amp;lt;br /&amp;gt;Â guest ok = yes &amp;lt;br /&amp;gt;Â force user = nobody &amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&#039;&#039;&#039;[pdf]&#039;&#039;&#039;&amp;lt;br /&amp;gt;&#039;&#039;&#039;Â path = /tmp&#039;&#039;&#039;&amp;lt;br /&amp;gt;&#039;&#039;&#039;Â printable = yes&#039;&#039;&#039;&amp;lt;br /&amp;gt;&#039;&#039;&#039;Â guest ok = yes&#039;&#039;&#039;&amp;lt;br /&amp;gt;&#039;&#039;&#039;Â print command = /usr/bin/printpdf %s&#039;&#039;&#039;&amp;lt;br /&amp;gt;&#039;&#039;&#039;Â lpq command =&#039;&#039;&#039;&amp;lt;br /&amp;gt;&#039;&#039;&#039;Â lprm command =&#039;&#039;&#039;&amp;lt;br /&amp;gt;&#039;&#039;&#039;Â printer driver = HP Color LaserJet 4500 PS&#039;&#039;&#039;&amp;lt;br /&amp;gt;&#039;&#039;&#039;Â printer driver location = \\%h\printer$&#039;&#039;&#039;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;[printer] &amp;lt;br /&amp;gt;Â path = /home/printer &amp;lt;br /&amp;gt;Â guest ok = yes &amp;lt;br /&amp;gt;Â read only = yes&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Installation ===&lt;br /&gt;
&lt;br /&gt;
==== Pilote pour windows ====&lt;br /&gt;
&lt;br /&gt;
Pour que le pilote de l&#039;imprimante s&#039;installe automatiquement sous window$, il faut récupérer celui que l&#039;on a choisi (de préférence un pilote d&#039;imprimante couleur PostScript, ici HP Color LaserJet 4500 PS) et extraire le fichier de configuration qui a l&#039;extension INF.&lt;br /&gt;
&lt;br /&gt;
Puis avec la commande &#039;&amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;make_printerdef&amp;lt;/span&amp;gt;&#039; fournie avec Samba (taper sur une seule ligne) :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;[root@micro public]# make_printerdef CONFIG.INF &#039;PILOTE COULEUR POSTSCRIPT&#039; &amp;gt; /home/printer/printers.def&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;Après avoir tapé la commande, le programme vous demande de copier les fichiers du pilote correspondant, ici dans &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/home/printer&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== Poste client Windows ====&lt;br /&gt;
&lt;br /&gt;
L&#039;installation sur un poste windows est on ne peut plus simple, il suffit d&#039;ajouter une imprimante réseau et indiquer le chemin de la file d&#039;impression dans notre exemple \\LE_MICRO_LINUX\PDF. Puis le pilote s&#039;installera tout seul.&lt;br /&gt;
&lt;br /&gt;
==== Poste client Linux ====&lt;br /&gt;
&lt;br /&gt;
Ici, je vous laisse le choix des armes pour configurer votre imprimante (vi, webmin...) qui en général se base sur le script &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;smbprint&amp;lt;/span&amp;gt; fourni avec Samba.&lt;br /&gt;
&lt;br /&gt;
Une fois tout installé, lancez une impression sur cette imprimante et récupérez votre fichier sous format pdf dans le répertoire partagé &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;/home/public/pdf&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== The END ===&lt;br /&gt;
&lt;br /&gt;
Cet article est une libre adaptation avec l&#039;accord de son auteur de [http://www.linuxgazette.com/issue72/bright.html celui-ci].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;merci&amp;quot;&amp;gt;Cette page est issue de la documentation &#039;pré-wiki&#039; de Léa a été convertie avec HTML::WikiConverter. Elle fut créée par Dimitri CLATOT le 11/01/2002.&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Copyright =&lt;br /&gt;
Copyright &amp;amp;copy; 11/01/2002, Dimitri CLATOT&lt;br /&gt;
{{CC-BY-NC-SA}}&lt;/div&gt;</summary>
		<author><name>LeaJice</name></author>
	</entry>
</feed>