<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet title="XSL formatting" type="text/xsl" href="http://planet.ubuntu-fr.org/feed/rss2/xslt" ?><rss version="2.0"
  xmlns:dc="http://purl.org/dc/elements/1.1/"
  xmlns:wfw="http://wellformedweb.org/CommentAPI/"
  xmlns:content="http://purl.org/rss/1.0/modules/content/">
<channel>
  <title>Planet Ubuntu Francophone - Script</title>
  <link>http://planet.ubuntu-fr.org/</link>
  <description></description>
  <language>fr</language>
  <pubDate>Mon, 06 Oct 2008 14:28:01 +0200</pubDate>
  <copyright></copyright>
  <docs>http://blogs.law.harvard.edu/tech/rss</docs>
  <generator>Dotclear</generator>
  
    
  <item>
    <title>Vim : mon vimrc personnalisé, pour mieux profiter de cet éditeur avancé !</title>
    <link>http://achraf.cherti.name/blog/2008/09/01/vim-vimrc-gvimrc-personnalise-editeur-avance-programmation-correction-orthographique-orthographe-raccourcis-utiles-clavier-backup/</link>
    <guid isPermaLink="false">urn:md5:e3c595f01af3ca5d65eac1d0c6ac9f57</guid>
    <pubDate>Mon, 01 Sep 2008 13:55:59 +0200</pubDate>
    <dc:creator>Asher256</dc:creator>
        <category>PUF</category>
        <category>Accueil</category><category>Linux</category><category>Planet-libre</category><category>Planet-ubuntu</category><category>Programmation</category><category>Script</category><category>Vim</category>    
    <description>    &lt;p&gt;&lt;img class=&quot;aligncenter&quot; src=&quot;http://achraf.cherti.name/blog/images/text-editor.png&quot; alt=&quot;Vim / gVim, éditeur texte, une icône&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Vim&lt;/strong&gt; a depuis assez longtemps été mon éditeur de texte préféré !&lt;/p&gt;
&lt;p&gt;C'est un peu mon &lt;strong&gt;couteau suisse&lt;/strong&gt; de l'&lt;strong&gt;édition de texte&lt;/strong&gt;. Je l'utilise pour &lt;strong&gt;rédiger mes notes&lt;/strong&gt;, modifier les &lt;strong&gt;fichiers de configuration&lt;/strong&gt; de mes &lt;strong&gt;serveurs distants&lt;/strong&gt; ou programmer (&lt;a href=&quot;http://gshutdown.tuxfamily.org/&quot;&gt;GShutdown&lt;/a&gt; ou &lt;a href=&quot;http://jargon.tuxfamily.org/&quot;&gt;Jargon Informatique&lt;/a&gt; ont été entièrement écrits avec cet éditeur !).&lt;/p&gt;
&lt;p&gt;Les aspects qui m'ont toujours séduits dans cet éditeur c'est son côté geek, avec ses centaines de fonctions permettant de faire tout et n'importe quoi, et son extensibilité (j'en parlerai dans un autre billet, pour vous faire découvrir les plugins à ne pas rater), grâce aux plugins.&lt;/p&gt;
&lt;p&gt;Une des choses légèrement ennuyantes avec Vim, quand on débute, c'est qu'il n'est pas par défaut configuré pour qu'on profite de toutes ses jolies fonctionnalités ; qui devraient pourant être activées d'office ! C'est pour cette raison que, avec le temps, j'ai créé puis amélioré mon &lt;strong&gt;vimrc&lt;/strong&gt;, pour que Vim me permette de mieux travailler.&lt;/p&gt;
&lt;p&gt;Pour vous faire gagner du temps, j'ai décidé de mettre en ligne mon vimrc, pour que tout intéressé puisse l'étudier, l'utiliser, le modifier, etc. et pourquoi pas proposer des améliorations !&lt;/p&gt;
&lt;p&gt;Grâce au Vimrc disponible ci-dessous, vous profiterez des avantages suivants :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Des backups automatiques dans le répertoire ~/.vim/backup (pour ne pas encombrer vos répertoires de fichiers de sauvegarde finissant avec ~ par exemple)&lt;/li&gt;
&lt;li&gt;Une indentation activée automatiquement lorsque vous éditerez un code source. Idem pour la colorisation syntaxique.&lt;/li&gt;
&lt;li&gt;Quand vous chercherez dans votre texte avec un mot-clé, ce mot-clé se voit attribué une couleur de fond.&lt;/li&gt;
&lt;li&gt;Les fichiers avec les extensions *.o, *.dll, *.so et *.a sont ignorés, quand vous utilisez l'astérisque (gain de temps pour sélectionner le fichier qui vous intéresse).&lt;/li&gt;
&lt;li&gt;Quand vous utilisez l'astérisque et le bouton tab, pour sélectionner un fichier par exemple, un menu horizontal apparaît dans la barre des status, permettant de mieux sélectionner les fichiers.&lt;/li&gt;
&lt;li&gt;Les PDFs sont lus d'une manière transparente, en utilisant pdftotext (logiciel à installer)&lt;/li&gt;
&lt;li&gt;Des raccourcis claviers utiles sont ajoutés, comme &quot;,lf&quot;, pour avoir la correction orthographique en français, &quot;,le&quot;, pour avoir celle en anglais, &quot;,ln&quot; pour désactiver la correction orthographique, &quot;,t&quot; pour ouvrir un nouvel onglet, &quot;,w&quot; pour le fermer, &quot;,m&quot; pour cacher le menu de gvim, ctrl-a pour tout sélectionner, ctrl-c pour copier et ctrl-p pour coller et &quot;,h&quot; pour convertir un code source colorié en &lt;acronym title=&quot;HyperText Markup Language&quot;&gt;HTML&lt;/acronym&gt;.&lt;/li&gt;
&lt;li&gt;Et bien d'autres options, que je vous invite à découvrir dans le script (que j'ai commenté pour vous rendre sa compréhension plus facile. Néanmoins, à la moindre lacune, n'hésitez pas à passer par l'aide de vim &quot;:help&quot; ou à poster un commentaire !)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Pour installer le script Sous &lt;acronym title=&quot;GNU is Not UNIX&quot;&gt;GNU&lt;/acronym&gt;/Linux, mettez son contenu dans le fichier &quot;~/.vimrc&quot;.&lt;/p&gt;
&lt;p&gt;Le vimrc personnalisé (qui est aussi &lt;a title=&quot;Vimrc d'Achraf Cherti (Asher256)&quot; href=&quot;http://achraf.cherti.name/blog/files/mes_programmes/vimrc_asher256.vim&quot;&gt;disponible en téléchargement&lt;/a&gt;) :&lt;/p&gt;
&lt;div&gt;scriptencoding utf-8&lt;br /&gt;
&quot;=============================================================================&lt;br /&gt;
&quot;&lt;br /&gt;
&quot; Fichier de configuration VIM personnalisé (meilleur pour la programmation,&lt;br /&gt;
&quot; raccourcis clavier utiles, etc. pour mieux profiter de cet excellent&lt;br /&gt;
&quot; éditeur).&lt;br /&gt;
&quot;&lt;br /&gt;
&quot; Auteur : Achraf cherti (aka Asher256)&lt;br /&gt;
&quot; Email &amp;nbsp;: achraf at cherti dot name&lt;br /&gt;
&quot;&lt;br /&gt;
&quot; Licence : &lt;acronym title=&quot;GNU General Public License&quot;&gt;GPL&lt;/acronym&gt;&lt;br /&gt;
&quot;&lt;br /&gt;
&quot; Site: http://achraf.cherti.name/&lt;br /&gt;
&quot;&lt;br /&gt;
&quot;=============================================================================&lt;/p&gt;
&lt;p&gt;&quot; Options {{{1&lt;/p&gt;
&lt;p&gt;&quot; Options Internes {{{2&lt;/p&gt;
&lt;p&gt;&quot; Mode non compatible avec Vi&lt;br /&gt;
set nocompatible &lt;/p&gt;
&lt;p&gt;&quot; Le backspace&lt;br /&gt;
set backspace=indent,eol,start&lt;/p&gt;
&lt;p&gt;&quot; Activer la sauvegarde&lt;br /&gt;
set backup&lt;/p&gt;
&lt;p&gt;&quot; un historique raisonnable&lt;br /&gt;
set history=100&lt;/p&gt;
&lt;p&gt;&quot; undo, pour revenir en arrière&lt;br /&gt;
set undolevels=150&lt;/p&gt;
&lt;p&gt;&quot; Suffixes à cacher&lt;br /&gt;
set suffixes=.jpg,.png,.jpeg,.gif,.bak,~,.swp,.swo,.o,.info,.aux,.log,.dvi,.bbl,.blg,.brf,.cb,.ind,.idx,.ilg,.inx,.out,.toc,.pyc,.pyo&lt;/p&gt;
&lt;p&gt;&quot; Backup dans ~/.vim/backup&lt;br /&gt;
if filewritable(expand(&quot;~/.vim/backup&quot;)) == 2&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &quot; comme le répertoire est accessible en écriture,&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &quot; on va l'utiliser.&lt;br /&gt;
&amp;nbsp; &amp;nbsp; set backupdir=$HOME/.vim/backup&lt;br /&gt;
else&lt;br /&gt;
&amp;nbsp; &amp;nbsp; if has(&quot;unix&quot;) || has(&quot;win32unix&quot;)&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &quot; C'est c'est un système compatible UNIX, on&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &quot; va créer le répertoire et l'utiliser.&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; call system(&quot;mkdir $HOME/.vim/backup -p&quot;)&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; set backupdir=$HOME/.vim/backup&lt;br /&gt;
&amp;nbsp; &amp;nbsp; endif&lt;br /&gt;
endif&lt;/p&gt;
&lt;p&gt;&quot; Inclusion d'un autre fichier avec des options&lt;br /&gt;
if filereadable(expand(&quot;~/.vimrc_local.vim&quot;))&lt;br /&gt;
&amp;nbsp; &amp;nbsp; source ~/.vimrc_local.vim&lt;br /&gt;
endif&lt;/p&gt;
&lt;p&gt;&quot; Activation de la syntaxe&lt;br /&gt;
if has(&quot;syntax&quot;)&lt;br /&gt;
&amp;nbsp; &amp;nbsp; syntax on&lt;br /&gt;
endif&lt;/p&gt;
&lt;p&gt;&quot; Quand un fichier est changé en dehors de Vim, il est relu automatiquement&lt;br /&gt;
set autoread&lt;/p&gt;
&lt;p&gt;&quot; Aucun son ou affichage lors des erreurs&lt;br /&gt;
set errorbells &lt;br /&gt;
set novisualbell&lt;br /&gt;
set t_vb=&lt;/p&gt;
&lt;p&gt;&quot; Quand une fermeture de parenthèse est entrée par l'utilisateur,&lt;br /&gt;
&quot; l'éditeur saute rapidement vers l'ouverture pour montrer où se&lt;br /&gt;
&quot; trouve l'autre parenthèse. Cette fonction active aussi un petit&lt;br /&gt;
&quot; beep quand une erreur se trouve dans la syntaxe.&lt;br /&gt;
set showmatch&lt;br /&gt;
set matchtime=2&lt;/p&gt;
&lt;p&gt;&quot; Afficher la barre d'état&lt;br /&gt;
set laststatus=2&lt;/p&gt;
&lt;p&gt;&quot; }}}2&lt;/p&gt;
&lt;p&gt;&quot; Options de recherche {{{2 &lt;/p&gt;
&lt;p&gt;&quot; Tout ce qui concerne la recherche. Incrémentale&lt;br /&gt;
&quot; avec un highlight. Elle prend en compte la&lt;br /&gt;
&quot; différence entre majuscule/minuscule.&lt;br /&gt;
set incsearch&lt;br /&gt;
set noignorecase&lt;br /&gt;
set infercase&lt;/p&gt;
&lt;p&gt;&quot; Quand la rechercher atteint la fin du fichier, pas&lt;br /&gt;
&quot; la peine de la refaire depuis le début du fichier&lt;br /&gt;
set hlsearch&lt;/p&gt;
&lt;p&gt;&quot; }}}2&lt;/p&gt;
&lt;p&gt;&quot; Options d'affichage texte {{{2&lt;/p&gt;
&lt;p&gt;&quot; Ne pas nous afficher un message quand on enregistre un readonly&lt;br /&gt;
set writeany&lt;/p&gt;
&lt;p&gt;&quot; Afficher les commandes incomplètes&lt;br /&gt;
set showcmd&lt;/p&gt;
&lt;p&gt;&quot; Afficher la position du curseur&lt;br /&gt;
set ruler&lt;/p&gt;
&lt;p&gt;&quot; Désactiver le wrapping&lt;br /&gt;
set nowrap&lt;/p&gt;
&lt;p&gt;&quot; Options folding&lt;br /&gt;
set foldmethod=marker&lt;/p&gt;
&lt;p&gt;&quot; Un petit menu qui permet d'afficher la liste des éléments&lt;br /&gt;
&quot; filtrés avec un wildcard&lt;br /&gt;
set wildmenu&lt;br /&gt;
set wildignore=*.o,*#,*~,*.dll,*.so,*.a&lt;br /&gt;
set wildmode=full&lt;/p&gt;
&lt;p&gt;&quot; Format the statusline&lt;br /&gt;
set statusline=%F%m\ %r\ Line:%l\/%L,%c\ %p%%&lt;/p&gt;
&lt;p&gt;&quot; }}}2&lt;/p&gt;
&lt;p&gt;&quot; Options d'affichage &lt;acronym title=&quot;Graphical User Interface&quot;&gt;GUI&lt;/acronym&gt; {{{2&lt;/p&gt;
&lt;p&gt;&quot; Configuration de la souris en mode console&lt;br /&gt;
&quot; =&quot;&quot; pas de souris par défaut&lt;br /&gt;
&quot;set mouse=a&lt;/p&gt;
&lt;p&gt;&quot; Améliore l'affichage en disant à vim que nous utilisons un terminal rapide&lt;br /&gt;
set ttyfast&lt;/p&gt;
&lt;p&gt;&quot; Lazy redraw permet de ne pas mettre à jour l'écran&lt;br /&gt;
&quot; quand un script vim est entrain de faire une opération&lt;br /&gt;
set lazyredraw&lt;/p&gt;
&lt;p&gt;if has(&quot;gui_running&quot;)&lt;br /&gt;
&amp;nbsp; &amp;nbsp; map &amp;lt;S-Insert&amp;gt; &amp;lt;MiddleMouse&amp;gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; map &amp;lt;S-Insert&amp;gt; &amp;lt;MiddleMouse&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; set mousehide &quot; On cache la souris en mode gui&lt;br /&gt;
&amp;nbsp; &amp;nbsp; set ch=2 &quot; ligne de commande dans deux ligne&lt;br /&gt;
endif&lt;/p&gt;
&lt;p&gt;&quot; }}}2&lt;/p&gt;
&lt;p&gt;&quot; Noms des fichiers {{{2&lt;/p&gt;
&lt;p&gt;&quot; faire en sorte que le raccourci CTRL-X-F&lt;br /&gt;
&quot; marche même quand le fichier est après&lt;br /&gt;
&quot; le caractère égal. Comme : &lt;br /&gt;
&quot; variable=/etc/&amp;lt;C-XF&amp;gt;&lt;br /&gt;
set isfname-==&lt;/p&gt;
&lt;p&gt;&quot; }}}2&lt;/p&gt;
&lt;p&gt;&quot; }}}1&lt;/p&gt;
&lt;p&gt;&quot; Autocmd {{{1&lt;/p&gt;
&lt;p&gt;set cindent&lt;br /&gt;
&quot;set autoindent&lt;br /&gt;
&quot;set smartindent&lt;/p&gt;
&lt;p&gt;if has(&quot;autocmd&quot;)&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &quot; Détection auto du format&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &quot; + activer indent&lt;br /&gt;
&amp;nbsp; &amp;nbsp; filetype plugin indent on&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; augroup divers &quot; {{{2&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; au!&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &quot; Textwidth de 78 pour tous les fichiers texte&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; autocmd FileType text setlocal textwidth=78&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &quot; Remet la position du curseur comme elle était avant&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; autocmd BufReadPost *&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; \ if line(&quot;'\&quot;&quot;) &amp;gt; 0 &amp;#038;&amp; line(&quot;'\&quot;&quot;) &amp;lt;= line(&quot;$&quot;) |&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; \ &amp;nbsp; exe &quot;normal g`\&quot;&quot; |&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; \ endif&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &quot; La valeur des tabs par défaut&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; autocmd BufNewFile,BufRead * call ChangeTabSize(4, 0)&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &quot; Ne pas faire de wrap dans les fichiers ChangeLog&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; autocmd BufNewFile,BufRead ChangeLog set nowrap textwidth=0&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; autocmd BufNewFile,BufRead ChangeLog call ChangeTabSize(8, 0)&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &quot; PKGBUILD&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; autocmd BufNewFile,BufRead PKGBUILD set syntax=sh&lt;br /&gt;
&amp;nbsp; &amp;nbsp; augroup END &quot; }}}2&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; augroup pdf &quot; {{{2&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; au!&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; autocmd BufReadPre *.pdf set ro&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; autocmd BufReadPost *.pdf %!pdftotext -nopgbrk &quot;%&quot; - | fmt -csw78&lt;br /&gt;
&amp;nbsp; &amp;nbsp; augroup END &quot; }}}2&lt;br /&gt;
endif&lt;/p&gt;
&lt;p&gt;&quot; }}}1&lt;/p&gt;
&lt;p&gt;&quot; Fonctions {{{1&lt;/p&gt;
&lt;p&gt;&quot; Fonctions utilisée par vimrc {{{2&lt;/p&gt;
&lt;p&gt;function! ChangeTabSize(tab_size, expandtab)&lt;br /&gt;
&amp;nbsp; &amp;nbsp; execute(&quot;set tabstop=&quot;.a:tab_size.&quot; softtabstop=&quot;.a:tab_size.&quot; shiftwidth=&quot;.a:tab_size)&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; if a:expandtab != 0&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; execute(&quot;set expandtab&quot;)&lt;br /&gt;
&amp;nbsp; &amp;nbsp; else&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; execute(&quot;set noexpandtab&quot;)&lt;br /&gt;
&amp;nbsp; &amp;nbsp; endif&lt;br /&gt;
endfunction&lt;/p&gt;
&lt;p&gt;&quot; }}}2&lt;/p&gt;
&lt;p&gt;&quot; Les fonctions utiles pour l'utilisateur {{{2&lt;/p&gt;
&lt;p&gt;&quot; Aller dans le répertoire du fichier édité.&lt;br /&gt;
function! ChangeToFileDirectory()&lt;br /&gt;
&amp;nbsp; &amp;nbsp; if bufname(&quot;&quot;) !~ &quot;^ftp://&quot; &quot; C'est impératif d'avoir un fichier local !&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; lcd %:p:h&lt;br /&gt;
&amp;nbsp; &amp;nbsp; endif&lt;br /&gt;
endfunction&lt;/p&gt;
&lt;p&gt;map ,fd :call ChangeToFileDirectory()&amp;lt;CR&amp;gt;&lt;/p&gt;
&lt;p&gt;&quot; Entrer la commande &quot;:e&quot; dans le répertiore du fichier édité&lt;br /&gt;
if has(&quot;unix&quot;)&lt;br /&gt;
&amp;nbsp; &amp;nbsp; map ,e :e &amp;lt;C-R&amp;gt;=expand(&quot;%:p:h&quot;) . &quot;/&quot; &amp;lt;CR&amp;gt;&lt;br /&gt;
else&lt;br /&gt;
&amp;nbsp; &amp;nbsp; map ,e :e &amp;lt;C-R&amp;gt;=expand(&quot;%:p:h&quot;) . &quot;\&quot; &amp;lt;CR&amp;gt;&lt;br /&gt;
endif&lt;/p&gt;
&lt;p&gt;&quot; }}}2&lt;/p&gt;
&lt;p&gt;&quot; }}}1&lt;/p&gt;
&lt;p&gt;&quot; Raccourcis clavier {{{1&lt;/p&gt;
&lt;p&gt;&quot; Vim 7 spell checker&lt;br /&gt;
if has(&quot;spell&quot;)&lt;br /&gt;
&amp;nbsp; &amp;nbsp; setlocal spell spelllang=&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &quot; Language : FR&lt;br /&gt;
&amp;nbsp; &amp;nbsp; map ,lf :setlocal spell spelllang=fr&amp;lt;cr&amp;gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &quot; Language : EN&lt;br /&gt;
&amp;nbsp; &amp;nbsp; map ,le :setlocal spell spelllang=en&amp;lt;cr&amp;gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &quot; Language : Aucun&lt;br /&gt;
&amp;nbsp; &amp;nbsp; map ,ln :setlocal spell spelllang=&amp;lt;cr&amp;gt;&lt;br /&gt;
endif&lt;/p&gt;
&lt;p&gt;set spellsuggest=5&lt;br /&gt;
autocmd BufEnter *.txt set spell&lt;br /&gt;
autocmd BufEnter *.txt set spelllang=fr&lt;/p&gt;
&lt;p&gt;&quot; Tabs&lt;br /&gt;
map ,t :tabnew&amp;lt;cr&amp;gt;&lt;br /&gt;
map ,w :tabclose&amp;lt;cr&amp;gt;&lt;br /&gt;
imap &amp;lt;C-t&amp;gt; &amp;lt;Esc&amp;gt;&amp;lt;C-t&amp;gt;&lt;br /&gt;
imap &amp;lt;C-w&amp;gt; &amp;lt;Esc&amp;gt;&amp;lt;C-w&amp;gt;&lt;br /&gt;
map &amp;lt;tab&amp;gt; gt &lt;/p&gt;
&lt;p&gt;&quot; Cacher le menu&lt;br /&gt;
map ,m :set guioptions=+M&amp;lt;cr&amp;gt;&lt;/p&gt;
&lt;p&gt;&quot; Mode normal&lt;br /&gt;
map ,mn :set guifont=&amp;lt;cr&amp;gt;&lt;/p&gt;
&lt;p&gt;&quot; Mode programmation&lt;br /&gt;
map ,mp :set guifont=Monospace\ 9&amp;lt;cr&amp;gt;&lt;/p&gt;
&lt;p&gt;&quot; Sélectionner tout&lt;br /&gt;
map &amp;lt;C-a&amp;gt; ggVG&lt;/p&gt;
&lt;p&gt;&quot; Copier (le gv c'est pour remettre le sélection)&lt;br /&gt;
map &amp;lt;C-c&amp;gt; &quot;+ygv&lt;/p&gt;
&lt;p&gt;&quot; Couper&lt;br /&gt;
map &amp;lt;C-x&amp;gt; &quot;+x&lt;/p&gt;
&lt;p&gt;&quot; Coller&lt;br /&gt;
map &amp;lt;C-p&amp;gt; &quot;+gP&lt;/p&gt;
&lt;p&gt;&quot; Désactiver le highlight (lors d'une recherche par exemple)&lt;br /&gt;
map &amp;lt;F2&amp;gt; :let @/=&quot;&quot;&amp;lt;cr&amp;gt;&lt;/p&gt;
&lt;p&gt;&quot; Convertir un html&lt;br /&gt;
map ,h :runtime syntax/2html.vim&amp;lt;cr&amp;gt;&lt;/p&gt;
&lt;p&gt;&quot; encoder rapidement&lt;br /&gt;
map ,c ggVGg?&lt;/p&gt;
&lt;p&gt;&quot; }}}1&lt;/p&gt;
&lt;p&gt;&quot; Les plugins Vim et leurs options {{{1&lt;/p&gt;
&lt;p&gt;&quot; Gérer les fichiers man&lt;br /&gt;
runtime ftplugin/man.vim &lt;/p&gt;
&lt;p&gt;&quot; }}}1&lt;/p&gt;
&lt;p&gt;&quot; vim:ai:et:sw=4:ts=4:sts=4:tw=78:fenc=utf-8:foldmethod=marker&lt;/p&gt;&lt;/div&gt;</description>
    
    
    
      </item>
    
  <item>
    <title>Script pour GNU/Linux : lancer un logiciel X (graphique) avec un utilisateur n'ayant pas le droit</title>
    <link>http://achraf.cherti.name/blog/2008/08/31/gnu-linux-script-xauth-merge-extract-python-xorg-x11-lancer-programme-logiciel-x-graphique-avec-un-utilisateur-sans-droit/</link>
    <guid isPermaLink="false">urn:md5:c6b797062fed2717c6d6d83e131a437f</guid>
    <pubDate>Sun, 31 Aug 2008 14:51:43 +0200</pubDate>
    <dc:creator>Asher256</dc:creator>
        <category>PUF</category>
        <category>Accueil</category><category>Linux</category><category>Planet-libre</category><category>Planet-ubuntu</category><category>Programmation</category><category>Python</category><category>Script</category>    
    <description>    &lt;p&gt;Il vous est probablement déjà arrivé, sous &lt;acronym title=&quot;GNU is Not UNIX&quot;&gt;GNU&lt;/acronym&gt;/Linux, d'avoir besoin de lancer un de vos programmes ayant une interface graphique, comme Firefox, ou un programme louche que vous venez de télécharger, avec un autre utilisateur, sous votre session X actuelle, sans pour autant en ouvrir une autre.&lt;/p&gt;
&lt;p&gt;Il y a plusieurs façons de faire cela. Par exemple se connecter avec ssh en localhost, avec l'option -X ou -Y, ou utiliser xhost. Le souci, c'est que le premier est un peu lent (par exemple, pour lancer un jeu vidéo). Quand au deuxième, il n'est pas terrible du côté de la sécurité (ah les souvenirs... Polluer les displays des autres &lt;img src=&quot;http://achraf.cherti.name/blog/wp-includes/images/smilies/icon_razz.gif&quot; alt=&quot;:-P&quot; class=&quot;wp-smiley&quot; /&gt; ).&lt;/p&gt;
&lt;p&gt;Une des solutions les plus intéressantes est d'exporter votre clé avec xauth, pour l'importer ensuite dans l'utilisateur qui vous intéresse ! Comme il faut entrer deux ou trois commandes pour faire cela manuellement, j'ai développé le programme &lt;em&gt;sendxauth.py&lt;/em&gt;, permettant d'automatiser cela grâce à cette commande simple à mémoriser.&lt;/p&gt;
&lt;h2&gt;Un petit exemple pour clarifier les choses&lt;/h2&gt;
&lt;p&gt;Si mon explication n'a pas été claire, laisser moi vous donner un petit exemple.&lt;/p&gt;
&lt;p&gt;Supposons que vous avez un programme louche sous la main, que vous devez tester à tout prix. Comme il risque de faire ce qu'il veut dans le répertoire de votre utilisateur principal, par exemple vous voler vos informations confidentielles (les fichiers de configuration de votre navigateur web, qui contiennent peut-être vos mots de passes, ou vos courriels personnels ou confidentiels archivés), il peut-être intéressant de lancer ce programme avec un utilisateur limité. Donc, au lieu de le lancer avec votre utilisateur principal, vous allez utiliser l'utilisateur hyper limité « cobaye », qui n'a le droit de rien faire dans votre système, à part toucher à ses fichiers.&lt;/p&gt;
&lt;p&gt;Le souci c'est que, si vous vous loguez dans votre utilisateur hyper limité :&lt;/p&gt;
&lt;div&gt;&lt;span&gt;su&lt;/span&gt; -l cobaye&lt;/div&gt;
&lt;p&gt;Et que vous lancez un programme graphique comme xterm (toujours en tant que « cobaye ») :&lt;/p&gt;
&lt;div&gt;xterm&lt;/div&gt;
&lt;p&gt;Vous aurez l'erreur :&lt;/p&gt;
&lt;div&gt;xterm Xt error: Can't open display:&lt;br /&gt;
xterm: &amp;nbsp;DISPLAY is not set&lt;/div&gt;
&lt;p&gt;C'est un peu normal car l'utilisateur n'a le droit de rien faire dans votre display (sécurité).&lt;/p&gt;
&lt;p&gt;Pour lui donner ce droit, vous devez utiliser sendxauth.py (le script de ce tutoriel, voir plus bas) qui va s'occuper de tout faire à note place :&lt;/p&gt;
&lt;div&gt;sendxauth.py cobaye&lt;/div&gt;
&lt;p&gt;Une fois que vous vous reloguerez sur « cobaye » :&lt;/p&gt;
&lt;div&gt;&lt;span&gt;su&lt;/span&gt; -l cobaye&lt;/div&gt;
&lt;p&gt;Et que vous aurez déclaré les deux variables recommandées par sendxauth.py :&lt;/p&gt;
&lt;div&gt;&lt;span&gt;export&lt;/span&gt; &lt;span&gt;DISPLAY=&lt;/span&gt;&lt;span&gt;&quot;:0.0&quot;&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;export&lt;/span&gt; &lt;span&gt;XAUTHORITY=&lt;/span&gt;&lt;span&gt;&quot;/home/cobaye/.Xauthority&quot;&lt;/span&gt;&lt;/div&gt;
&lt;p&gt;xterm se lancera sans aucun souci, en tant que « cobaye » !&lt;/p&gt;
&lt;h2&gt;Télécharger le script&lt;/h2&gt;
&lt;p&gt;Vous pouvez &lt;a title=&quot;sendxauth.py : envoyer votre clé xauth à un autre utilisateur&quot; href=&quot;http://achraf.cherti.name/blog/files/mes_programmes/sendxauth.py&quot;&gt;télécharger le script sendxauth.py&lt;/a&gt; ou le copier coller depuis :&lt;/p&gt;
&lt;div&gt;&lt;span&gt;#!/usr/bin/env python&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;# -*- coding: utf-8 -*-&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;#&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;# Copyright (c) 2008, Achraf cherti (aka Asher256)&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;#&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;# Contact : achraf at cherti dot name&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;# Website : http://achraf.cherti.name/&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;#&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;# This program is free software; you can redistribute it and/or modify&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;# it under the terms of the &lt;acronym title=&quot;GNU is Not UNIX&quot;&gt;GNU&lt;/acronym&gt; General Public License as published by&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;# the Free Software Foundation; either version 2 of the License, or&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;# (at your option) any later version.&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;#&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;# This program is distributed in the hope that it will be useful,&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;# but WITHOUT ANY WARRANTY; without even the implied warranty of&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. &amp;nbsp;See the&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;# &lt;acronym title=&quot;GNU is Not UNIX&quot;&gt;GNU&lt;/acronym&gt; General Public License for more details.&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;#&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;# You should have received a copy of the &lt;acronym title=&quot;GNU is Not UNIX&quot;&gt;GNU&lt;/acronym&gt; General Public License&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;# along with This program; if not, write to the Free Software&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA &amp;nbsp;02110-1301 &amp;nbsp;USA&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;#&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;span&gt;&quot;Send xauth key to different users.&quot;&lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;import&lt;/span&gt; &lt;span&gt;sys&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;import&lt;/span&gt; &lt;span&gt;os&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;import&lt;/span&gt; &lt;span&gt;re&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;import&lt;/span&gt; &lt;span&gt;pwd&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;from&lt;/span&gt; &lt;span&gt;getopt&lt;/span&gt; &lt;span&gt;import&lt;/span&gt; gnu_getopt, GetoptError&lt;/p&gt;
&lt;p&gt;VERSION = &lt;span&gt;'0.1'&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;SOURCE_USER = &lt;span&gt;''&lt;/span&gt;&lt;br /&gt;
DESTINATION_USER = &lt;span&gt;''&lt;/span&gt;&lt;br /&gt;
DISPLAY = &lt;span&gt;':0.0'&lt;/span&gt;&lt;br /&gt;
VERBOSE = &lt;span&gt;False&lt;/span&gt;&lt;br /&gt;
DEV_NULL = &lt;span&gt;' &amp;gt;/dev/null 2&amp;gt;&amp;amp;1'&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;def&lt;/span&gt; vprint&lt;span&gt;&amp;#40;&lt;/span&gt;&lt;span&gt;string&lt;/span&gt;&lt;span&gt;&amp;#41;&lt;/span&gt;:&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;span&gt;&quot;Print 'string' if --verbose is defined.&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &quot;&lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span&gt;if&lt;/span&gt; VERBOSE != &lt;span&gt;False&lt;/span&gt;:&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span&gt;print&lt;/span&gt; &lt;span&gt;string&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;def&lt;/span&gt; check_environment&lt;span&gt;&amp;#40;&lt;/span&gt;&lt;span&gt;&amp;#41;&lt;/span&gt;:&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;span&gt;&quot;Check if all required environment variables are available.&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &quot;&lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; display = &lt;span&gt;os&lt;/span&gt;.&lt;span&gt;getenv&lt;/span&gt;&lt;span&gt;&amp;#40;&lt;/span&gt;&lt;span&gt;'DISPLAY'&lt;/span&gt;&lt;span&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span&gt;if&lt;/span&gt; display == &lt;span&gt;None&lt;/span&gt;:&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span&gt;print&lt;/span&gt; &lt;span&gt;'DISPLAY environment variable is not declared.'&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span&gt;sys&lt;/span&gt;.&lt;span&gt;exit&lt;/span&gt;&lt;span&gt;&amp;#40;&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span&gt;else&lt;/span&gt;:&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span&gt;globals&lt;/span&gt;&lt;span&gt;&amp;#40;&lt;/span&gt;&lt;span&gt;&amp;#41;&lt;/span&gt;&lt;span&gt;&amp;#91;&lt;/span&gt;&lt;span&gt;&quot;DISPLAY&quot;&lt;/span&gt;&lt;span&gt;&amp;#93;&lt;/span&gt; = display &lt;/p&gt;
&lt;p&gt;&lt;span&gt;def&lt;/span&gt; user_exists&lt;span&gt;&amp;#40;&lt;/span&gt;&lt;span&gt;user&lt;/span&gt;&lt;span&gt;&amp;#41;&lt;/span&gt;:&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;span&gt;&quot;Return True if the user exists.&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &quot;&lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span&gt;try&lt;/span&gt;:&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span&gt;pwd&lt;/span&gt;.&lt;span&gt;getpwnam&lt;/span&gt;&lt;span&gt;&amp;#40;&lt;/span&gt;&lt;span&gt;user&lt;/span&gt;&lt;span&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span&gt;except&lt;/span&gt; &lt;span&gt;KeyError&lt;/span&gt;:&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span&gt;return&lt;/span&gt; &lt;span&gt;False&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span&gt;else&lt;/span&gt;:&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span&gt;return&lt;/span&gt; &lt;span&gt;True&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;def&lt;/span&gt; handle_arguments&lt;span&gt;&amp;#40;&lt;/span&gt;&lt;span&gt;&amp;#41;&lt;/span&gt;:&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;span&gt;&quot;Handle options in the arguments (argv).&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &quot;&lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span&gt;try&lt;/span&gt;:&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; args = &lt;span&gt;sys&lt;/span&gt;.&lt;span&gt;argv&lt;/span&gt;&lt;span&gt;&amp;#91;&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;:&lt;span&gt;&amp;#93;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; optlist = gnu_getopt&lt;span&gt;&amp;#40;&lt;/span&gt;args, &lt;span&gt;'vh'&lt;/span&gt;, &lt;span&gt;&amp;#91;&lt;/span&gt;&lt;span&gt;'help'&lt;/span&gt;, &lt;span&gt;'verbose'&lt;/span&gt;&lt;span&gt;&amp;#93;&lt;/span&gt;&lt;span&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span&gt;except&lt;/span&gt; GetoptError:&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span&gt;print&lt;/span&gt; &lt;span&gt;'Error when parsing arguments.'&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span&gt;print&lt;/span&gt; &lt;span&gt;&quot;--help for more informations.&quot;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span&gt;sys&lt;/span&gt;.&lt;span&gt;exit&lt;/span&gt;&lt;span&gt;&amp;#40;&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;&amp;#41;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &lt;span&gt;if&lt;/span&gt; &lt;span&gt;len&lt;/span&gt;&lt;span&gt;&amp;#40;&lt;/span&gt;&lt;span&gt;sys&lt;/span&gt;.&lt;span&gt;argv&lt;/span&gt;&lt;span&gt;&amp;#41;&lt;/span&gt; &amp;lt; &lt;span&gt;2&lt;/span&gt;:&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span&gt;print&lt;/span&gt; &lt;span&gt;'What&lt;span&gt;\'&lt;/span&gt;s the destination user ?'&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span&gt;print&lt;/span&gt; &lt;span&gt;&quot;--help for more informations.&quot;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span&gt;sys&lt;/span&gt;.&lt;span&gt;exit&lt;/span&gt;&lt;span&gt;&amp;#40;&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;&amp;#41;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &lt;span&gt;for&lt;/span&gt; &lt;span&gt;user&lt;/span&gt; &lt;span&gt;in&lt;/span&gt; optlist&lt;span&gt;&amp;#91;&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;&amp;#93;&lt;/span&gt;:&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span&gt;if&lt;/span&gt; &lt;span&gt;not&lt;/span&gt; user_exists&lt;span&gt;&amp;#40;&lt;/span&gt;&lt;span&gt;user&lt;/span&gt;&lt;span&gt;&amp;#41;&lt;/span&gt;:&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span&gt;print&lt;/span&gt; &lt;span&gt;&quot;The user '%s' doesn't exists.&quot;&lt;/span&gt; % &lt;span&gt;user&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span&gt;sys&lt;/span&gt;.&lt;span&gt;exit&lt;/span&gt;&lt;span&gt;&amp;#40;&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span&gt;else&lt;/span&gt;:&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span&gt;globals&lt;/span&gt;&lt;span&gt;&amp;#40;&lt;/span&gt;&lt;span&gt;&amp;#41;&lt;/span&gt;&lt;span&gt;&amp;#91;&lt;/span&gt;&lt;span&gt;&quot;DESTINATION_USER&quot;&lt;/span&gt;&lt;span&gt;&amp;#93;&lt;/span&gt; = &lt;span&gt;user&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span&gt;break&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &lt;span&gt;for&lt;/span&gt; option, value &lt;span&gt;in&lt;/span&gt; optlist&lt;span&gt;&amp;#91;&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;&amp;#93;&lt;/span&gt;:&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span&gt;if&lt;/span&gt; option &lt;span&gt;in&lt;/span&gt; &lt;span&gt;&amp;#91;&lt;/span&gt;&lt;span&gt;'-v'&lt;/span&gt;, &lt;span&gt;'--verbose'&lt;/span&gt;&lt;span&gt;&amp;#93;&lt;/span&gt;:&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span&gt;globals&lt;/span&gt;&lt;span&gt;&amp;#40;&lt;/span&gt;&lt;span&gt;&amp;#41;&lt;/span&gt;&lt;span&gt;&amp;#91;&lt;/span&gt;&lt;span&gt;'VERBOSE'&lt;/span&gt;&lt;span&gt;&amp;#93;&lt;/span&gt; = &lt;span&gt;True&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span&gt;globals&lt;/span&gt;&lt;span&gt;&amp;#40;&lt;/span&gt;&lt;span&gt;&amp;#41;&lt;/span&gt;&lt;span&gt;&amp;#91;&lt;/span&gt;&lt;span&gt;'DEV_NULL'&lt;/span&gt;&lt;span&gt;&amp;#93;&lt;/span&gt; = &lt;span&gt;''&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span&gt;elif&lt;/span&gt; option &lt;span&gt;in&lt;/span&gt; &lt;span&gt;&amp;#91;&lt;/span&gt;&lt;span&gt;'-h'&lt;/span&gt;, &lt;span&gt;'--help'&lt;/span&gt;&lt;span&gt;&amp;#93;&lt;/span&gt;:&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span&gt;print&lt;/span&gt; __doc__&lt;span&gt;&amp;#91;&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;:&lt;span&gt;-2&lt;/span&gt;&lt;span&gt;&amp;#93;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span&gt;print&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span&gt;print&lt;/span&gt; &lt;span&gt;'Usage: %s [OPTIONS] destination_user '&lt;/span&gt; \&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; % &lt;span&gt;os&lt;/span&gt;.&lt;span&gt;path&lt;/span&gt;.&lt;span&gt;basename&lt;/span&gt;&lt;span&gt;&amp;#40;&lt;/span&gt;&lt;span&gt;sys&lt;/span&gt;.&lt;span&gt;argv&lt;/span&gt;&lt;span&gt;&amp;#91;&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;&amp;#93;&lt;/span&gt;&lt;span&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span&gt;print&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span&gt;print&lt;/span&gt; &lt;span&gt;&quot;OPTIONS :&quot;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span&gt;print&lt;/span&gt; &lt;span&gt;&quot; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;-h, --help &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Show this help&quot;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span&gt;print&lt;/span&gt; &lt;span&gt;&quot; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;-v, --verbose &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Verbose mode&quot;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span&gt;print&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span&gt;sys&lt;/span&gt;.&lt;span&gt;exit&lt;/span&gt;&lt;span&gt;&amp;#40;&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;&amp;#41;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;def&lt;/span&gt; commands_required&lt;span&gt;&amp;#40;&lt;/span&gt;*cmd_list&lt;span&gt;&amp;#41;&lt;/span&gt;:&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;span&gt;&quot;This function tests if all programs in&lt;br /&gt;
&amp;nbsp; &amp;nbsp; the arguments are available in the environment&lt;br /&gt;
&amp;nbsp; &amp;nbsp; variable 'PATH'.&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &quot;&lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; path = &lt;span&gt;os&lt;/span&gt;.&lt;span&gt;getenv&lt;/span&gt;&lt;span&gt;&amp;#40;&lt;/span&gt;&lt;span&gt;'PATH'&lt;/span&gt;&lt;span&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span&gt;if&lt;/span&gt; path != &lt;span&gt;None&lt;/span&gt;:&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; path_list = path.&lt;span&gt;split&lt;/span&gt;&lt;span&gt;&amp;#40;&lt;/span&gt;&lt;span&gt;os&lt;/span&gt;.&lt;span&gt;pathsep&lt;/span&gt;&lt;span&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span&gt;else&lt;/span&gt;:&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span&gt;print&lt;/span&gt; &lt;span&gt;&quot;The environment variable PATH is not defined.&quot;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span&gt;sys&lt;/span&gt;.&lt;span&gt;exit&lt;/span&gt;&lt;span&gt;&amp;#40;&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;&amp;#41;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &lt;span&gt;for&lt;/span&gt; command &lt;span&gt;in&lt;/span&gt; cmd_list:&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; error = &lt;span&gt;True&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span&gt;for&lt;/span&gt; path &lt;span&gt;in&lt;/span&gt; path_list:&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; command_path = &lt;span&gt;os&lt;/span&gt;.&lt;span&gt;path&lt;/span&gt;.&lt;span&gt;join&lt;/span&gt;&lt;span&gt;&amp;#40;&lt;/span&gt;path, command&lt;span&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span&gt;if&lt;/span&gt; &lt;span&gt;os&lt;/span&gt;.&lt;span&gt;access&lt;/span&gt;&lt;span&gt;&amp;#40;&lt;/span&gt;command_path, &lt;span&gt;os&lt;/span&gt;.&lt;span&gt;X_OK&lt;/span&gt;&lt;span&gt;&amp;#41;&lt;/span&gt;:&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; error = &lt;span&gt;False&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span&gt;break&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span&gt;if&lt;/span&gt; error:&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span&gt;print&lt;/span&gt; &lt;span&gt;'The command &lt;span&gt;\'&lt;/span&gt;%s&lt;span&gt;\'&lt;/span&gt; is not found.'&lt;/span&gt; % command&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span&gt;sys&lt;/span&gt;.&lt;span&gt;exit&lt;/span&gt;&lt;span&gt;&amp;#40;&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;&amp;#41;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;def&lt;/span&gt; su_command_generator&lt;span&gt;&amp;#40;&lt;/span&gt;command, &lt;span&gt;user&lt;/span&gt;=&lt;span&gt;''&lt;/span&gt;&lt;span&gt;&amp;#41;&lt;/span&gt;:&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;span&gt;&quot;Convert a command to : su -c 'command' user and return that.&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &quot;&lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; command = &lt;span&gt;re&lt;/span&gt;.&lt;span&gt;sub&lt;/span&gt;&lt;span&gt;&amp;#40;&lt;/span&gt;r&lt;span&gt;&quot;(['&lt;span&gt;\\&lt;/span&gt;])&quot;&lt;/span&gt;, r&lt;span&gt;&quot;&lt;span&gt;\\&lt;/span&gt;&lt;span&gt;\1&lt;/span&gt;&quot;&lt;/span&gt;, command&lt;span&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; command = &lt;span&gt;'su -c &lt;span&gt;\'&lt;/span&gt;'&lt;/span&gt; + command + &lt;span&gt;'&lt;span&gt;\'&lt;/span&gt;'&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span&gt;if&lt;/span&gt; &lt;span&gt;user&lt;/span&gt; != &lt;span&gt;''&lt;/span&gt;:&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; command += &lt;span&gt;' '&lt;/span&gt; + &lt;span&gt;user&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span&gt;return&lt;/span&gt; command&lt;/p&gt;
&lt;p&gt;&lt;span&gt;def&lt;/span&gt; send_xauth&lt;span&gt;&amp;#40;&lt;/span&gt;destination_user, source_user=&lt;span&gt;''&lt;/span&gt;&lt;span&gt;&amp;#41;&lt;/span&gt;:&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;span&gt;&quot;Send the authentication to the destination user&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; If source_user is '', the source user is the actual user (automatically&lt;br /&gt;
&amp;nbsp; &amp;nbsp; detected).&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &quot;&lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span&gt;if&lt;/span&gt; source_user != &lt;span&gt;''&lt;/span&gt;:&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span&gt;sys&lt;/span&gt;.&lt;span&gt;stdout&lt;/span&gt;.&lt;span&gt;write&lt;/span&gt;&lt;span&gt;&amp;#40;&lt;/span&gt;source_user + &lt;span&gt;'&lt;span&gt;\'&lt;/span&gt;s '&lt;/span&gt;&lt;span&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span&gt;print&lt;/span&gt; &lt;span&gt;'xauth key will be sent to'&lt;/span&gt;, destination_user + &lt;span&gt;'...'&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span&gt;print&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; auth_tmpfile = &lt;span&gt;'/tmp/sendxauth'&lt;/span&gt; + &lt;span&gt;str&lt;/span&gt;&lt;span&gt;&amp;#40;&lt;/span&gt;&lt;span&gt;os&lt;/span&gt;.&lt;span&gt;getpid&lt;/span&gt;&lt;span&gt;&amp;#40;&lt;/span&gt;&lt;span&gt;&amp;#41;&lt;/span&gt;&lt;span&gt;&amp;#41;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &lt;span&gt;try&lt;/span&gt;:&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span&gt;# extract&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; command = &lt;span&gt;'xauth extract '&lt;/span&gt; + auth_tmpfile + &lt;span&gt;' '&lt;/span&gt; + DISPLAY&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span&gt;if&lt;/span&gt; source_user != &lt;span&gt;''&lt;/span&gt;:&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span&gt;sys&lt;/span&gt;.&lt;span&gt;stdout&lt;/span&gt;.&lt;span&gt;write&lt;/span&gt;&lt;span&gt;&amp;#40;&lt;/span&gt;&lt;span&gt;'You must enter '&lt;/span&gt; + source_user + &lt;span&gt;' password : '&lt;/span&gt;&lt;span&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; command = su_command_generator&lt;span&gt;&amp;#40;&lt;/span&gt;command&lt;span&gt;&amp;#41;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; vprint&lt;span&gt;&amp;#40;&lt;/span&gt;command&lt;span&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; result = &lt;span&gt;os&lt;/span&gt;.&lt;span&gt;system&lt;/span&gt;&lt;span&gt;&amp;#40;&lt;/span&gt;command + DEV_NULL&lt;span&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span&gt;if&lt;/span&gt; source_user != &lt;span&gt;''&lt;/span&gt;:&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span&gt;print&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span&gt;if&lt;/span&gt; result != &lt;span&gt;0&lt;/span&gt;:&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span&gt;print&lt;/span&gt; &lt;span&gt;'Errors when extracting xauth key.'&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span&gt;sys&lt;/span&gt;.&lt;span&gt;exit&lt;/span&gt;&lt;span&gt;&amp;#40;&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;&amp;#41;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span&gt;# chmod auth key&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span&gt;os&lt;/span&gt;.&lt;span&gt;chmod&lt;/span&gt;&lt;span&gt;&amp;#40;&lt;/span&gt;auth_tmpfile, &lt;span&gt;0777&lt;/span&gt;&lt;span&gt;&amp;#41;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span&gt;# merge&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span&gt;sys&lt;/span&gt;.&lt;span&gt;stderr&lt;/span&gt;.&lt;span&gt;write&lt;/span&gt;&lt;span&gt;&amp;#40;&lt;/span&gt;&lt;span&gt;'You must enter '&lt;/span&gt; + destination_user + &lt;span&gt;' password : '&lt;/span&gt;&lt;span&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; destination_home = &lt;span&gt;pwd&lt;/span&gt;.&lt;span&gt;getpwnam&lt;/span&gt;&lt;span&gt;&amp;#40;&lt;/span&gt;destination_user&lt;span&gt;&amp;#41;&lt;/span&gt;&lt;span&gt;&amp;#91;&lt;/span&gt;&lt;span&gt;5&lt;/span&gt;&lt;span&gt;&amp;#93;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; authfile = &lt;span&gt;os&lt;/span&gt;.&lt;span&gt;path&lt;/span&gt;.&lt;span&gt;join&lt;/span&gt;&lt;span&gt;&amp;#40;&lt;/span&gt;destination_home, &lt;span&gt;'.Xauthority'&lt;/span&gt;&lt;span&gt;&amp;#41;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span&gt;# masquer les ' et \ dans authfile&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; command = su_command_generator&lt;span&gt;&amp;#40;&lt;/span&gt;&lt;span&gt;'xauth merge '&lt;/span&gt; + auth_tmpfile,&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;destination_user&lt;span&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; command = &lt;span&gt;'XAUTHORITY=&lt;span&gt;\'&lt;/span&gt;'&lt;/span&gt; + authfile + &lt;span&gt;'&lt;span&gt;\'&lt;/span&gt; '&lt;/span&gt; &amp;nbsp;+ command&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; vprint&lt;span&gt;&amp;#40;&lt;/span&gt;command&lt;span&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; result = &lt;span&gt;os&lt;/span&gt;.&lt;span&gt;system&lt;/span&gt;&lt;span&gt;&amp;#40;&lt;/span&gt;command + DEV_NULL&lt;span&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span&gt;if&lt;/span&gt; DEV_NULL != &lt;span&gt;''&lt;/span&gt;:&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span&gt;print&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span&gt;if&lt;/span&gt; result != &lt;span&gt;0&lt;/span&gt;:&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span&gt;print&lt;/span&gt; &lt;span&gt;'Error when merging xauth key by '&lt;/span&gt; + destination_user + &lt;span&gt;'.'&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span&gt;sys&lt;/span&gt;.&lt;span&gt;exit&lt;/span&gt;&lt;span&gt;&amp;#40;&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span&gt;else&lt;/span&gt;:&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span&gt;print&lt;/span&gt; &lt;span&gt;&quot;xauthority is sent to %s !&quot;&lt;/span&gt; % destination_user&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span&gt;print&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span&gt;print&lt;/span&gt; &lt;span&gt;&quot;You maybe must declare these shell variables before &quot;&lt;/span&gt; + \&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span&gt;&quot;running a graphical program :&quot;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span&gt;print&lt;/span&gt; &lt;span&gt;&quot;export DISPLAY=&lt;span&gt;\&quot;&lt;/span&gt;%s&lt;span&gt;\&quot;&lt;/span&gt;&quot;&lt;/span&gt; % DISPLAY&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span&gt;print&lt;/span&gt; &lt;span&gt;&quot;export XAUTHORITY=&lt;span&gt;\&quot;&lt;/span&gt;%s/.Xauthority&lt;span&gt;\&quot;&lt;/span&gt;&quot;&lt;/span&gt; % \&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span&gt;pwd&lt;/span&gt;.&lt;span&gt;getpwnam&lt;/span&gt;&lt;span&gt;&amp;#40;&lt;/span&gt;destination_user&lt;span&gt;&amp;#41;&lt;/span&gt;&lt;span&gt;&amp;#91;&lt;/span&gt;&lt;span&gt;5&lt;/span&gt;&lt;span&gt;&amp;#93;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span&gt;finally&lt;/span&gt;:&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span&gt;try&lt;/span&gt;:&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span&gt;os&lt;/span&gt;.&lt;span&gt;remove&lt;/span&gt;&lt;span&gt;&amp;#40;&lt;/span&gt;auth_tmpfile&lt;span&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span&gt;except&lt;/span&gt; &lt;span&gt;OSError&lt;/span&gt;:&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span&gt;print&lt;/span&gt; &lt;span&gt;'Warning: Cannot remove '&lt;/span&gt; + auth_tmpfile + &lt;span&gt;'...'&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span&gt;else&lt;/span&gt;:&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; vprint&lt;span&gt;&amp;#40;&lt;/span&gt;&lt;span&gt;'Notice: '&lt;/span&gt; + auth_tmpfile + &lt;span&gt;' deleted ;)'&lt;/span&gt;&lt;span&gt;&amp;#41;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;if&lt;/span&gt; __name__ == &lt;span&gt;'__main__'&lt;/span&gt;:&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span&gt;try&lt;/span&gt;:&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; commands_required&lt;span&gt;&amp;#40;&lt;/span&gt;&lt;span&gt;'xauth'&lt;/span&gt;, &lt;span&gt;'su'&lt;/span&gt;&lt;span&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; check_environment&lt;span&gt;&amp;#40;&lt;/span&gt;&lt;span&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; handle_arguments&lt;span&gt;&amp;#40;&lt;/span&gt;&lt;span&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; send_xauth&lt;span&gt;&amp;#40;&lt;/span&gt;DESTINATION_USER, SOURCE_USER&lt;span&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span&gt;except&lt;/span&gt; &lt;span&gt;KeyboardInterrupt&lt;/span&gt;:&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span&gt;print&lt;/span&gt; &lt;span&gt;&quot;Interrupted.&quot;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;# vim:ai:et:sw=4:ts=4:sts=4:tw=78:fenc=utf-8&lt;/span&gt;&lt;/div&gt;</description>
    
    
    
      </item>
    
  <item>
    <title>Redémarrer le routeur Sagem Fast 3304 de Maroc Telecom sous GNU/Linux, avec un script shell</title>
    <link>http://achraf.cherti.name/blog/2008/08/30/redemarrer-le-routeur-sagem-fast-3304-de-maroc-telecom-sous-gnulinux-avec-un-script-shell/</link>
    <guid isPermaLink="false">urn:md5:bd2d56c6f858951afd6d91e111319c9d</guid>
    <pubDate>Sat, 30 Aug 2008 23:47:32 +0200</pubDate>
    <dc:creator>Asher256</dc:creator>
        <category>PUF</category>
        <category>Accueil</category><category>Linux</category><category>Maroc</category><category>Maroc-telecom</category><category>Planet-libre</category><category>Planet-ubuntu</category><category>Programmation</category><category>Script</category><category>Shell</category><category>Tutoriel</category><category>Tutoriels</category>    
    <description>    &lt;p&gt;&lt;img class=&quot;aligncenter&quot; title=&quot;Routeur Sagem Fast 3304 de Maroc Telecom&quot; src=&quot;http://achraf.cherti.name/blog/images/sagem_fast_3304_routeur_maroc_telecom.jpg&quot; alt=&quot;Wifi Sagem F@st Multiservices 3304&quot; width=&quot;257&quot; height=&quot;146&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Si vous vous connectez à votre &lt;strong&gt;ADSL&lt;/strong&gt; &lt;strong&gt;Menara&lt;/strong&gt; de &lt;strong&gt;Maroc Telecom&lt;/strong&gt;, avec un modem routeur wifi &lt;strong&gt;Sagem F@st 3304&lt;/strong&gt;, et qu'il vous arrive d'avoir besoin de &lt;strong&gt;redémarrer&lt;/strong&gt; votre &lt;strong&gt;routeur&lt;/strong&gt; automatiquement, grâce à un cron + script shell, pour une des diverses raisons valables (par exemple, une connexion super lente, mystérieusement constatée après plusieurs heures de connexion suivies), le petit script de cet article risque de vous intéresser.&lt;/p&gt;
&lt;p&gt;Pour les curieux, pour faire ce script, j'ai extrait du code &lt;acronym title=&quot;HyperText Markup Language&quot;&gt;HTML&lt;/acronym&gt; de l'interface web du &lt;strong&gt;Sagem Fast 3304&lt;/strong&gt; l'&lt;acronym title=&quot;Uniform Resource Locator&quot;&gt;URL&lt;/acronym&gt; qui est activée quand vous cliquez sur le bouton « redémarrage de votre routeur » dans la section « Maintenance ».&lt;/p&gt;
&lt;p&gt;Pour faire marcher le script, vous aurez besoin d'installer &lt;em&gt;curl&lt;/em&gt;. Dans une distribution comme Debian ou Ubuntu :&lt;/p&gt;
&lt;div&gt;&lt;span&gt;sudo&lt;/span&gt; apt-get &lt;span&gt;install&lt;/span&gt; curl&lt;/div&gt;
&lt;p&gt;C'est à peu près similaire dans les autres distributions.&lt;/p&gt;
&lt;p&gt;N'oubliez pas de modifier les variables USER, PASSWORD et &lt;acronym title=&quot;Internet Protocol&quot;&gt;IP&lt;/acronym&gt; pour le personnaliser !&lt;/p&gt;
&lt;div&gt;&lt;span&gt;#!/bin/sh&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;#&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;# Redémarrage &lt;span&gt;du&lt;/span&gt; routeur de Maroc Telecom &lt;span&gt;&amp;#40;&lt;/span&gt;personnalisez le script&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;# en modifiant les variables ci-dessous.&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;#&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;# Auteur : &amp;nbsp;Achraf cherti&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;# &lt;acronym title=&quot;Uniform Resource Locator&quot;&gt;URL&lt;/acronym&gt; : http://achraf.cherti.name/&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;# Licence : &lt;acronym title=&quot;GNU General Public License&quot;&gt;GPL&lt;/acronym&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;#&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;# Variables à modifier pour faire fonctionner votre script&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;&lt;acronym title=&quot;Internet Protocol&quot;&gt;IP&lt;/acronym&gt;=&lt;/span&gt;&lt;span&gt;&quot;192.168.1.1&quot;&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;USER=&lt;/span&gt;&lt;span&gt;&quot;Menara&quot;&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;PASSWORD=&lt;/span&gt;&lt;span&gt;&quot;Menara&quot;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;# Début &lt;span&gt;du&lt;/span&gt; script&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;if&lt;/span&gt; ! &lt;span&gt;which&lt;/span&gt; curl &amp;gt;/dev/null &lt;span&gt;2&lt;/span&gt;&amp;gt;&amp;amp;&lt;span&gt;1&lt;/span&gt;; &lt;span&gt;then&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span&gt;echo&lt;/span&gt; &lt;span&gt;&quot;Vous devez installer curl !&quot;&lt;/span&gt; &amp;gt;&amp;amp;&lt;span&gt;2&lt;/span&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;span&gt;exit&lt;/span&gt; &lt;span&gt;1&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;fi&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;tput setaf &lt;span&gt;1&lt;/span&gt;; &lt;span&gt;echo&lt;/span&gt; &lt;span&gt;&quot;Redémarrage du routeur...&quot;&lt;/span&gt;; tput sgr0&lt;br /&gt;
curl -u &lt;span&gt;$USER&lt;/span&gt;:&lt;span&gt;$PASSWORD&lt;/span&gt; http://&lt;span&gt;$&lt;acronym title=&quot;Internet Protocol&quot;&gt;IP&lt;/acronym&gt;&lt;/span&gt;/SubmitMaintREBOOT -d &lt;span&gt;''&lt;/span&gt; &amp;gt;/dev/null &lt;span&gt;2&lt;/span&gt;&amp;gt;&amp;amp;&lt;span&gt;1&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;if&lt;/span&gt; &lt;span&gt;&amp;#91;&lt;/span&gt; &lt;span&gt;&quot;$?&quot;&lt;/span&gt; -ne &lt;span&gt;&quot;0&quot;&lt;/span&gt; &lt;span&gt;&amp;#93;&lt;/span&gt;; &lt;span&gt;then&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span&gt;echo&lt;/span&gt; &lt;span&gt;&quot;Erreur lors de la communication avec le routeur.&quot;&lt;/span&gt; &amp;gt;&amp;amp;&lt;span&gt;2&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span&gt;exit&lt;/span&gt; &lt;span&gt;1&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;fi&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;sleep&lt;/span&gt; &lt;span&gt;3&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;tput setaf &lt;span&gt;1&lt;/span&gt;; &lt;span&gt;echo&lt;/span&gt; &lt;span&gt;&quot;Attente de connexion...&quot;&lt;/span&gt;; tput sgr0&lt;br /&gt;
&lt;span&gt;i=&lt;/span&gt;&lt;span&gt;&quot;0&quot;&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;while&lt;/span&gt; &lt;span&gt;true&lt;/span&gt;; &lt;span&gt;do&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span&gt;ping&lt;/span&gt; -c1 &lt;span&gt;212.217&lt;/span&gt;&lt;span&gt;.0&lt;/span&gt;&lt;span&gt;.1&lt;/span&gt; &amp;gt;/dev/null &lt;span&gt;2&lt;/span&gt;&amp;gt;&amp;amp;&lt;span&gt;1&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span&gt;if&lt;/span&gt; &lt;span&gt;&amp;#91;&lt;/span&gt; &lt;span&gt;&quot;$?&quot;&lt;/span&gt; -eq &lt;span&gt;&quot;0&quot;&lt;/span&gt; &lt;span&gt;&amp;#93;&lt;/span&gt;; &lt;span&gt;then&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span&gt;break&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span&gt;fi&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &lt;span&gt;i=&lt;/span&gt;&lt;span&gt;&quot;`expr $i + 1`&quot;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span&gt;if&lt;/span&gt; &lt;span&gt;&amp;#91;&lt;/span&gt; &lt;span&gt;&quot;$i&quot;&lt;/span&gt; -gt &lt;span&gt;&quot;60&quot;&lt;/span&gt; &lt;span&gt;&amp;#93;&lt;/span&gt;; &lt;span&gt;then&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span&gt;echo&lt;/span&gt; &lt;span&gt;&quot;Nombre de tentatives de connexion dépassées...&quot;&lt;/span&gt; &amp;gt;&amp;amp;&lt;span&gt;2&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span&gt;exit&lt;/span&gt; &lt;span&gt;1&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span&gt;fi&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &lt;span&gt;sleep&lt;/span&gt; &lt;span&gt;1&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;done&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;# Décommenter les deux lignes suivantes si vous utiliser ddclient&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;# pour mettre à jour automatiquement votre dyndns.org&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;#tput setaf &lt;span&gt;1&lt;/span&gt;; &lt;span&gt;echo&lt;/span&gt; &lt;/span&gt;&lt;span&gt;&quot;Mise à jour ddclient...&quot;&lt;/span&gt;; tput sgr0&lt;br /&gt;
&lt;span&gt;#ddclient&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;exit&lt;/span&gt; &lt;span&gt;0&lt;/span&gt;&lt;/div&gt;</description>
    
    
    
      </item>
    
  <item>
    <title>Sauvegarde cryptée sous Ubuntu</title>
    <link>http://feeds.feedburner.com/~r/Cedynamix-Ubuntu/~3/308066620/</link>
    <guid isPermaLink="false">urn:md5:8f028fac7479fa1a1a016174e24f1941</guid>
    <pubDate>Mon, 09 Jun 2008 14:38:52 +0200</pubDate>
    <dc:creator>Cedynamix</dc:creator>
        <category>PUF</category>
        <category>Accueil</category><category>Chiffrage</category><category>Gpg</category><category>Libre</category><category>Sauvegarde</category><category>Script</category><category>Tar</category><category>Ubuntu</category>    
    <description>    &lt;p&gt;Voici la traduction d&amp;#8217;&lt;a href=&quot;http://www.haumako.net/blog/backup-crittografati-su-linux&quot; target=&quot;_blank&quot;&gt;un très bon tuto en italien du Blog Haumako&lt;/a&gt; que j&amp;#8217;ai suivi pour faire ma procédure de sauvegarde.&lt;/p&gt;
&lt;p&gt;Ce constat n&amp;#8217;est pas nouveaux, mais une sauvegarde périodique de notre travail est essentielle pour prévenir une possible perte de données liée à une défaillance de de disque dur, un vol ou encore un effacement accidentel. De plus et dans la plupart des cas, les données que nous voulons sauvegarder contiennent des informations privées, des projets en cours de réalisation ou bien encore des documents confidentiels venant de notre société. Voilà donc pourquoi crypter ses sauvegardes, est quelque chose d&amp;#8217;important. Nous verrons dans cet article comment créer une procédure de sauvegarde simple et automatique sous &lt;strong&gt;Ubuntu&lt;/strong&gt; (&lt;span&gt;et Linux en général&lt;/span&gt;) avec les outils d&amp;#8217;archivage (&lt;strong&gt;tar) &lt;/strong&gt;et de cryptographie (&lt;strong&gt;gpg)&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Avant de procéder à la réalisation de ce script, il me paraît intéressant de présenter dans les grandes lignes le fonctionnement  et la manière dont on va utiliser &lt;strong&gt;tar&lt;/strong&gt; et &lt;strong&gt;gpg&lt;/strong&gt;. Pour ceux qui sont déjà des familiers de ces 2 outils, vous pouvez passer directement à la partie réalisation de la procédure de sauvegarde.&lt;/p&gt;
&lt;h2&gt;Tar&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;http://fr.wikipedia.org/wiki/Tar_(informatique)&quot; target=&quot;_blank&quot;&gt;Tar&lt;/a&gt; est un des premiers outils qu&amp;#8217;un utilisateur de système Linux apprend à connaître. Une de ses caractéristiques tient dans la possibilité d&amp;#8217;archiver de manière séquentielle les fichiers dans une archive unique. Nous utiliserons cet outil pour créer un fichier temporaire contenant tous les fichiers que l&amp;#8217;on souhaite sauvegarder, de façon à rendre le cryptage plus facile avec &lt;span&gt;gpg&lt;/span&gt;.&lt;/p&gt;
&lt;h2&gt;Gpg&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;http://fr.wikipedia.org/wiki/GNU_Privacy_Guard&quot; target=&quot;_blank&quot;&gt;Gpg&lt;/a&gt; est la version open-source du célèbre &lt;a href=&quot;http://fr.wikipedia.org/wiki/PGP&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;pgp&lt;/strong&gt;&lt;/a&gt;. Il permet une cryptographie asymétrique de données grâce à un couple de clés, une clé publique et une clé privée. Grâce à la clé publique il est possible de crypter des informations, sans mot de passe. Par contre, avec la clé privée et une fois entré le mot de passe, il est possible décrypter ces mêmes données.&lt;/p&gt;
&lt;p&gt;Cette caractéristique est employée par beaucoup de personnes pour sécuriser l&amp;#8217;échange d&amp;#8217;informations privées (courriel, messagerie instantanée, etc.). Pour que nos correspondants puissent nous envoyer des données cryptées, il nous suffit de leurs fournir notre clé publique (appelée clé esclave) qui sert uniquement à crypter les données. Une fois reçues les informations cryptées , nous utiliserons notre clé privée, qui, couplée avec le mot de passe, nous permettra d&amp;#8217;en décrypter le contenu.&lt;/p&gt;
&lt;p&gt;Nous utiliserons la clé publique &lt;strong&gt;gpg&lt;/strong&gt; pour crypter nos archives comme cela, nous ne serons pas obligés d&amp;#8217;insérer à chaque sauvegarde le mot de passe ou, pire encore, nous ne serons pas obligés de le mémoriser en clair  dans le script. Pour conclure, vu que rien ne sera demandé à chaque exécution du script, il pourra être exécuté en arrière plan et c&amp;#8217;est ce que je veux !&lt;/p&gt;
&lt;h1&gt;Création d&amp;#8217;une clés gpg&lt;/h1&gt;
&lt;p&gt;Pour ceux qui possède déjà un couple de clés ( je m&amp;#8217;adresse entre autre au Ubunteros possédant un compte &lt;a href=&quot;https://launchpad.net/&quot; target=&quot;_blank&quot;&gt;Launchpad&lt;/a&gt;), je vous conseille quand même d&amp;#8217;en créer une nouvelle de façon à la réserver uniquement pour la procédure de sauvegarde.&lt;/p&gt;
&lt;p&gt;Il existe divers moyens graphique pour la création d&amp;#8217;un couple de clés, mais j&amp;#8217;utiliserai la ligne de commande parce que c&amp;#8217;est la méthode la plus rapide.&lt;/p&gt;
&lt;p&gt;Nous ouvrons un terminal et exécutons la commande suivante :&lt;/p&gt;
&lt;p&gt;&lt;code&gt;gpg --gen-key&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;gpg&lt;/strong&gt; vous demandera les options pour la création de la clé, vous pouvez très bien laisser celles par défaut. Pour le mot de passe, je vous conseille d&amp;#8217;en créer un assez compliqué.&lt;/p&gt;
&lt;h1&gt;Réalisation du script&lt;/h1&gt;
&lt;p&gt;Voyons maintenant le script qui s&amp;#8217;occupera de créer le fichier de sauvegarde crypté dans le répertoire de notre choix. Mettez la commande suivante dans un fichier :&lt;/p&gt;
&lt;p&gt;&lt;code&gt;#! /bin/sh&lt;br /&gt;
tar -cf &lt;strong&gt;/emplacement/fichier/&lt;/strong&gt;backup.tar -X &lt;strong&gt;/emplacement/fichier/&lt;/strong&gt;exclude.txt &lt;strong&gt;/emplacement/asauvegarder&lt;/strong&gt;&lt;br /&gt;
gpg &amp;#8211;yes -e -r &amp;#8220;&lt;strong&gt;nom_clé&lt;/strong&gt;&amp;#8221; backup.tar&lt;/code&gt;&lt;/p&gt;
&lt;h2&gt;Explication&lt;/h2&gt;
&lt;p&gt;La première commande s&amp;#8217;occupe de créer l&amp;#8217;archive &lt;strong&gt;tar&lt;/strong&gt; contenant tous les fichiers que l&amp;#8217;on tient à sauvegarder. Le fichier &lt;strong&gt;exclude.txt &lt;/strong&gt;avec l’option &lt;strong&gt;-X&lt;/strong&gt; permet de ne pas inclure dans l&amp;#8217;archive tous les dossiers et fichiers qu&amp;#8217;il contient (ceux dont vous ne voulez pas) et que vous aurez rempli au préalable. Ils devront être écrit ligne par ligne, avec le chemin relatif au dossier ou fichier que vous voulez exclure de votre sauvegarde.&lt;/p&gt;
&lt;p&gt;Par exemple, supposons que l&amp;#8217;on veuille effectuer une sauvegarde du dossiers &amp;#8220;&lt;strong&gt;documents&lt;/strong&gt;&amp;#8221; avec l&amp;#8217;arborescence suivante :&lt;/p&gt;
&lt;p&gt;&lt;code&gt;documents/&lt;br /&gt;
|-----&amp;gt; images/&lt;br /&gt;
|-----&amp;gt; contrats/&lt;br /&gt;
|-----&amp;gt; projet/&lt;br /&gt;
|----------&amp;gt; .temp&lt;br /&gt;
|----------&amp;gt; ~projet.html&lt;br /&gt;
|----------&amp;gt; projet.html&lt;br /&gt;
|----------&amp;gt; projet-temp/&lt;br /&gt;
|-----&amp;gt; temp/&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Et que nous voulons exclure tous les fichiers et dossiers temporaires, on devra écrire dans le fichier &lt;strong&gt;exclude.txt&lt;/strong&gt; :&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;~*&lt;br /&gt;
.*&lt;br /&gt;
temp&lt;br /&gt;
projet/projet-temp&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;La seconde commande crypte l&amp;#8217;archive temporaire &lt;strong&gt;tar&lt;/strong&gt; précédemment créée avec la clé indiquée (votre clé)  après l&amp;#8217;option &lt;strong&gt;-r&lt;/strong&gt;. L&amp;#8217;option &lt;strong&gt;&amp;#8211;yes&lt;/strong&gt; sert à répondre oui par défaut à toutes les questions pendant le processus de cryptage. Elle est nécessaire, car dans le cas ou un ancien fichier crypté existerait déjà, &lt;strong&gt;gpg&lt;/strong&gt; nous demandera si il faut ou non écraser ce fichier. Notre but étant d&amp;#8217;avoir une procédure de sauvegarde totalement transparente, nous réglons donc ce problème pour que &lt;strong&gt;gpg&lt;/strong&gt; puisse toujours écraser un ancien fichier présent, si il existe.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Gpg&lt;/strong&gt; compresse automatiquement le fichier de sortie avec &lt;span&gt;gzip&lt;/span&gt;, nous n&amp;#8217;avons donc pas à nous préoccuper de compresser le fichier de sauvegarde après l&amp;#8217;opération de cryptage!&lt;/p&gt;
&lt;p&gt;Pour éviter de taper à chaque sauvegarde ces commandes, nous les sauvegardons dans un fichier de test, en lui octroyant les permissions d&amp;#8217;exécution.&lt;/p&gt;
&lt;h1&gt;Automatisation du script avec crontab&lt;/h1&gt;
&lt;p&gt;Nous pouvons automatiser cette sauvegarde en incluant une ligne dans&lt;strong&gt; contab&lt;/strong&gt; qui lancera du fichier que nous venons juste de créer&lt;strong&gt;&lt;/strong&gt;. Pour effectuer cette opération accédons à &lt;strong&gt;crontab&lt;/strong&gt; par cette commande :&lt;/p&gt;
&lt;p&gt;&lt;code&gt;crontab -e&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;et nous tapons :&lt;/p&gt;
&lt;p&gt;&lt;code&gt;*/20 * * * * /emplacement/fichier/backup-script.sh&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;*/20&lt;/strong&gt; indique à &lt;strong&gt;crontab&lt;/strong&gt; d&amp;#8217;exécuter le script toutes les 20 minutes. Vous pouvez changer cette option comme bon vous semble si cela ne vous convient pas (consultez le manuel de &lt;strong&gt;crontab&lt;/strong&gt; pour savoir comment modifier les données de démarrage du script).&lt;/p&gt;
&lt;h1&gt;Script de sauvegarde avancé&lt;/h1&gt;
&lt;p&gt;La méthode décrite jusqu&amp;#8217;à présent est basée sur un script simple mais très efficace. Nous allons voir maintenant comme le faire évoluer pour exécuter la sauvegarde sur un média externe (Clé Usb, SDCard ou encore disque dur externe).&lt;/p&gt;
&lt;p&gt;Pour rendre cette procédure intelligente, nous voulons que le script soit exécuté seulement quand le média externe est connecté et monté. Pour faire cela, on va tester à l&amp;#8217;intérieur du script la présence de ce média externe. Dans le script qui suit, vous verrez cependant qu&amp;#8217;il vient tester l’existence d&amp;#8217;un répertoire sur le média externe pour éviter que le sauvegarde se fasse sur un autre périphérique monté avec le même nom.&lt;/p&gt;
&lt;p&gt;Le script final sera le suivant :&lt;/p&gt;
&lt;p&gt;&lt;code&gt;#! /bin/sh&lt;br /&gt;
BACKUP_SCRIPT_PATH=/emplacement/fichier/script&lt;br /&gt;
BACKUP_DIR=/emplacement/dossier/backup&lt;br /&gt;
EXTERNAL_DRIVE=/emplacement/média/externe/&lt;br /&gt;
if [ -d $EXTERNAL_DRIVE/backups ]; then&lt;br /&gt;
tar -cf $BACKUP_DIR/&lt;strong&gt;nomarchive.tar&lt;/strong&gt; -X $BACKUP_SCRIPT_PATH/exclude.txt \&lt;br /&gt;
/emplacement/dossier/backup/1 \&lt;br /&gt;
/emplacement/dossier/backup/2 \&lt;br /&gt;
…&lt;br /&gt;
1&amp;gt; /dev/null 2&amp;gt; $BACKUP_SCRIPT_PATH/errors.log # redirection du fichier de log en cas d&amp;#8217;erreur&lt;br /&gt;
gpg &amp;#8211;yes -e -r &amp;#8220;&lt;strong&gt;nom_clè&lt;/strong&gt;&amp;#8221; $BACKUP_DIR/&lt;strong&gt;nomarchive.tar&lt;/strong&gt;&lt;br /&gt;
rm $BACKUP_DIR/&lt;strong&gt;nomarchive.tar&lt;/strong&gt;&lt;br /&gt;
cp $BACKUP_DIR/&lt;strong&gt;nomarchive.tar.gpg&lt;/strong&gt; $EXTERNAL_DRIVE/backups&lt;br /&gt;
fi&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Dans ce script on teste la présence du répertoire &lt;strong&gt;backups&lt;/strong&gt; sur la média externe (à créer bien sûr), on créé l&amp;#8217;archive temporaire, on crypte cette même archive temporaire, on supprime l&amp;#8217;archive temporaire et pour terminer on copie l&amp;#8217;archive cryptée dans le répertoire &lt;strong&gt;backups&lt;/strong&gt; sur le média externe.&lt;/p&gt;
&lt;p&gt;Rappelez-vous que l&amp;#8217;archive temporaire sert uniquement à faciliter le cryptage, qui s&amp;#8217;effectuera de cette manière, sur un seul et unique fichier. &lt;strong&gt;Gpg&lt;/strong&gt; créera un fichier de type &lt;strong&gt;nomarchive.tar.gpg&lt;/strong&gt; qui sera copié dans le répertoire &lt;strong&gt;backup&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;On pourrait accélérer la création du tar en faisant une mise-à-jour de l&amp;#8217;archive plutôt que de la créer de nouveau à chaque run (dans ce cas elle ne devra évidemment pas être éliminée après le cryptage). Cette possibilité est réalisable en substituant l&amp;#8217;option &lt;strong&gt;-c&lt;/strong&gt; avec &lt;strong&gt;-u&lt;/strong&gt; dans la commande tar (qui deviendra donc &lt;strong&gt;tar -uf&lt;/strong&gt;).&lt;/p&gt;
&lt;img src=&quot;http://feeds.feedburner.com/~r/Cedynamix-Ubuntu/~4/308066620&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;</description>
    
    
    
      </item>
    
  <item>
    <title>Traduction d’un thème: IAMWW w2 DnD</title>
    <link>http://www.pastanque.be/splitsch/moi/traduction-dun-theme-iamww-w2-dnd.html</link>
    <guid isPermaLink="false">urn:md5:8236702073345e783f419770b327a467</guid>
    <pubDate>Tue, 15 Apr 2008 06:06:56 +0200</pubDate>
    <dc:creator>Splitsch</dc:creator>
        <category>PUF</category>
        <category>Accueil</category><category>Blog</category><category>Forum</category><category>Pastanque</category><category>Php</category><category>Phpbb</category><category>Script</category><category>Theme</category><category>Traduction</category><category>Wordpress</category>    
    <description>    &lt;p&gt;&lt;a href=&quot;http://www.pastanque.be/splitsch/wp-content/uploads/2008/04/screenshot.png&quot;&gt;&lt;img class=&quot;alignright alignnone size-medium wp-image-124&quot; style=&quot;float: right;&quot; title=&quot;screenshot&quot; src=&quot;http://www.pastanque.be/splitsch/wp-content/uploads/2008/04/screenshot.png&quot; alt=&quot;&quot; width=&quot;266&quot; height=&quot;215&quot; /&gt;&lt;/a&gt;IAMWW w2 DnD est un thème sobre, élégant et sans chichi !&lt;/p&gt;
&lt;p&gt;Il est très facilement customisable, puisque il n&amp;#8217;y a pas d&amp;#8217;image. L&amp;#8217;on peut donc modifier le css à sa guise pour le colorer à son goût.&lt;/p&gt;
&lt;p&gt;Description de l&amp;#8217;auteur:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;The IAMWW w2 DnD theme is a completely Drag n' Drop version of the original &lt;a title=&quot;IAMWW w2&quot; href=&quot;http://iamww.com/wordpress-theme-iamww-w2&quot;&gt;IAMWW w2&lt;/a&gt; theme for WordPress.  IAMWW w2 was built from the core of &lt;a title=&quot;Upstart Blogger Minim&quot; href=&quot;http://www.upstartblogger.com/wordpress-theme-upstart-blogger-minim&quot;&gt;Upstart Blogger Minim&lt;/a&gt;.&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Traduction: Le thème IAMWW w2 DnD est une version totalement Drag n&amp;#8217; Drop du thème original IAMWW w2 pour WordPress. IAMWW w2 a été construit à partir du coeur de &lt;a title=&quot;Upstart Blogger Minim&quot; href=&quot;http://www.upstartblogger.com/wordpress-theme-upstart-blogger-minim&quot;&gt;Upstart Blogger Minim&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Je vous propose une traduction en français de ce thème.&lt;/p&gt;
&lt;p&gt;Pour la téléchargée, rendez-vous ici:&lt;/p&gt;
&lt;p&gt;&lt;a title=&quot;traduction de IAMWW w2 dnd, le thèeme wordpress, par Splitsch&quot; href=&quot;http://www.pastanque.be/splitsch/fichiers/IAMWW_w2_dnd_FR.zip&quot; target=&quot;_blank&quot;&gt;IAMWW_w2_dnd_FR.zip&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Si vous trouvez la moindre erreur, n&amp;#8217;hésitez pas à m&amp;#8217;en faire part, et je verrai ce que je peux améliorer !&lt;/p&gt;
&lt;p&gt;Je vais en outre bientôt mettre ce thème en fonctionnement, légèrement modifié à ma sauce, avec, notamment, dans le menu latéral, les derniers messages de mon forum phpBB3.&lt;/p&gt;
&lt;p&gt;Je posterai donc un tuto sur la manière de procéder&lt;/p&gt;
&lt;p&gt;A bientôt !&lt;/p&gt;</description>
    
    
    
      </item>
    
  <item>
    <title>Script Bash : Video Camera Capture</title>
    <link>http://planet.ubuntu-fr.org/post/2007/12/10/Script-Bash-%3A-Video-Camera-Capture</link>
    <guid isPermaLink="false">urn:md5:fbd23a99291fd016b6ed457de3feb8df</guid>
    <pubDate>Mon, 10 Dec 2007 11:08:00 +0100</pubDate>
    <dc:creator>Administrateur</dc:creator>
        <category>Planet</category>
        <category>Accueil</category><category>Dvgrab</category><category>Libre</category><category>Nautilus</category><category>Script</category><category>UbunLibre</category><category>Ubuntu</category><category>Video</category>    
    <description>    &lt;p&gt;Ce week-end, je n'ai pas été très présent sur mon Blog, la faute à ma mauvaise habitude de toujours reporter à demain ce que je peux faire le jour même.&lt;/p&gt;
&lt;p&gt;J'ai mis de côté la capture des cassettes vidéo faites avec mon camescope, j'en avais 6 de retard. Depuis juin 2007, je n'ai rien fait. Bref pour tous ceux qui connaissent le même problème que moi, on sait que cela prend du temps et que de plus, c'est très répétitif comme travail. Alors, je me suis mis à la création de 2 scripts qui permettent d'automatiser tout cela. Je vous présente ici le 1er.&lt;/p&gt;
&lt;h1&gt;Video Camera Capture&lt;/h1&gt;
&lt;h2&gt;Installation et dépendances&lt;/h2&gt;
&lt;p&gt;Télécharger le fichier &lt;a href=&quot;http://www.cedynamix.fr/Downloads/Video-Camera-Capture.tar.gz&quot;&gt;Video-Camera-Capture.tar.gz&lt;/a&gt; et décompressez le dans le dossier &lt;strong&gt;~/.gnome2/nautilus-scripts&lt;/strong&gt; puis rendez le exécutable.&lt;/p&gt;
&lt;p&gt;Dépend des paquets zenity et dvgrab&lt;/p&gt;
&lt;h2&gt;Fonctionnement&lt;/h2&gt;
&lt;p&gt;
Ce script permet tout simplement de lancer automatiquement la capture de la cassette présente dans votre camescope. Le script se déroule de la façon suivante :&lt;/p&gt;
&lt;p&gt;Tout d'abord il vous demande si vous vous voulez faire votre capture vidéo dans le répertoire par défaut (définit à l'installation du script) ou dans un répertoire différent de celui par défaut. Moi j'utilise tout le temps le répertoire par défaut et le script à la base était fait comme cela mais j'ai rajouté la possibilité de choisir un autre répertoire, car toutes les personnes qui seraient susceptibles d'utiliser ce script n'ont pas les mêmes habitudes que moi.&lt;/p&gt;
&lt;br /&gt;&lt;img alt=&quot;&quot; src=&quot;http://www.cedynamix.fr/dotclear/public/Script/VCCss1.png&quot; /&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Une fois que vous avez choisi votre répertoire de destination, une boite de dialogue s'ouvre et vous demande votre mot de passe pour exécuter la commande &lt;strong&gt;chmod a+rw /dev/raw1394 /dev/dv1394&lt;/strong&gt; qui permet de donner les droits de Lecture/Écriture au périphérique vidéo. Je préfère cette méthode qui est courante. Tout le monde le fait pour les mises à jour ou au lancement synatpic par exemple.&lt;/p&gt;
&lt;p class=&quot;note&quot;&gt;&lt;strong&gt;Historique : &lt;/strong&gt;Le problème de droit en Lecture/Écriture du périphérique que tous possesseurs de camescope connaît, oblige au choix, à 2 types de manipulation. La première est de faire la modification dans le fichier &lt;strong&gt;/etc/rc.local &lt;/strong&gt;en rajoutant la commande cité plus haut ou la seconde possibilité qui est de faire cette même commande dans un terminal après chaque redémarrage de votre PC. Je trouve la première peu pratique, car en cas de réinstallation du système il faut encore modifier le fichier. Certains diront que ce n'est pas très long mais, quand on a oublié ce qu'il faut faire, ça peut le devenir et la seconde méthode l'est encore moins, car à faire à chaque fois que l'on veut exécuter une capture avec son camescope.&lt;/p&gt;
&lt;p&gt;Ensuite une autre boite de dialogue vous demande de spécifier une entête pour les fichiers de capture. Je suis parti sur cette option, car comme je vous l'ai expliqué plus haut, je capture mes cassettes par lot donc si je ne différencie pas les enregistrements de chaque cassette je risque de ne jamais m'en sortir.&lt;/p&gt;
&lt;br /&gt;&lt;img alt=&quot;&quot; src=&quot;http://www.cedynamix.fr/dotclear/public/Script/VCCss2.png&quot; /&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Enfin la dernière fenêtre qui s'affiche est là pour vous demander la durée de la cassette à capturer. J'ai mis en place cette boite de dialogue pour une raison simple. Si je lance dvgrab sans cette option le programme dvgrab ne s'arrête pas après avoir terminé la capture de la cassette et reste en mémoire ce qui m'oblige à tuer le processus et ce n'est pas très élégant comme façon de faire ni très pratique.&lt;/p&gt;
&lt;br /&gt;&lt;img alt=&quot;&quot; src=&quot;http://www.cedynamix.fr/dotclear/public/Script/VCCss3.png&quot; /&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Voilà pour la présentation, je suis ouvert à toutes propositions d'améliorations ou si vous avez des idées je suis preneur.&lt;/p&gt;
&lt;br /&gt;&lt;br /&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/Cedynamix/~4/197964167&quot; height=&quot;1&quot; width=&quot;1&quot;/&gt;</description>
    
    
    
      </item>
    
  <item>
    <title>Script Bash : Video Camera Capture</title>
    <link>http://planet.ubuntu-fr.org/post/2007/12/10/Script-Bash-%3A-Video-Camera-Capture2</link>
    <guid isPermaLink="false">urn:md5:4802faf167bcd98d34c03fd978e05c88</guid>
    <pubDate>Mon, 10 Dec 2007 11:08:00 +0100</pubDate>
    <dc:creator>Administrateur</dc:creator>
        <category>Planet</category>
        <category>Accueil</category><category>Dvgrab</category><category>Libre</category><category>Nautilus</category><category>Script</category><category>UbunLibre</category><category>Ubuntu</category><category>Video</category>    
    <description>        &lt;p&gt;Ce week-end, je n'ai pas été très présent sur mon Blog, la faute à ma mauvaise habitude de toujours reporter à demain ce que je peux faire le jour même.&lt;/p&gt;
&lt;p&gt;J'ai mis de côté la capture des cassettes vidéo faites avec mon camescope, j'en avais 6 de retard. Depuis juin 2007, je n'ai rien fait. Bref pour tous ceux qui connaissent le même problème que moi, on sait que cela prend du temps et que de plus, c'est très répétitif comme travail. Alors, je me suis mis à la création de 2 scripts qui permettent d'automatiser tout cela. Je vous présente ici le 1er.&lt;/p&gt;
&lt;h1&gt;Video Camera Capture&lt;/h1&gt;
&lt;h2&gt;Installation et dépendances&lt;/h2&gt;
&lt;p&gt;Télécharger le fichier &lt;a href=&quot;http://www.cedynamix.fr/Downloads/Video-Camera-Capture.tar.gz&quot;&gt;Video-Camera-Capture.tar.gz&lt;/a&gt; et décompressez le dans le dossier &lt;strong&gt;~/.gnome2/nautilus-scripts&lt;/strong&gt; puis rendez le exécutable.&lt;/p&gt;
&lt;p&gt;Dépend des paquets zenity et dvgrab&lt;/p&gt;
&lt;h2&gt;Fonctionnement&lt;/h2&gt;
&lt;p&gt;
Ce script permet tout simplement de lancer automatiquement la capture de la cassette présente dans votre camescope. Le script se déroule de la façon suivante :&lt;/p&gt;
&lt;p&gt;Tout d'abord il vous demande si vous vous voulez faire votre capture vidéo dans le répertoire par défaut (définit à l'installation du script) ou dans un répertoire différent de celui par défaut. Moi j'utilise tout le temps le répertoire par défaut et le script à la base était fait comme cela mais j'ai rajouté la possibilité de choisir un autre répertoire, car toutes les personnes qui seraient susceptibles d'utiliser ce script n'ont pas les mêmes habitudes que moi.&lt;/p&gt;
&lt;br /&gt;&lt;img alt=&quot;&quot; src=&quot;http://www.cedynamix.fr/dotclear/public/Script/VCCss1.png&quot; /&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Une fois que vous avez choisi votre répertoire de destination, une boite de dialogue s'ouvre et vous demande votre mot de passe pour exécuter la commande &lt;strong&gt;chmod a+rw /dev/raw1394 /dev/dv1394&lt;/strong&gt; qui permet de donner les droits de Lecture/Écriture au périphérique vidéo. Je préfère cette méthode qui est courante. Tout le monde le fait pour les mises à jour ou au lancement synatpic par exemple.&lt;/p&gt;
&lt;p class=&quot;note&quot;&gt;&lt;strong&gt;Historique : &lt;/strong&gt;Le problème de droit en Lecture/Écriture du périphérique que tous possesseurs de camescope connaît, oblige au choix, à 2 types de manipulation. La première est de faire la modification dans le fichier &lt;strong&gt;/etc/rc.local &lt;/strong&gt;en rajoutant la commande cité plus haut ou la seconde possibilité qui est de faire cette même commande dans un terminal après chaque redémarrage de votre PC. Je trouve la première peu pratique, car en cas de réinstallation du système il faut encore modifier le fichier. Certains diront que ce n'est pas très long mais, quand on a oublié ce qu'il faut faire, ça peut le devenir et la seconde méthode l'est encore moins, car à faire à chaque fois que l'on veut exécuter une capture avec son camescope.&lt;/p&gt;
&lt;p&gt;Ensuite une autre boite de dialogue vous demande de spécifier une entête pour les fichiers de capture. Je suis parti sur cette option, car comme je vous l'ai expliqué plus haut, je capture mes cassettes par lot donc si je ne différencie pas les enregistrements de chaque cassette je risque de ne jamais m'en sortir.&lt;/p&gt;
&lt;br /&gt;&lt;img alt=&quot;&quot; src=&quot;http://www.cedynamix.fr/dotclear/public/Script/VCCss2.png&quot; /&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Enfin la dernière fenêtre qui s'affiche est là pour vous demander la durée de la cassette à capturer. J'ai mis en place cette boite de dialogue pour une raison simple. Si je lance dvgrab sans cette option le programme dvgrab ne s'arrête pas après avoir terminé la capture de la cassette et reste en mémoire ce qui m'oblige à tuer le processus et ce n'est pas très élégant comme façon de faire ni très pratique.&lt;/p&gt;
&lt;br /&gt;&lt;img alt=&quot;&quot; src=&quot;http://www.cedynamix.fr/dotclear/public/Script/VCCss3.png&quot; /&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Voilà pour la présentation, je suis ouvert à toutes propositions d'améliorations ou si vous avez des idées je suis preneur.&lt;/p&gt;
&lt;br /&gt;&lt;br /&gt;</description>
    
    
    
      </item>
    
  <item>
    <title>Script Bash : Video Camera Capture</title>
    <link>http://planet.ubuntu-fr.org/post/2007/12/10/Script-Bash-%3A-Video-Camera-Capture3</link>
    <guid isPermaLink="false">urn:md5:dc9d48805cdb70e62797bb2b5509c5b4</guid>
    <pubDate>Mon, 10 Dec 2007 11:08:00 +0100</pubDate>
    <dc:creator>Administrateur</dc:creator>
        <category>Planet</category>
        <category>Accueil</category><category>Dvgrab</category><category>Libre</category><category>Nautilus</category><category>Script</category><category>UbunLibre</category><category>Ubuntu</category><category>Video</category>    
    <description>    &lt;p&gt;Ce week-end, je n'ai pas été très présent sur mon Blog, la faute à ma mauvaise habitude de toujours reporter à demain ce que je peux faire le jour même.&lt;/p&gt;
&lt;p&gt;J'ai mis de côté la capture des cassettes vidéo faites avec mon camescope, j'en avais 6 de retard. Depuis juin 2007, je n'ai rien fait. Bref pour tous ceux qui connaissent le même problème que moi, on sait que cela prend du temps et que de plus, c'est très répétitif comme travail. Alors, je me suis mis à la création de 2 scripts qui permettent d'automatiser tout cela. Je vous présente ici le 1er.&lt;/p&gt;
&lt;h1&gt;Video Camera Capture&lt;/h1&gt;
&lt;h2&gt;Installation et dépendances&lt;/h2&gt;
&lt;p&gt;Télécharger le fichier &lt;a href=&quot;http://www.cedynamix.fr/Downloads/Video-Camera-Capture.tar.gz&quot;&gt;Video-Camera-Capture.tar.gz&lt;/a&gt; et décompressez le dans le dossier &lt;strong&gt;~/.gnome2/nautilus-scripts&lt;/strong&gt; puis rendez le exécutable.&lt;/p&gt;
&lt;p&gt;Dépend des paquets zenity et dvgrab&lt;/p&gt;
&lt;h2&gt;Fonctionnement&lt;/h2&gt;
&lt;p&gt;
Ce script permet tout simplement de lancer automatiquement la capture de la cassette présente dans votre camescope. Le script se déroule de la façon suivante :&lt;/p&gt;
&lt;p&gt;Tout d'abord il vous demande si vous vous voulez faire votre capture vidéo dans le répertoire par défaut (définit à l'installation du script) ou dans un répertoire différent de celui par défaut. Moi j'utilise tout le temps le répertoire par défaut et le script à la base était fait comme cela mais j'ai rajouté la possibilité de choisir un autre répertoire, car toutes les personnes qui seraient susceptibles d'utiliser ce script n'ont pas les mêmes habitudes que moi.&lt;/p&gt;
&lt;br /&gt;&lt;img alt=&quot;&quot; src=&quot;http://www.cedynamix.fr/dotclear/public/Script/VCCss1.png&quot; /&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Une fois que vous avez choisi votre répertoire de destination, une boite de dialogue s'ouvre et vous demande votre mot de passe pour exécuter la commande &lt;strong&gt;chmod a+rw /dev/raw1394 /dev/dv1394&lt;/strong&gt; qui permet de donner les droits de Lecture/Écriture au périphérique vidéo. Je préfère cette méthode qui est courante. Tout le monde le fait pour les mises à jour ou au lancement synatpic par exemple.&lt;/p&gt;
&lt;p class=&quot;note&quot;&gt;&lt;strong&gt;Historique : &lt;/strong&gt;Le problème de droit en Lecture/Écriture du périphérique que tous possesseurs de camescope connaît, oblige au choix, à 2 types de manipulation. La première est de faire la modification dans le fichier &lt;strong&gt;/etc/rc.local &lt;/strong&gt;en rajoutant la commande cité plus haut ou la seconde possibilité qui est de faire cette même commande dans un terminal après chaque redémarrage de votre PC. Je trouve la première peu pratique, car en cas de réinstallation du système il faut encore modifier le fichier. Certains diront que ce n'est pas très long mais, quand on a oublié ce qu'il faut faire, ça peut le devenir et la seconde méthode l'est encore moins, car à faire à chaque fois que l'on veut exécuter une capture avec son camescope.&lt;/p&gt;
&lt;p&gt;Ensuite une autre boite de dialogue vous demande de spécifier une entête pour les fichiers de capture. Je suis parti sur cette option, car comme je vous l'ai expliqué plus haut, je capture mes cassettes par lot donc si je ne différencie pas les enregistrements de chaque cassette je risque de ne jamais m'en sortir.&lt;/p&gt;
&lt;br /&gt;&lt;img alt=&quot;&quot; src=&quot;http://www.cedynamix.fr/dotclear/public/Script/VCCss2.png&quot; /&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Enfin la dernière fenêtre qui s'affiche est là pour vous demander la durée de la cassette à capturer. J'ai mis en place cette boite de dialogue pour une raison simple. Si je lance dvgrab sans cette option le programme dvgrab ne s'arrête pas après avoir terminé la capture de la cassette et reste en mémoire ce qui m'oblige à tuer le processus et ce n'est pas très élégant comme façon de faire ni très pratique.&lt;/p&gt;
&lt;br /&gt;&lt;img alt=&quot;&quot; src=&quot;http://www.cedynamix.fr/dotclear/public/Script/VCCss3.png&quot; /&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Voilà pour la présentation, je suis ouvert à toutes propositions d'améliorations ou si vous avez des idées je suis preneur.&lt;/p&gt;
&lt;br /&gt;&lt;br /&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/Cedynamix-Ubuntu/~4/208398535&quot; height=&quot;1&quot; width=&quot;1&quot;/&gt;</description>
    
    
    
      </item>
    
</channel>
</rss>
