Planet Archlinux FR

ArchLinux, en Français

ttf-dejavu 2.37 nécessitera de forcer la mise à jour

ttf-dejavu 2.37 va changer la manière dont la configuration de fontconfig est installée. Dans les versions précédentes, la configuration était un lien symbolique décrit dans les scripts post_install/post_upgrade, la nouvelle version placera les fichiers à l’intérieur du paquet, comme cela se fait à présent dans fontconfig.

Pour plus d’informations à propos de ce changement: https://bugs.archlinux.org/task/32312

Pour mettre à niveau ttf-dejavu 2.37 il est recommandé de mettre à jour le paquet à part:

pacman -S --force ttf-dejavu

Article original

Les paquets TeXLive 2016 sont maintenant disponibles

Les paquets TeXLive ont été mis à jour en version 2016.

Le changement le plus notable est que l’utilitaire biber est maintenant fourni en tant que paquet séparé. Vous pouvez l’installer normalement en utilisant pacman.

Les hooks de pacman sont maintenant utilisés dans les paquets TeXLive de sorte que la mise à jour sera moins verbeuse que dans les années passées.

Article original

test-sec-flags: Appel à l’aide

Inspiré par des discussions sur la liste de diffusion arch-general, test-sec-flags a été créé par pid1 (avec l’aide d’anthraxx, strcat, sangy et rgacogne) pour tester l’impact sur les performances des options de lien et de compilation axés sur la sécurité. L’objectif est de déterminer si ces flags peuvent être la nouvelle valeur par défaut pour tous les paquets d’Arch Linux. Les résultats préliminaires suggèrent que l’impact sur les performances est presque inexistant comparé aux flags de compilation que nous utilisons déjà, mais nous aimerions recueillir et comparer plus de résultats avant de poursuivre.

Téléchargez la source ici et consultez le README pour les instructions d’installation et d’utilisation. Le sous-répertoire results contient des instructions sur la façon de dégager les statistiques pertinentes à partir des fichiers de résultats.

Nous recueillons des résultats dans le wiki test-sec-flags sur Github. Ajoutez-y les vôtres si vous voulez. Nous aimerions en particulier des bilans i686, compte tenu que tous les contributeurs précédents possédaient des appareils x86_64.

Patchs bienvenus.

Article original (en)

screen-4.4.0-1 incapable d’attacher d’anciennes sessions

Avec la mise à jour de screen-4.4.0-1 vous serez dans l’incapacité de rattacher des sessions ayant démarré sur des versions antérieures de screen. Veillez à vous assurer que toutes vos sessions sont fermées avant la mise à jour.

Article original (en)

Compte rendu du Meetup ArchLinux France du 10 Nov. 2015

Ce 10 Novembre 2015 a eu lieu le second meetup ArchLinux France, chez BlaBlaCar à Paris ! Pour rappel le premier Meetup avait eu lieu en Octobre 2014. Pour cette nouvelle édition, il y avait 5 présentations, et près de 70 personnes ! (vous pouvez retrouver le programme sur meetup).

Voici la liste des présentations et leurs slides (update: elles sont maintenant toutes disponibles !) :

J’ai pour ma part parlé de Yaourt, son histoire, son développement, ses features. Si vous souhaitez participer, n’hésitez pas à vous rendre sur le github du projet :)

Mes slides ci dessous :

Et quelques photos, tirées du ‘Live Tweet’ de @archlinuxfr :

Encore merci aux talkers, à tous ceux présents, et à BlaBlaCar (et Puckel_) pour le sponsoring de la salle et la collation !

Faisons de l'internet, Transmission-nous

Faisons de l'internet et non du Minitel 2.0, car aujourd'hui c'est Transmission, c'est un nœud BitTorrent Libre ! (Def de Wikipédia) Oui le Libre c'est bien ! ! !
Donc ça permet de faire du torrent en Libre ! Et partager tout bien de fichier Libre de droit !

Donc pour l'installer, c'est comme d'habitude, vous sortez votre gestionnaire de paquet préféré, ouais, mais c'est pas en installant le premier Transmission qui passe que ça va marcher.
Il existe plusieurs versions de Transmission, le démon, le contrôle à distance en ncurses, la version GTK et QT, qui eux marche en autonome, mais qui ont normalement le contrôle à distance pour le démon.
Donc, je vais parler aujourd'hui du démon et du contrôle à distance en ncurses, donc pour installer le daemon, le paquet ça doit être transmission-cli ou quelque chose comme ça, et oui, on peut communiquer avec le démon en ligne de commande, pour plus d'info, regarde ton putain de manuel !, et pour le contrôle à distance, c'est transmission-remote-cli, ou une connerie de ce genre, et oui c'est en ncurses, pour ce qui sont sous Archlinux, vous avez la liste des paquets sur le wiki d'Archlinux.

Comme tout bon service, il faut bien le lancer, avec SystemD, donc un p'tit coup de sudo systemctl start transmission.
Ouais mais il est lancé avec l'utilisateur transmission par défaut, si vous avez envie de changer d'utilisateur, vous pouvez en modifiant le fichier /etc/systemd/system/multi-user.target.wants/transmission.service, il existe si vous avez activé le service avec un petit coup de sudo systemctl enable transmission, donc il suffit juste de modifier le User.
Voilà, il est tout beau, tout mignon, il tourne.

Après, après ? Il faut le configurer, il a une configuration de base, mais c'est plus sympa avec une petite configuration personnel. Donc si vous avez garder comme utilisateur transmission, le fichier de configuration se situe dans /var/lib/transmission-daemon ou dans /var/run/transmission, ceci dépend de la distribution, tel que Debian ou Ubuntu, pour ne citer personne (Quel idée de ne pas suivre la norme de hiéarchie...), et si vous avez décidé d'utiliser votre utilisateur, ceci se situe dans $HOME/.config/transmission-daemon, tout les infos sur les chemins des fichiers de configuration se situe ici pour GNU/Linux.

La liste des paramètres est disponible sur le wiki de Transmission, vous faites votre configuration personnel.

Par defaut, Transmission-deamon a une interface web, et le contrôle à distance ce fait par là, donc si vous voulez pas avoir l'interface web qui traine sur internet ou votre réseau local, mettez en liste blanche votre localhost, soit 127.0.0.1 (Essayez pas de la hacker !).
Après, il suffit de lancer transmission-remote-cli sur la même machine que le démon pour avoir le contrôle.

Pour d'autre info, l'internet, sinon les wiki fr et en de Archlinux sont assez complète avec celui de Transmission et pour le remote-cli, je ferais peut-être un autre article s'il y a des trucs sympa à faire avec.

"Ranger : Et merde, on se les gèle ici... Tiens, voilà quelqu'un."

Ranger c'est quoi ? C'est pas ranger sa chambre (il faudrait que je le fasse...). Ranger, c'est un gestionnaire de fichier dans le terminal, donc pas besoin d'interface graphique !

Pour l'installer, utiliser votre gestionnaire de paquets préféré, et voilà, vous avez votre ranger !
Pour avoir le fichier de configuration de base lancer la commande :

ranger --copy-config=all

Pour modifier les options, c'est le fichier rc.conf, cherchez-le, sinon c'est pas marrant.

Il y a quoi comme option sympa ?

  • set column_ratios Pour gérer le ratio des différentes colonnes
  • set draw_borders Pour mettre des bordures sur les colonnes

Sinon, tout les options sont dans le man.

Pour avoir le pré-affichage des archives, pages html, images, pdf, torrent...
Il faut installer les dépendances optionelles, la liste est sur la page d'accueil du projet, ou pour Archlinux sur la page du paquet.

Pour plus d'info, les pages du wiki d'Archlinux fr ou en ou sinon la vache Libre.

Transférer et géolocaliser mes photos : un petit script

En matière de classement des photos, comme dans bien d'autres domaines, j'ai le sentiment de ramer à contre courant. L'heure est à l'utilisation de logiciels graphiques sophistiqués, prenant en charge depuis l'insertion de la carte SD (ou la connexion de l'APN) jusqu'au téléversement sur l'album en ligne. Digikam fait, paraît-il, cela très bien, mais je le trouve trop lourd et d'un emploi mal aisé. Je fondais quelques espoir sur oqapy, malheureusement je ne le trouve plus sur les dépôts Archlinux, même pas dans AUR... J'aime assez gthumb mais il ne sait pas faire tout ça.

Bref, je continue à travailler à la mimine selon un processus bien établi :

  • Créer un répertoire au nom significatif tant du point de vue chronologique que géographique (aaaammjj_Localisation)
  • Y copier les fichiers JPG et les renommer selon un shéma analogue (aaaammjj_hhmmss_Localisation_NomOriginel.JPG)
  • Y copier le ou les éventuel(s) fichiers gpx associés et géolocaliser les images
  • Sélectionner, recadrer et éventuellement retoucher les meilleurs clichés avant de les transférer vers notre album Piwigo

Pour renommer les photos j'utilise exiv2 de la manière suivante :

exiv2 -r %Y%m%d_%H%M%S_Localisation_:basename: mv *.JPG

Pour géolocaliser j’utilise Gpscorrelate, que j'ai présenté ici, qui est malheureusement abandonné par son créateur mais a l'avantage de disposer à la fois d'une version graphique et d'une version en ligne de commande.

gpscorrelate -g monFichierTrace.gpx -z [valeur] *.JPG

La valeur à associer à l'option -z est le décalage du fuseau horaire, par exemple +1:00 pour l’heure normale d’Europe centrale (CET : Paris, Bruxelles, Genève…) et +2:00 pour l’heure d’été d’Europe centrale (CEST). Ceci dans la mesure ou l’horodatage des photos est faite en heure locale et celle du GPS en UTC, ce qui est en principe le cas. Il y a d'autres options possible, voir la  documentation.

Bon, ce n'est pas trop compliqué, mais il faut se souvenir des options, tout ça.... Pourquoi ne pas automatiser le processus dans un petit script ?

#! /bin/bash 

#######################
##     photoman      ##
## interface à exiv2 ##
## et à gpscorrelate ##
#######################


declare -i nbRep=0
declare -i nbPhotos=0
declare -A DateTab

# chemin du répertoire photo
photoRep="/media/NAS/Public/Photos/"
# chemin du GPS
GPS="/run/media/vincent/GARMIN/Garmin/GPX"

IFS=$'\n'
shopt -s nullglob

# détection du GPS
if [ -d $GPS ]; then
    find $GPS -iname "*.gpx" > /tmp/tracesGPS
    if [ $(wc -l /tmp/tracesGPS | cut -d " " -f 1) != 0 ]; then        
        echo
        read -n 1 -s -p "un ou plusieurs fichiers gpx ont été trouvé dans le GPS. Les copier dans le(s) répertoire(s) photos [O/n] ? " copieTrace
        copieTrace="${copieTrace:=o}"
        case $copieTrace in
            o|O|y|Y ) Geolocalisation=true;;
            * ) Geolocalisation=false;;
        esac
    fi
else
    read -n 1 -s -p "Le GPS n'a pas été détecté : continuer quand même [o/N] ? " question
    question="${question:=n}"
    case $question in
            o|O|y|Y ) Geolocalisation=false ;;
            * ) exit;;
    esac
fi
echo

#traitement des photos
for fichier in *
do
    if [ ! -f $fichier ]; then continue; fi
    MimeType=$(file --mime-type $fichier)
    if [[ ${MimeType:(-10)} != "image/jpeg" ]]; then continue; fi
    datePhoto=$(exiv2 -g Exif.Photo.DateTimeOriginal $fichier | sed -r 's/^ *//;s/ {1,}/ /g'| cut -d " " -f 4 | sed 's/://g')
    repertoire=$photoRep${datePhoto:0:4}"/"
    if [ -z ${DateTab[$datePhoto]} ]; then 
        echo
        read -p "Veuillez indiquer une localisation correspondant à la journée du $datePhoto puis appuyez sur [Entrée] : " localisation
        echo
        DateTab[$datePhoto]="_"$(echo $localisation | sed 's/ /-/g')
        mkdir $repertoire$datePhoto${DateTab[$datePhoto]} 2> /dev/null
        ((nbRep++))
        # copier les fichiers gpx        
        if $Geolocalisation; then
            while read line  
                do   
                cp $line $repertoire$datePhoto${DateTab[$datePhoto]}
            done < /tmp/tracesGPS
        fi
    fi 
    fichierRenomme=$repertoire$datePhoto${DateTab[$datePhoto]}"/"$(echo $fichier | sed 's/ /-/g')
    cp $fichier $fichierRenomme
    ((nbPhotos++))
    exiv2 "-r%Y%m%d_%H%M%S"${DateTab[$datePhoto]}"_:basename:" mv $fichierRenomme
done

#Bilan
if [ $nbPhotos -eq 0 ]; then 
    echo
    echo "Il n'y a aucune photo à transférer dans ce répertoire"
    echo "+++++++++++++++++++++++++++++++++++++++++++++++++++++"
    echo
    exit
fi
echo "$nbPhotos photos ont été transférées dans $nbRep répertoire(s)."
printf '\033[7m'
read -n 1 -s -p "===> Supprimer toutes les photos dans le répertoire d'origine [o/N] ? " question
question="${question:=n}"
printf '\033[0m'echo
case $question in
        o|O|y|Y ) rm -rf *.[jJ][pP][gG] ;;
        * ) : ;;
esac

#Géolocalisation
if ! $Geolocalisation; then exit; fi
read -n 1 -s -p "Géolocaliser les photos transférées [O/n] ? " question
question="${question:=o}"
case $question in
        o|O|y|Y ) : ;;
        * ) exit;;
esac
for i in "${!DateTab[@]}"
    do 
    cd $photoRep${i:0:4}"/"$i${DateTab[$i]}
    for f in "*.[gG][pP][xX]"
        do
        gpxFileDate=$(xml_grep 'trkpt' $f --nb_results 1 | xml_grep 'time' --text_only)
        UTCHour=$(date -d $(echo $gpxFileDate | sed "s/T/ /g" | sed "s/Z//g") +%k | sed "s/ //g")
        LocalHour=$(date -d $gpxFileDate +%k)
        TimeZone=$(( $LocalHour  - $UTCHour ))
        gpscorrelate -g $f -z $TimeZone *.[jJ][pP][gG]
    done
done

Quelques explications :

Les premières lignes servent de fichier ini : emplacement du répertoire photo et point de montage du GPS

Ensuite je détecte si le GPS est connecté et je vérifie (find -iname *.gpx) et s'il y a une (ou plusieurs) traces. On y reviendra plus tard

Puis pour chaque fichier du répertoire en cours
  • je teste s'il est de type image jpg,
  • j'extrais la date de prise de vue grace à exiv2
  • s'il n'existe pas je crée un répertoire correspondant à cette date (localisation demandée), j'y copie les éventuelles traces du GPS et j'incrémente un compteur (les noms des répertoires sont stockés dans un tableau associatif date => _localisation )
  • J'y copie le fichier photo, le renomme (aaaammjj_hhmmss_localisation_nomOririnel.JPG) et incrémenter un compteur
Une fois le transfert terminé je vide éventuellement le répertoire d'origine et je commence la géolocalisation proprement dite. Une seule difficulté, déterminer automatiquement la zone horaire qui s'applique ce jour (en supposant que l'APN est correctement réglé à l'heure locale).

Les trace gpx sont des fichiers XML. On peut évidement les exploiter à la hussarde à grand coup de sed ou de awk, mais un bon parseur vous facilitera la tache. J'utilise ici xml_grep fourni par le paquet perl-xml-twig (Archlinux) ou xml-twig-tools (Debian/Ubuntu). Il me permet ici d'extraire l'horodatage (UTC) du premier trackpoint, que j'exprime en heure locale pour calculer la différence.

J'appelle enfin gpscorrelate pour chaque fichier gpx, avec le décalage horaire calculé, et je l'applique à toutes les photos. En principe une photo n'est concernée que par une seule trace mais s'il arrivait que le fichier JPG contienne déjà des données exif gps elles ne seraient pas écrasées et un message d'erreur serait affiché.

Naturellement ce script ne répond précisément qu'à mes besoins personnels et probablement pas aux vôtres mais il démontre, je l'espère, qu'il n'est pas si difficile de réaliser soi-même l'application correspondant à ses desiderata.

Urxvt, ou comment avoir du Unicode dans Rxvt

Urxvt c'est Rxvt-unicode (Ouais c'est cool !), mais plus précisément c'est un clone de rxvt, avec le support d'Unicode en plus. Urxvt est un émulateur de terminal pour X, donc il ne dépend d'aucun d'environnement graphique, en plus il est léger, facilement configurable et la possibilité de le lancer comme démon.

Alors pourquoi l'avoir choisi Urxvt? Car quand j'ai débarqué sur Archlinux, des collègues m'ont dit de l'utiliser et m'ont donnés une configuration de base. Et là j'ai fini de bien configurer mon terminal.

Donc il y a quoi de bien à configurer dans Urxvt? D'abord, Urxvt utilise les ressources X11 pour la configuration qui utilise le fichier $HOME/.Xressources.
La liste de tout les options est diponible dans le man de urxvt ou ici sur le site officiel de Urxvt.

Pour la police :

URxvt.font: xft:DejaVu Sans Mono:size=10

C'est le nom de la police et ensuite la taille.

Pour la police en Gras :

URxvt.boldFont: xft:DejaVu Sans Mono:bold:size=10

Il est possible aussi de définir la police en Italique.

Après il faut jouer sur l'espacement entre les lettres pour rendre bien la police.

URxvt*letterSpace: -1

Pour la transparence, il y a deux façon, la vraie et la fausse. Pour la vrai, Urvxt utilise la composition, pour ce faite il faut un gestionnaire de compositing ou un gestionnaire de fenêtre qui gère le composite.

Donc pour la vraie :

URxvt*depth: 32
URxvt*background: [60]#161616

URxvt*depth permet de dire sur combien de bit on gère la transparence et ce qui est entre crochets pour URxvt*background correspond à la transparence en pourcentage.

Pour la fausse transparence, Urxvt prend le fond d'écran et l'applique comme fond.

URxvt*.transparent: true
URxvt*.shading: 110

Pour URxvt*.shading, le chiffre entre 0 et 99 rend un fond pour foncé et entre 101 et 200, un fond plus clair. Mais cela ne rend pas la même couleur défini par URxvt*background

Pour utiliser Urxvt comme démon, il faut lancer la commande :

urxvtd -q -o -f

Et après lancer les terminaux avec :

urxvtc

Pour plus d'information, il y a le wiki fr ou en d'Archlinux qui sont de bonne références.

Sinon, voici mon fichier de configuration pour Urxvt.

Xcursor.theme: Vanilla-DMZ
! ===============================================
! URXVT
! ===============================================
! URxvt*termName: string
URxvt*geometry: 240x84
! URxvt*chdir: string
! URxvt*reverseVideo: boolean
URxvt*loginShell: false
! URxvt*jumpScroll: boolean
! URxvt*skipScroll: boolean
! URxvt*pastableTabs: boolean
! URxvt*scrollstyle: mode
URxvt*scrollBar: false
! URxvt*scrollBar_right: boolean
! URxvt*scrollBar_floating: boolean
! URxvt*scrollBar_align: mode
! URxvt*thickness: number
! URxvt*scrollTtyOutput: boolean
! URxvt*scrollTtyKeypress: boolean
! URxvt*scrollWithBuffer: boolean
! URxvt*inheritPixmap: boolean
! URxvt*transparent: boolean
! URxvt*tintColor: color
! URxvt*shading: number
! URxvt*blurRadius: HxV
URxvt*fading: 40
URxvt*fadeColor: black
! URxvt*utmpInhibit: boolean
! URxvt*urgentOnBell: boolean
! URxvt*visualBell: boolean
! URxvt*mapAlert: boolean
! URxvt*meta8: boolean
! URxvt*mouseWheelScrollPage: boolean
! URxvt*tripleclickwords: boolean
! URxvt*insecure: boolean
! URxvt*cursorUnderline: boolean
! URxvt*cursorBlink: boolean
! URxvt*pointerBlank: boolean
URxvt*background: #161616
URxvt*foreground: #839496
!URxvt*color0: #000000
!URxvt*color1: #F35555
!URxvt*color2: #70CC78
!URxvt*color3: #F39166
!URxvt*color4: #6EADEF
!URxvt*color5: #B77BB7
!URxvt*color6: #54ABA7
!URxvt*color7: #909090
!URxvt*color8: #202020
!URxvt*color9: #F35555
!URxvt*color10: #70CC78
!URxvt*color11: #D2D265
!URxvt*color12: #75A8F0
!URxvt*color13: #BC71BC
!URxvt*color14: #72B5BE
!URxvt*color15: #FFFFFF
! URxvt*colorBD: color
! URxvt*colorIT: color
URxvt*colorUL: #75A8F0
! URxvt*colorRV: color
! URxvt*underlineColor: color
! URxvt*scrollColor: color
! URxvt*troughColor: color
! URxvt*highlightColor: color
! URxvt*highlightTextColor: color
URxvt*cursorColor: #626262
URxvt*cursorColor2: #FFFFFF
! URxvt*pointerColor: color
! URxvt*pointerColor2: color
! URxvt*borderColor: color
! URxvt*iconFile: file
URxvt.font: xft:DejaVu Sans Mono:size=10
URxvt.boldFont: xft:DejaVu Sans Mono:bold:size=10
! URxvt*italicFont: fontname
! URxvt*boldItalicFont: fontname
! URxvt*intensityStyles: boolean
! URxvt*inputMethod: name
! URxvt*preeditType: style
! URxvt*imLocale: string
! URxvt*imFont: fontname
! URxvt*title: string
! URxvt*iconName: string
URxvt*saveLines: 100000
! URxvt*buffered: boolean
! URxvt*depth: number
! URxvt*visual: number
! URxvt*transient-for: windowid
! URxvt*override-redirect: boolean
! URxvt*hold: boolean
! URxvt*externalBorder: number
! URxvt*internalBorder: number
! URxvt*borderLess: boolean
! URxvt*lineSpace: number
URxvt*letterSpace: -1
! URxvt*skipBuiltinGlyphs: boolean
! URxvt*pointerBlankDelay: number
! URxvt*backspacekey: string
! URxvt*deletekey: string
! URxvt*print-pipe: string
! URxvt*modifier: modifier
! URxvt*cutchars: string
! URxvt*answerbackString: string
! URxvt*secondaryScreen: boolean
! URxvt*secondaryScroll: boolean
! URxvt*perl-lib: string
! URxvt*perl-eval: perl-eval
URxvt*perl-ext-common: default,matcher
! URxvt*perl-ext: string
! URxvt*iso14755: boolean
! URxvt*iso14755_52: boolean
! URxvt*xrm: string
! URxvt*keysym.sym: keysym
! URxvt*background.border: boolean
! URxvt*background.expr: string
! URxvt*background.interval: seconds
! URxvt*bell-command: string
URxvt*matcher.button: 1
! URxvt*matcher.launcher: string
! URxvt*matcher.launcher.*: string
! URxvt*matcher.pattern.*: string
! URxvt*matcher.rend.*: string
! URxvt*remote-clipboard.fetch: string
! URxvt*remote-clipboard.store: string
! URxvt*searchable-scrollback: string
! URxvt*selection-autotransform.*: string
! URxvt*selection-pastebin.cmd: string
! URxvt*selection-pastebin.url: string
! URxvt*selection.pattern-0: string
! URxvt*tab-bg: colour
! URxvt*tab-fg: colour
! URxvt*tabbar-bg: colour
! URxvt*tabbar-fg: colour
URxvt*url-launcher: /usr/bin/xdg-open

Tout Youtube en HTML5 sous GNU/Linux avec Firefox et les site de Pr0n ! ! !

En discutant sur IRC, sur le canal #Archlinx-fr, notre cher Moviuro nous envoie ce sujet et nous demande si on a le même problème.
Je lui répond, que bien sûr, j'ai Youtube en 360p, car il doit me manquer des trucs à la con.

Et là je me suis dit, tien, il me doit manquer des dépendances optionnelles à Firefox.

Donc pour commencer, pour savoir ce qui vous manque comme fonctionnalités dans votre Firefox pour lire vos vidéos en 1080p sur Youtube, alle sur ce lien.

Pour moi, j'avais déjà les fonctionnalités "HTMLVideoElement" et "WebM VP8" déjà activé. Si vous avez pas ça, chercher sur l'Internet comment les activer.

Après il me manquait la fonctionnalités "H.264", et comme je me suis dit avant, il me manque des dépendances optionnelles et sous Archlinux, il faut les paquets gst-libav et gst-plugins-good (Si vous êtes sur une autre distribution, chercher plus ou moins ça comme nom de paquet pour les rechercher).

Nous y voilà avec la moitié des fonctionnalités activées.

Pour la suite il faut trifouiller dans about:config de votre Firefox pour activer quelques clefs.

Pour avoir "Media Source Extensions" et "MSE & WebM VP9", il faut mettre à Vrai media.mediasource.enabled et media.mediasource.webm.enabled.
Après, il reste plus à activer "MSE & H.264", pour cela, il faut mettre à Vrai, les clefs media.fragmented-mp4.exposed et media.fragmented-mp4.ffmpeg.enabled.

Et voilà, normalement après ça, vous pouvez lire les vidéos Youtube en 1080p avec du HTML5 ! Et si c'est pas le cas, vous avez dû vous foirez quelque part.

Note : D'après des discutions sur IRC, l'activation de ces clefs serai des "trucs" expérimentals et peuvent provoquer l'élévation anormal du processeur.
Et merci à Nheir, Spider-cochon, Moviuro et d'autre que j'oublie pour leur aide.

Re-Note : Pas obliger d'avoir les dépendances optionnelles pour activer "H.264", car en modifiant les clefs media.mediasource.webm.enabled et media.fragmented-mp4.ffmpeg.enabled, cette fonctionnalité s'active.

Re-Re-Note : Quand on a fait tout ça, il est possible de regarder des vidéos de Pr0n sans flash sur certain site \o/

Pélican sur orbite

Ça y est, Pélican est sur orbite ! Ou plutôt envoyé sur l'internet.

Nous y voilà, ici, je vais parler de choses qui m'intérresse et vous le faire partager.
Mais je vais surtout m'en servir comme calepin.

Comment est quoi, comment le bouzin?
Ce site est généré est le générateur de site statique Pelican, avec le serveur web Nginx, le tout sur un Archlinux Arm tournant sur une Banana Pi, et auto-hébergé chez moi.

Imprimer ses cartes IGN

Comme nous l'évoquons quelques fois ici, nous sommes amateurs de courses en montagnes de tout genres. Et en tous lieux, ce qui suppose un fond de cartes important. Certes il est possible d'en emprunter à la bibliothèque de notre section du CAF mais comme nous disposons d'une imprimante laser couleur nous nous contentons parfois de capturer la zone qui va bien sur Internet pour l'imprimer en A4.

Tout d'abord pour une course en montagne il est exclu d'utiliser autre chose qu'une carte IGN (pour la France) ou SwissTopo (pour la Suisse). Si vous aviez la moindre tentation d'utiliser autre chose nous vous invitons à lire l'avertissement situé sur le site (par ailleurs excellent) de FranceTopo.fr. Les sites qui reproduisent des itinéraires sur googlemap et autres simulacres de cartes topographiques devraient être mis en examen pour mise en danger de la vie d'autrui.

Mais revenons donc à nos impressions : il y a tout d'abord un site qui fait tout ça très bien, ou presque : JGN (notez le J à la plage du I). On sélectionne une échelle, un format, on centre la carte et roule ma poule. Le seul défaut est qu'il n'intègre pas le carroyage UTM et que son développeur a, selon ses propres dires, d'autres chats à fouetter. On n'en a pas forcement besoin mais c'est bien pratique si l'on dispose d'un GPS. Et comme on est là pour s'amuser  apprendre on va utiliser une autre solution.

À ma connaissance le seul site qui permette de rajouter une couche carroyage UTM est openrunner. Il faut créer un compte mais comme les adresses  type yopmail ou jetable.org sont acceptées ça ne pose pas trop de problème. Détail important : il faut l'ouvrir avec Firefox, nous verrons pourquoi plus loin.

Une fois connecté sur le site cliquez sur le bouton "Planifier un parcours". La seule chose qui nous intéresse pour le moment est la carte. Positionnez-vous où bon vous semble, choisissez "Topo IGN France" dans le menu des cartes (en haut à droite), amenez à l'échelle qui va bien (indicateur 200m en bas à droite) et activez le carroyage UTM 1km (barre d'outil de gauche.

Bon c'est pas mal mais la fenêtre est ridiculement petite. Il y a certes un bouton plein écran mais sauf avoir une résolution de malade ça restera insuffisant. Jusqu'à présent je me faisais patiemment mon petit montage de captures d'écran avec GIMP, façon puzzle, mais Antistress m'a appris ici une fonction très intéressante de Firefox : la possibilité de faire des screenshots via la barre de développement. Et des screenshots de la page entière, plus exactement de la fenêtre entière, et pas simplement de la partie visible à l'écran ce qui serait le cas avec les outils de capture ordinaires. Nous y reviendrons tout à l'heure.

Edit du 14/07 : lire les commentaires de Mathieu et de Viale ci-dessous pour une solution beaucoup plus simple et indépendante de l'OS pour la capture de la fenêtre.

Sous Linux rien ne s'oppose à ce que la fenêtre soit beaucoup plus grande que l'écran, par exemple 3000x2000 dans un écran de 1440x900 (avant cela la fenêtre ne doit pas être maximisée). Pour la manœuvrer il suffit de maintenir la touche alt de gauche enfoncée et de de déplacer la souris avec le bouton gauche. Par acquit de conscience j'ai essayé de faire la même chose sous Windows mais je n'y suis pas parvenu (il faut dire que mes connaissances de cet OS sont franchement limitées).

Bien sûr il est possible d'obtenir ce résultat à la main, en tirant sur les coins de la fenêtre, mais c'est long et fastidieux. Et comme souvent il y a un petit outils qui va bien pour automatiser tout ça, c'est wmctrl (dans community sous Archlinux, universe sous Ubuntu).

  • pour agrandir ⇒ wmctrl -r Firefox -e "0,0,0,3500,2500"
  • pour revenir à une taille"normale" ⇒ wmctrl -r Firefox -e "0,0,35,1500,800"

man wmctrl pour plus de précision. Le "35" pour revenir en taille normale c'est pour tenir compte de ma barre des tâches (tint2) qui est positionnée en haut de l'écran. À adapter en fonction de votre configuration.

Pour un confort optimal il suffit d'affecter un raccourci clavier à chacune de ces commandes (selon votre gestionnaire de bureau).

Retournons maintenant à la capture de la fenêtre : l'astuce consiste à lancer la console réservée aux développeurs, appelée « barre de développement » dans Firefox, qui est accessible soit par le menu, soit par le raccourci clavier Maj+F2. La console est positionnée au bas de la fenêtre, elle bénéficie de l'auto-complétion avec la touche tab et du rappel des dernières commandes avec la flèche du haut.

Saisissez alors la commande « screenshot votreFichier.png --fullpage » puis validez : la capture est alors sauvegardée directement dans le dossier des téléchargements.

Pour obtenir une carte au 1/25.000 il suffit maintenant de redimensionner l'image (par ex. avec gimp) et de l'imprimer en 180 DPI (points par pouce en français). La taille maximale dépendra des marges de votre imprimante. Pour ma HP CP1515 les dimensions maximales sont 2014 x 1412 pixels. Vérifiez le résultat : le carroyage UTM de 1km doit être de 4cm pour respecter l’échelle. Jouez sur la résolution d'impression si ce n'est pas le cas.

N.B. J'ai testé ceci sous Archlinux et Openbox mais je ne vois aucune raison pour que cela ne fonctionne pas dans tout autre environnement.

Vers la fin du RTFM ?

Les lecteurs de linuxfr l'auront noté au détours d'un commentaire de Xinfe : eg est, pour les cas les plus simples, une alternative séduisante à man. Si comme moi vous ne connaissez rien de plus ennuyeux que de devoir consulter des pages entières de manuel regorgeant d'options que vous n'utiliserez jamais alors qu'un simple exemple suffirait à votre bonheur alors eg est fait pour vous. 

Pour l'installer pas de souci sous Archlinux, le paquet est dans AUR, mais je n'en ai pas trouvé pour Ubuntu et dérivés

Les fichiers exemples sont stockés au format Markdown dans deux répertoires : celui par défaut, fourni par le paquet (/usr/lib/python3.4/site-packages/eg/examples/ sur mon ordi) et un éventuel répertoire personnalisé. Pour indiquer l'emplacement de ce dernier (et modifier éventuellement le chemin de celui par défaut) il faut créer un fichier ~/.egrc sous la forme suivante :

[eg-config]
examples-dir = /un_autre/répertoire/
custom-dir = ~/mon/répertoire/personnalisé

Pour créer un nouveau fichier d'exemple le plus simple est évidement de s'inspirer d'un fichier fourni avec le programme. Son nom sera composé du nom de la commande suivi de l’extension .md

On obtient la liste des fichiers exemples disponibles par l'option --list : eg --list

Ce qui donne initialement ifconfig whereis ls less cut which more ps whatis rm locate chmod find touch grep sudo xargs cat ln mv cd mkdir tr scp pwd kill od hexdump du cp chown sort curl awk su top tar wc gcc

Ironie de l'histoire il n'existe ni page man ni page eg consacrées à eg. Mais la documentation sur le site est assez claire (mais en anglais).

Pour ma part je me promets de contribuer prochainement en rédigeant une page sur la gestion des meta-données des photos avec exiv2. Y'a du boulot....

LockKeys 0.2

J'ai évoqué récemment mon besoin d'avoir une applet indicateur d'état du clavier (capslock et numlock) indépendante de l'environnement de bureau. Ne trouvant rien qui me satisfasse j'ai alors bidouillé un script en bash, mais avec dans un coin de ma tête l'idée que l'occasion était bien belle de me mettre enfin à Python. D'autant plus que j'utilise Battery Monitor (aka batterymon-clone) écrit en python2 et dont je me suis bien entendu largement inspiré.

Fonctionnement : une simple icône dans le systray avec un menu accessible par un clic droit

En option il est possible de jouer un son et/ou d'afficher une notification. Le jeux d'icônes et le fichier son doivent être installés pour l'instant dans /usr/local/share/lockkeys. Ils sont réunis dans cette archive.

Voici le code

#!/usr/bin/python2
# -*- coding: utf-8 -*-

#Todo mettre les messages sous forme de variable dans fichier à inclure <- internationalisation

import gtk
import glib
import os
import sys
import ConfigParser
import ctypes
try:
    import pynotify
    if not pynotify.init("LockKeys"):
        print("Il y a eu une erreur pendant l'initialisation du système de notification. Les notifications ne fonctionnerons pas.")
        pynotify = None
except:
    print("Il semble que python-notify ne soit pas installé. Les notifications ne fonctionnerons pas.")
    pynotify = None
NotifyAvailable = pynotify
 
class XKeyboardState(ctypes.Structure):
    _fields_ = [("key_click_percent", ctypes.c_int),
                ("bell_percent", ctypes.c_int),
                ("bell_pitch", ctypes.c_uint),
                ("bell_duration", ctypes.c_uint),
                ("led_mask", ctypes.c_ulong),
                ("global_auto_repeat", ctypes.c_int),
                ("auto_repeats", ctypes.c_char * 32)]
 
def initXGetKeyboardControl():
    global dpy, keyboardState, XGetKeyboardControl
   
    libX11 = ctypes.CDLL("libX11.so.6")
    XOpenDisplay = libX11.XOpenDisplay
    XOpenDisplay.restype = ctypes.c_void_p
    XOpenDisplay.argtypes = [ctypes.c_char_p]
    XGetKeyboardControl = libX11.XGetKeyboardControl
    XGetKeyboardControl.restype = ctypes.c_int
    XGetKeyboardControl.argtypes = [ctypes.c_void_p, ctypes.POINTER(XKeyboardState)]
   
    dpy = XOpenDisplay(None)
    keyboardState = XKeyboardState()
 
def runXGetKeyboardControl():
    global dpy, keyboardState, XGetKeyboardControl
    XGetKeyboardControl(dpy, ctypes.byref(keyboardState))
    return keyboardState.led_mask
 
#écrit dans le fichier de config    
def WriteConfig (Section, Key, Value):
    Config.set(Section,Key,Value)
    with open(ConfigFile, 'w') as myfile:
        Config.write(myfile)
 
#Notification (état du clavier) si pynotify != None
def notify(message,duration):
    if pynotify:
        n = pynotify.Notification('LockKeys', message)
        n.set_timeout(duration)
        n.set_icon_from_pixbuf(gtk.Label().render_icon(gtk.STOCK_DIALOG_INFO, gtk.ICON_SIZE_LARGE_TOOLBAR))
        n.show()
 
 
class Systray():
    def __init__(self):
        self.tray_object= gtk.StatusIcon()
        self.tray_object.connect("popup_menu", self.rightclick_menu)
        self.show_trayicon(1) ## fixed to one for now
        self._oldMask = -1 #int(runXGetKeyboardControl()) & 3
 
    def show_trayicon(self,value):
       self.tray_object.set_visible(True)
       return
 
    def property_modified(self):
        # utilse runXGetKeyboardControl() pour connaître l'état des touches capslock et numlock
        # 0 -> aucun, 1 -> capslock, 2-> numlock, 3 -> les 2
        mask=int(runXGetKeyboardControl()) & 3
        if mask != self._oldMask:
            if sound_status == True and self._oldMask != -1:
                os.system(Sound)
            notify(msg[mask],2000)
            self._oldMask = mask
            # Todo : essayer d'abord usr/share/lockkeys/ voire ~/.local/lockkeys
            icon_path = '/usr/local/share/lockkeys/' + str(mask) + '.png'
            self.tray_object.set_from_file(icon_path)
 
    # défini le menu clic droit sur l'icône
    def rightclick_menu(self, button, widget, event):
        menu = gtk.Menu()
        about_menu = gtk.ImageMenuItem(gtk.STOCK_ABOUT)
        about_menu.connect('activate', self.about)
        exit_menu = gtk.ImageMenuItem(gtk.STOCK_CLOSE)
        exit_menu.connect('activate', self.close)
        menu.append(about_menu)
        menu.append(exit_menu)
        sep = gtk.SeparatorMenuItem()
        menu.append(sep)
        sound_menu = gtk.CheckMenuItem("Activer le son")
        sound_menu.set_active(sound_status)
        sound_menu.connect("activate", self.sound_toggle)
        menu.append(sound_menu)
        notify_menu = gtk.CheckMenuItem("Activer les notifications")
        notify_menu.set_active(notify_status)
        notify_menu.connect("activate", self.notify_toggle)
        menu.append(notify_menu)
        menu.show_all()
        menu.popup(None, None, None, 2, event)
       
    # activation / désactivation du son et enregistrement dans le fichier config
    def sound_toggle(self, widget):
        global sound_status
        if widget.active:
            sound_status=True
        else:
            sound_status=False
        WriteConfig ('helpers','sound',sound_status)
 
    # activation / désactivation des notifications et enregistrement dans le fichier config
    def notify_toggle(self, widget):
        global notify_status
        global pynotify
        if widget.active:
            notify_status=True
            pynotify=NotifyAvailable
        else:
            notify_status=False
            pynotify=None
        WriteConfig ('helpers','notification',notify_status)
 
    def close(self,button):
        sys.exit(0)
 
    def about(self, button):
        about_dg = gtk.AboutDialog()
        about_dg.set_name('Lockkeys')
        about_dg.set_version('0.2')
        about_dg.set_copyright('(C) 2014 Vincent Gay <vgay@vintherine.org>')
        about_dg.set_comments(("Simple icône dans la zone de notification pour indiquer l'état de CapsLock et NumLock"))
        about_dg.set_license('Ce script est distribuable sous licence gpl version 3 ou supérieure\nhttp://www.gnu.org/licenses/gpl-3.0.fr.html')
        about_dg.set_website('http://blog.vintherine.org')
        about_dg.run()
        about_dg.destroy()
 
class Manager:
    def __init__(self):
        self.listener = Systray()
       
    def __property_modified_handler(self):
        self.listener.property_modified()
 
    def update(self):
        self.__property_modified_handler()
        return True
 
def main():
    initXGetKeyboardControl()
    m = Manager()
    glib.timeout_add(200, m.update)
    gtk.main()
 
ConfigFile=os.path.expanduser('~/.config/lockkeys.cfg')
# aplay appartient au paquet alsa, est-ce la peine de vérifier ?
Sound = 'aplay /usr/local/share/lockkeys/ding.wav > /dev/null 2>1&'
sound_status=True
pynotify = None
Config = ConfigParser.ConfigParser()
msg=[]
msg.append('Capslock = off, Numlock = off')
msg.append('Capslock = on, Numlock = off')
msg.append('Capslock = off, Numlock = on')
msg.append('Capslock = on, Numlock = on')
 
#créer le fichier de config s'il n'existe pas
if os.path.isfile(ConfigFile) == False:
    ini = open(ConfigFile,'w')
    Config.add_section('helpers')
    Config.set('helpers','sound',True)
    Config.set('helpers','notification',False)
    Config.write(ini)
    ini.close()
 
# lire le fichier de configuration    
Config.read(ConfigFile)
try:
    sound_status = Config.getboolean("helpers", "sound")
except:
    WriteConfig ('helpers','sound',True)
try:
    notify_status = Config.getboolean("helpers", "notification")
except:
    WriteConfig ('helpers','notification',False)
    notify_status=False
if notify_status:
    pynotify=NotifyAvailable
   
main()

Si l'indentation n'est pas propre suite au copié collé merci de prendre le code sur pastebin

Dépendances :

  • python2
  • gtk2
  • pygtk
  • python2-notify (optionnel)
  • aplay (installé par alsa donc en principe présent)

Il me reste toutefois un point me chiffonne avec cette solution : le timeout qui gère l'appel à gtk. S'il est trop haut il y a un décalage entre l'appui sur les touches et le changement d'icône. S'il est trop bas la charge cpu, quoique supportable, excède 1%. Ce qui me paraît beaucoup pour une simple applet. Avec un compromis à 400 ms la charge ressort à 0,7% (Intel Pentium 2020M 2.4Ghz double cœur).

edit : problème résolu grâce aux conseils de Benjarobin. Le code ci-dessus a été modifié en conséquence.

Voilou, Il reste encore du boulot pour rendre l'application présentable mais c'est mon premier script python : ça s'arrose :-)

Chez moi ça fonctionne correctement mais si quelqu'un d'autre voulait bien tester ça serait sympa.

yaourt paginé et en couleur

extrait du wiki de archlinux.fr :

Yaourt est un programme en ligne de commande qui interface les fonctions de pacman et makepkg pour la gestion des paquets sous Arch Linux.

Cet outil bien connu des archers est particulièrement utile dans son mode interactif combinant recherche et installation (qui est du reste le mode par défaut). Pour les débianeux essayez d'imaginer un apt-cache search en couleur vous permettant de sélectionner dans le résultat le ou les paquet(s) à installer (peut-être cela existe-t-il).

Toutefois la recherche s'effectuant tant sur le nom du paquet que sur sa description, et intégrant d'office tous les paquets du dépôt des utilisateurs AUR, le nombre de lignes résultant peut vite devenir important. Et même gênant car le plus souvent ce qui nous intéresse est au sommet de la liste, provenant des dépôts officiels (core, extra, community, multilib) quand les dernières lignes que nous voyons, au moment de saisir le numéro des paquets à installer, ne contiennent que des paquets AUR. Dans un émulateur de terminal en mode graphique c'est le recours assuré à l'ascenseur ou à la molette !

Une solution est la pagination en utilisant une commande comme more, less ou most. Il existe pour cela l'option --pager. Extrait de la page man :

--pager
           Use $PAGER to show search results.

Il faut donc préalablement définir $PAGER :

export PAGER=less

ainsi la commande yaourt --pager monpaquet vous permettra de naviguer dans la liste avec les touches de paginations. Il suffira d'appuyer sur la touche q pour sortir de less et de se voir demander de saisir sa sélection.

Parfait.... mais il y a encore un petit quelque-chose à régler : la sortie n'est plus en couleur, l'option --pager désactivant cette caractéristique. Elle peut se rétablir avec l'option --color mais il faut alors demander à less d'autoriser les caractères spéciaux, ce qui se fait par l'option -r ⇒ export PAGER="less -r"

Et comme la commande finale (yaourt --color --pager) est un peu longue je me suis fait un alias et j'ai mis tout ça dans mon .bashrc :

export PAGER="less -r"
alias fromage="yaourt --color --pager"

Slides du Premier Meetup Archlinux France

Ce 21 Octobre a eu lieu le premier meetup Archlinux France, dans les locaux d’Arkena à Paris.

Deux sujets étaient à l’ordre du jour :

  • Présentation de la communauté Archlinux.fr ( par moi même )
  • Gestion de serveurs sous Archlinux ( par seblu )

35 personnes étaient présentes, ce qui est pas mal pour une première sans trop de communication (on commence doucement !)

Les discussions ont été très intéressantes, avec la présence de plusieurs developpeurs Archlinux, entre autres Guillaume , Remy , et bien sur Seblu (qui a organisé tout ça !)

Voici mes slides, présentant Archlinux.fr, son histoire, ses projets, ses besoins. Vous pouvez d’ailleurs aussi relire ce post d’il y a quelques mois).
Seblu devrait partager les siens prochainement :) :

Merci à tous les présents, et à bientôt pour la prochaine session !

Remplacer Dropbox par ownCloud

J'ai évoqué dans un précédent billet les raisons incitant au passage de Dropbox à ownCloud. Je n'y reviendrai pas, une simple recherche « Dropbox polémique » dans votre moteur de recherche habituel vous permettra de vous faire votre propre idée.

OwnCloud étant un produit libre vous pouvez évidement l'installer sur votre propre serveur, si possible auto-hébergé. Ceci est hautement recommandable d'un point de vue libriste mais pas toujours réalisable (qualité de la connexion, disponibilité matérielle et humaine....) et n'est pas l'objet de cet article. Pour le besoin de ce test j'ai utilisé les services d'un hébergeur spécialisé à savoir la mère Zaclys. Vous pouvez naturellement en choisir un autre, par exemple sur cette liste publiée sur le site de ownCloud.

Description de l'offre

La mère Zaclys est une association loi de 1901 proposant un certain nombre de services dont un lecteur de flux, un album photo, un envois de gros fichiers (pièces jointes d'e-mail)... et un cloud. L'offre de ce dernier est très modulaire et évolutive allant de 0€ pour 1Go au serveur dédié. J'ai choisi pour ma part d’adhérer à l'association pour une cotisation de 9,60€/an, ce qui me donne droit à 10Go de cloud. À ce prix là faut pas se gêner. En fait si, il faut se souvenir que c'est une association et pas un supermarché, et que chacun à sa manière peut tenter de se rendre utile.

Pour en savoir plus ça ce passe sur cette page. N'oubliez pas d'activer votre cloud après votre adhésion : c'est deux processus différents.

Interface web

Vous pouvez vous loguer sur le web à l'adresse https://webcloud6.zaclys.com/. Cela permet d’accéder à ses données depuis n'importe quel appareil connecté, même si ce n'est pas le vôtre (amis, cybercafé, boulot...). La page par défaut est votre espace de stockage mais un menu en haut à gauche vous permettra d'accéder aux différentes ressources disponibles.

À la racine de votre espace de stockage vous trouverez une documentation au format pdf de 80 pages, malheureusement en anglais. Pour les anglophobes il y a une documentation plus restreinte sur le site de Zaclys.

Dans la partie fichiers on notera la possibilité de récupérer des fichiers effacés ou revenir à une version antérieure. Il est également et évidemment possible de partager des fichiers, soit en envoyant un lien (avec ou sans mot de passe) soit en spécifiant les utilisateurs. J'aurai aimé trouver ces possibilités de partage directement intégrés dans les navigateurs de fichiers, à l'instar de dolphin-dropbox-plugin, mais mes recherches sont pour l'instant restées vaines. OwnCloud étant l'œuvre d'un développeur KDE on peut espérer que cela viendra vite.

À partir de la version 7 de ownCloud server produit une page web "responsive design", c'est à dire qui s'adapte à tous types d'écran. Ceci est particulièrement intéressant pour les utilisateurs de Firefox OS, système d'exploitation basé sur les technologies web et qui ne dispose pas (encore) d'un client spécifique.

Synchronisation des données (mise en place du client)

Vous trouverez certainement dans votre distribution un paquet owncloud-client qu'il suffira d'installer. Pour Archlinux il est dans AUR. Pour Windows, MacOS, Android et Ios (ainsi que Debian, CentOS, Fedora, Suze et Ubuntu) vous trouverez votre bonheur sur cette page.

Une fois l'installation terminée initialisez la connexion en lançant l'application soit en ligne de commande (owncloud) soit par l’icône dans le menu qui va bien (chez moi c'est dans accessoire et non pas dans réseau comme on aurait pu s'y attendre). Vous aurez à renseigner le serveur (ici https://webcloud6.zaclys.com), votre identifiant et votre mot de passe, ainsi que le dossier local que vous voulez synchroniser.

Serveur Identifiant Local Connexion

L'icône de owncloud apparaît alors dans la zone de notification (systray). Un clic gauche vous permettra d'afficher l'état de votre compte et de régler quelques paramètres

Compte Activité Généraux Réseau

Le premier panneau (compte) vous permettra notamment de connaître votre taux d'occupation. Dans le troisième (généraux) j'ai coché les cases "lancer au démarrage" et "afficher les notifications".

Un clic du bouton droit permet, notamment, d'ouvrir sa page owncloud dans le navigateur web et son dossier de fichier. Attention : les navigateurs utilisés sont définis par les propriétés de xdg-settings. Si vous utilisez un environnement de travail reconnu, comme Gnome, KDE, XFCE ou LXDE, pas de problème. Mais si, comme moi, vous n'utilisez qu'un simple gestionnaire fenêtre (openbox par exemple) il faudra les définir dans votre .xinitrc. Par exemple :

 

export DESKTOP_SESSION=LXDE
export BROWSER=firefox

Synchronisation avec un carnet d'adresse

Avec Thunderbird

Le carnet d'adresse de Thunderbird ne fonctionne pas nativement avec Carddav, il faut donc passer par une extension, SOGo Connector. Une fois celui-ci téléchargé et installé (et Thunderbird redémarré) il vous faut récupérer l'URL du carnet d'adresse de ownCloud sur la page web consacrée aux contacts. Tout en bas à gauche cliquez sur l'icône en forme de roue dentée puis ,sur la ligne correspondant au carnet d'adresse de votre choix, cliquez sur l'icône en forme de maillons et copiez l'adresse qui apparaît. Il ne reste plus qu'à afficher le carnet d'adresses de Thunderbird et appeler le menu Fichier → Nouveau → Carnet d'adresse distant. Choisissez un nom, collez l'adresse préalablement copiée sur la ligne URL et réglez les autres paramètres à votre convenance.

Si vous souhaitez profiter pleinement des propriétés des contacts carddav, et notamment des catégories, il vous faudra une extension supplémentaire : CategoryManager. Ce sera particulièrement utile pour vous retrouvez dans un carnet de plusieurs centaines d'adresses

Avec Evolution

Pas de souci, Evolution utilise nativement carddav, l'adresse à coller dans la zone URL est celle récupérée comme indiqué ci-dessus pour Thunderbird. Il vous faudra juste ajuster manuellement les catégories de contact que vous utilisez car si elle sont bien reconnues leur liste n'est pas importée (menu Édition → Catégories disponibles). Pensez à cocher l'option qui va bien ("copier localement le contenu du carnet...") si vous pensez avoir à consulter des adresses sans connexion internet. Par ailleurs Gnome-Keyring doit être installé pour gérer les mots de passe.

Avec Kaddressbook (KDE)

Comme Evolution kaddressbook utilise nativement carddav, par contre je n'ai vu nulle part comment gérer les catégories. Peut-être ai-je mal regardé ? D'une manière générale tout ce qui me paraît simple ailleurs me paraît long et compliqué avec la suite kmail. Voilà la suite d'écran par laquelle je suis passé.

Sur le 3ème écran il y a la possibilité de choisir owncloud mais je suis passé par une configuration manuelle. Voir ce tuto sur le web de Zaclys.

Avec un webmail (RoundCube)

J'utilise RoundCube lorsque je ne suis pas chez moi pour me connecter sur mon adresse sur le serveur de Gandi. Dans cette situation aussi une synchronisation du carnet d'adresse s'avérerait très utile. Malheureusement il s'avère qu'un plugin soit nécessaire et qu'en l’occurrence il n'est pas installé. Le sujet a été déjà évoqué sur Gandi Groupes mais est resté sans réponse.

J'ai donc été très intéressé de voir que Zaclys proposait une adresse mail (en beta test). Ici encore le plugin n'était pas installé mais il m'a été répondu ok on ajouteà la liste des plugin roundcube à activer

Affaire à suivre donc.

Synchronisation avec un calendrier

Avec Thunderbird (Lightning)

Il n'y a pas de calendrier nativement avec Thunderbird, mais ici encore une extension : lightning. Celle-ci accepte les connexions caldav et la procédure est très simple. Tout d'abord récupérer l'URL du calendrier à synchroniser sur l'interface web (même principe que pour le carnet d'adresse, voir plus haut), puis un clic droit dans la zone d'agendas de lightning → Nouvel agenda → suivre les instructions. Une page de tuto est consacrée à ce sujet sur le site de zaclys.

Avec Evolution

Même principe que pour le carnet d'adresse, caldav fonctionne nativement avec Evolution.

Avec korganizer (KDE)

Même principe que pour le carnet d'adresse, caldav fonctionne nativement avec korganizer.

Synchronisation avec les smartphones

Je n'ai pas (encore) de smartphone mais d'après ce que j'ai lu il y a des solutions webdav, carddav et caldav pour Android et pour Ios. Cela semble un poil plus complexe pour Firefox OS, notamment en ce qui concerne les contacts, mais faisons confiance à la communauté pour que ce besoin soit vite pris en compte.

TouchpadToggle : Gestion du touchpad

Le touchpad, je ne m'en sers que quand je ne peux pas faire autrement, c'est-à-dire quand je n'ai pas de souris. Par contre quand il est actif il me gène plus qu'autre chose et l'activité des mains sur le clavier provoque bien des erreurs. Il y a bien une touche de fonction prévue à cet usage sur mon ordinateur mais elle ne fonctionne pas nativement dans mon environnement de travail (Archlinux Openbox). Aussi je l'avais tout simplement (et paresseusement) désactivé en mettant dans mon autostart la première commande trouvée sur le web :
$ /usr/bin/synclient TouchpadOff=1 &

Curieusement cela n'affecte que le déplacement du pointeur, mais pas l'activité des boutons. ClickPad=0 résolvait partiellement le problème (le simple clic, mais pas le double) mais la recherche commençait à devenir pénible et je sentais bien que si je voulais une solution pérenne il me fallait reprendre le problème à la base. En l’occurrence la base c'est xorg (tant que Wayland n'aura pas définitivement remplacé xorg), et ça tombe bien, chez xorg ils ont commis un petit outil en ligne de commande pour gérer les périphériques d'entrée : xinput (que vous trouverez dans le paquet xorg-xinput de toutes les bonnes distributions).

Voici donc ma démarche et le petit script qui en résulte (voir à la fin de l'article). À adapter en fonction des besoins et du matériel.

Les objectifs :
  • fonctionner en bascule pour être intégré avec la susdite touche de fonction
  • détecter la présence ou non d'une souris au démarrage de ma session et désactiver le touchpad en fonction
  • afficher le résultat sous forme de notification
  • tout ceci indépendamment de l'environnement graphique

Vérifier les dépendances

avant toute chose vérifier que xinput est disponible, sinon ce n'est pas la peine d'aller plus loin.

if ! command -v xinput >/dev/null; then
    notify-send
--icon=dialog-error -t 7000 $Titre "Dépendance xorg-xinput non trouvée" 2>/tmp/touchpadError
     exit 1
fi

Pour bénéficier des notifications il faut que libnotify soit installé (voir ci-dessous) mais le message d'erreur éventuel sera enregistré dans /tmp

Prise en main de xinput

la commande xinput sans paramètre liste les périphériques détectés. Voici ce que cela donne chez moi :

[vincent@Astor ~]$ xinput
⎡ Virtual core pointer                            id=2    [master pointer  (3)]
⎜   ↳ Virtual core XTEST pointer                  id=4    [slave  pointer  (2)]
⎜   ↳ Logitech USB Receiver                       id=10    [slave  pointer  (2)]
⎜   ↳ Logitech USB Receiver                       id=11    [slave  pointer  (2)]
⎜   ↳ ETPS/2 Elantech Touchpad                    id=15    [slave  pointer  (2)]
⎣ Virtual core keyboard                           id=3    [master keyboard (2)]
    ↳ Virtual core XTEST keyboard                 id=5    [slave  keyboard (3)]
    ↳ Power Button                                id=6    [slave  keyboard (3)]
    ↳ Video Bus                                   id=7    [slave  keyboard (3)]
    ↳ Video Bus                                   id=8    [slave  keyboard (3)]
    ↳ Sleep Button                                id=9    [slave  keyboard (3)]
    ↳ USB2.0 HD UVC WebCam                        id=12    [slave  keyboard (3)]
    ↳ Asus WMI hotkeys                            id=13    [slave  keyboard (3)]
    ↳ AT Translated Set 2 keyboard                id=14    [slave  keyboard (3)]

Les renseignements qui nous intéressent sont le nom et l'identifiant. Ici on peut voir mon touchpad (ETPS/2 Elantech Touchpad, id=15) et ma souris (Logitech USB Receiver, id=10 et 11).

Pour aller plus loin une lecture de man s'impose. Les commande pour activer et désactiver un périphérique sont :

$ xinput enable identifiant
$ xinput disable identifiant

Arf... et évidement l'identifiant peut changer d'un boot à l'autre. Il faudra donc le lire. Quelque chose comme

DevID=$(xinput | grep "$NomTouchpad" | cut -d"=" -f2 | cut -d $'\x09' -f1)

ou $NomTouchpad contient le nom du périphérique (ici ETPS/2 Elantech Touchpad)

Évidement si l'on ne trouve pas de touchpad (désactivé dans le BIOS ?) on s’arrêtera là :

if [[ -z $DevID ]]; then
    notify-send
--icon=dialog-info -t 5000 $Titre "Touchpad non trouvé"
    exit
0
fi

Pour savoir l'état d'un périphérique (actif ou nom) la commande est

$ xinput list-props identifiant

Le résultat donne ceci (c'est la 2ème ligne qui nous intéresse) :

$ xinput list-props 15
Device 'ETPS/2 Elantech Touchpad':
    Device Enabled (135):    0
    Coordinate Transformation Matrix (137):    1.000000, 0.000000...etc.

ici la ligne "Device Enabled (135) : 0" nous indique que le touchpad n'est pas actif. Pour isoler la variable on peut faire quelque chose comme ça :

Enabled=$(xinput list-props $DevID | grep Enabled | tail -c2)

Il suffit donc de tester cette variable pour connaître la commande à lancer. Voilà pour le fonctionnement en bascule.

Automatiser la désactivation au démarrage si une souris est détectée

Autant pour la détection du touchpad on peut estimer que le matériel n'évoluera pas pendant la durée de vie de l'ordinateur, autant on peut considérer que changer de souris, ne serait-ce qu’occasionnellement, ça doit pouvoir s'envisager. Donc repérer le périphérique par son nom ne semble pas une bonne idée.

En revanche si l'on observe la liste issue de la commande xinput ci-dessus on voit que la rubrique Virtual Core Pointer ne contient d'autre matériel que le touchpad et la souris. Donc si l'on ne retient que les lignes contenant le mot "pointeur" et ne contenant pas le mot "Virtual", et qu'il y en a au moins 2, ce serait bien le diable s'il n'y avait pas une souris la dedans. Il y a d'autres solutions possibles, notamment lsusb ou lshw, mais outre que cela créerait une dépendance supplémentaire, je n'ai pas trouvé de formulation aussi simple.

Pour savoir si le script est appelé au démarrage on recherchera un paramètre d'appel que l'on aura placé sur la ligne de commande. Et si oui on ne le poursuivra que dans la mesure ou on supposera l'existence d'une souris.

if [[ $1 == "autostart" ]]; then
     if (( $(xinput | grep pointer | grep -vc Virtual) < 2 )); then exit 0; fi
fi

Si le touchpad a été désactivé par erreur un simple appel de la touche de fonction associé le rétablira.

En matière d'autostart la solution la plus standard me semble la création d'un fichier desktop dans $XDG_CONFIG_HOME/autostart/ (généralement ~/.config/autostart). Ça devrait ressembler à ça  :

[Desktop Entry]
Name=TouchpadToggle
GenericName=Touchpad Toggle
Comment=Activation désactivation du touchpad
Exec=touchpadtoggle autostart
Terminal=false
Type=Application
Categories=System;
StartupNotify=false

À noter le paramètre autostart passé sur la ligne de commande et évoqué plus haut pour distinguer l'appel initial d'un appel par la touche de fonction.

Gestion des notifications

Bon, ce n'est pas essentiel, mais tant qu'à faire... La dépendance à installer est libnotify, qui est également dans toutes les distributions. La commande est

$ notify-send [-i icon] [-t millisecondes] [titre] message

Les icônes seront nommées selon les spécification de la freedesktop organisation. Le rendu pourra être différent d'un environnement à l'autre et je ne l'ai testé que sous OpenBox et KDE, j'espère que ça marche partout.

Association à une touche de fonction

Bien sûr il est aisé d'utiliser les raccourcis clavier de l'environnement de bureau que l'on utilise, mais puisque l'on recherche une solution qui marche partout on préférera Xbindkeys. Ça marche avec toutes les touches de fonction et c'est indépendant des environnement de bureau. Après installation (paquet disponible dans toutes les distributions) pensez immédiatement à créer un fichier de configuration vide à la racine de votre répertoire personnel sans quoi vous auriez un message d'erreur à la première utilisation.

$ touch ~/.xbindkeysrc

Ensuite il faut définir la touche à utiliser. Dans mon cas fn→F9

$ xbindkeys -k

Cela provoque l'ouverture d'une petite fenêtre blanche et l'invite à choisir une clef ou une action souris. À la suite de quoi le résultat s'affichera dans le terminal sous cette forme :

You can use one of the two lines after "NoCommand"
in $HOME/.xbindkeysrc to bind a key.
"(Scheme function)"
m:0x10 + c:199
Mod2 + XF86TouchpadToggle

Plus clairement cela nous convie à éditer le fichier de config (~/.xbindkeysrc) et à saisir successivement la commande à exécuter et la clef associée, soit sous forme de couple modificateur / N° de clef (ici m:0x10 + c:199), soit sous forme de nom symbolique (Mod2 + XF86TouchpadToggle). Dans mon cas l'une des deux formules suivante :

# Activation / désactivation du touchpad
"touchpadtoggle"
m:0x10 + c:199

ou encore

# Activation / désactivation du touchpad
"touchpadtoggle"
Mod2 + XF86TouchpadToggle

enfin n'oubliez pas de rajouter xbindkeys avant la ligne qui démarre votre gestionnaire de fenêtre dans votre ~/.xinitrc

Récapitulatif

Si la solution vous intéresse :
  1. Installez si ce n'est déjà fait xorg-xinput, xbindkey et libnotyfy.
  2. Copiez le script ci-dessous dans un répertoire figurant dans votre $PATH (/usr/local/bin semble approprié), nommez le touchpadtoggle et rendez le exécutable (chmod +x /usr/local/bin/touchpadtoggle)
  3. Exécutez xinput et repérez la ligne correspondant à votre touchpad. Personnalisez le script en modifiant le contenu de la variable NomTouchpad
  4. Créez un touchpadtoggle.desktop dans votre répertoire ~/.config.autostart avec les données ci-dessus si vous souhaitez une désactivation automatique à l'ouverture de votre session.
  5. Créez un .xbindkeysrc vide dans votre Home et rajoutez xbindkeys dans votre ~/.xinitrc
  6. Lancez la commande $ xbindkeys -k et récupérer le code de la touche que vous voulez associer au script puis éditez votre .xbindkeysrc en conséquence.

Voilà, j'espère que je n'ai rien oublié, chez moi ça marche impeccablement. Dans tous les cas je serais heureux d'avoir votre retour.

Le script

#! /bin/bash 
######################################################
## TouchpadToggle                                   ##
## Gestion du touchpad avec xinput                  ##
##                                                  ##
## copyleft vgay at vintherine dot org              ##
## version 0.2 du 20140918                          ##
##                                                  ##
## dépendance obligatoire : xorg-xinput             ##
## dépendance optionelle libnotify                  ##
## et xbindkey pour associer ce script à une touche ##
######################################################

### Personnalisation -> mettez ici le nom de votre touchpad tel que trouvé avec la commande xinput.
NomTouchpad="ETPS/2 Elantech Touchpad"
### Début du script

IFS=
$'\n'
if
! command -v xinput >/dev/null; then notify-send --icon=dialog-error -t 7000 $Titre "Dépendance xorg-xinput non trouvée" 2>/tmp/touchpadError exit 1 fi
Cde[0]=
"xinput enable " Cde[1]="xinput disable " Msg[0]="Touchpad désactivé" Msg[1]="Touchpad activé" Titre="Gestion du touchpad :"
DevID=$(
xinput | grep "$NomTouchpad" | cut -d"=" -f2 | cut -d $'\x09' -f1) if [[ -z $DevID ]]; then notify-send --icon=dialog-information -t 5000 $Titre "Touchpad non trouvé" exit 0 fi
Enabled=$(
xinput list-props $DevID | grep Enabled | tail -c2)
if [[
$1 == "autostart" ]]; then if (( $(xinput | grep pointer | grep -vc Virtual) < 2 )); then exit 0; fi fi
Message=$(
eval ${Cde[$Enabled]}$DevID 2>&1) Enabled=$(xinput list-props $DevID | grep Enabled | tail -c2) if [[ -z $Message ]]; then notify-send --icon=dialog-information -t 5000 $Titre ${Msg[$Enabled]} else notify-send --icon=dialog-error -t 7000 $Titre $Message fi

Le chiffrement des données sur le cloud (pour les nuls)

Une affaire des photos de stars volées sur Icloud a fait quelques bruits récemment. Et comme toujours un déchaînement de commentaires tous plus beaufs les uns que les autres :

  • bien fait pour elles, n'avaient qu'à pas faire des photos cochonnes
  • bien fait pour elles, n'avaient qu'à pas utiliser icloud
  • bien fait pour elles, z'avaient qu'à mieux protéger leur données
  • ...

Bon, on ne va pas ici faire des commentaires sur les commentaires !

Par contre on peut sans doute faire un lien avec d'autres affaires qui ne firent pas autant de bruit, si ce n'est dans la communauté libriste :

Voila qui, dans un cas comme dans l'autre, apporte de l'eau au moulin des logiciels libres, tels EncFS pour le chiffrement ou Owncloud pour la synchronisation des données en ligne. L'utilisation de ce dernier fera l'objet d'un futur article, mais signalons dès à présent qu'il existe de nombreux hébergeurs offrant ce service. Et revenons au chiffrement.

EncFS est un système de fichiers chiffrés extrêmement simple à installer et à utiliser. Conçu initialement pour Linux, il est également porté sous Windows, sous Mac et sous Android.

Principe de fonctionnement

EncFS chiffre / déchiffre à la volée des données d'un répertoire en clair vers / depuis  un répertoire chiffré dédié à partir duquel il est monté.

Dans la pratique imaginons que vous désiriez protéger des données sensibles sur Dropbox. Avec EncFS vous créerez un (ou plusieurs) répertoire(s) chiffré(s) (par ex: ~/Dropbox/Private) auquel vous accéderez à travers un répertoire en clair monté en local dans l'espace utilisateur (par ex: ~/Secret). Quand celui-ci est démonté il apparaît vide.

Avantages et limitations

Contrairement à Truecrypt EncFS n'utilise pas de conteneur et chiffre directement les fichiers. En matière de sauvegardes incrémentielle et de synchronisation c'est clairement un avantage : il n'est pas nécessaire de transférer tout le conteneur à chaque écriture. Par contre cela a quelques inconvénients :

  • Cela ne permet pas le déni plausible (cacher un conteneur dans un autre).
  • le dossier de stockage est visible et si le nom des fichiers est caché le nombre de fichiers, leur taille et les droits d'accès ne le sont pas.
  • Selon un audit du 5 février 2014

    "EncFS est probablement sans danger tant que l'adversaire n'obtient qu'une copie du texte chiffré et rien de plus. Il est bien moins sûr si l'adversaire a la possibilité de voir deux ou plusieurs instantanés du texte chiffré à des moments différents"

Bref, si votre besoin est ne mettre les données de votre organisation syndicale ou politique à l'abri de la NSA, EncFS sera clairement un outil insuffisant. Par contre si vous souhaitez seulement protéger vos données personnelles de votre employeur, ou les photos de votre petite amie des paparazzi, cela devrait parfaitement convenir.

Installation et mise en œuvre

Les principales distributions comprennent généralement un paquet de EncFS. Les dépendances (essentiellement fuse) seront automatiquement installées si besoin.

Pour Debian et dérivées
$ sudo apt-get install encfs
Il est semble-t-il nécessaire que l'utilisateur appartienne au groupe fuse
sudo addgroup $USER fuse

Pour Archlinux il est dans le dépot community
$ yaourt -Sy encfs (ou $ sudo pacman -Sy encfs)

Il suffit ensuite d'évoquer encfs pour créer le système de fichier proprement dit ainsi que son point de montage en clair. Si les dossiers n'existent pas il vous sera proposé de les créer (ce qui est une bonne idée).
encfs ~/repertoire/chiffré ~/point/de/montage/en/clair
Dans notre exemple :
encfs ~/Dropbox/Private ~/Secret

On acceptera ensuite les valeurs proposées, par défaut, notamment l'option paranoïa (sinon man encfs pour plus d'option). Puis on prendra le plus grand soin à choisir un mot de passe unique, suffisamment long et compliqué.

Une fois les dossiers créés c'est la même commande (encfs ~/repertoire/chiffré ~/point/de/montage/en/clair) qui permettra le montage du répertoire. Pour le démonter on en utilisera une autre, bien connue des utilisateurs de fuse : fusermount -u /point/de/montage/en/clair.

Interface graphique

Une petite application bien sympathique permet de gérer ceci graphiquement, Cryptkeeper. Elle est présente dans Archlinux (AUR), dans les Debian et dérivées et se loge tout simplement dans la zone de notification (systray)

Une fenêtre des préférences (clic droit) permet de régler quelques paramètres.

(1) ex-secrétaire d'État américaine sous George Bush, impliquée dans les écoutes de la NSA et dans les actes de torture pendant la guerre en Irak.

Archlinux.fr passé, présent, futur

Archlinux.fr est le principal site francophone autour de la distribution Archlinux. Comme tout site animé par une communauté, il a subi des hauts et des bas au niveau de son activité. Je vais tenter de faire un état des lieux et des projets futurs.

D’abord, un petit “About me”, je suis dans l’aventure archlinux.fr depuis le quasi début (septembre 2006), et admin depuis cette époque. Je me suis co-occupé de la partie serveurs/miroirs toutes ces années (c’est mon métier après tout), et me retrouve à l’heure actuelle le dernier admin actif. D’ou ce blogpost :)

Archlinux.fr existe depuis aout 2006, suite à une scission d’ avec archlinuxfr.org (maintenant disparu) après plusieurs désaccords, un fork comme on les connait dans le monde du libre (je suis arrivé à ce moment là).

Archlinux.fr, c’est

  • Un portail, qui traduit généralement les news en français, et menant vers les autres ressources
  • Un forum d’entraide en français, ayant plusieurs milliers d’inscrits (pas tous actifs ;))
  • Un wiki
  • Un chan IRC #archlinux-fr sur freenode
  • Un miroir officiel
  • Un miroir fournissant des delta
  • AFUR, un “AUR” à la française, ou vous pouvez proposer vos paquets précompilés, utilisables via archlinuxfr
  • Un planète regroupant quelques blogs français
  • Et l’un des softs les plus connus d’archlinux : yaourt !

Le tout tourne sur 2 serveurs dédiés + un mutualisé, évidemment les dédiés tournent sur archlinux, avec un kernel linux-lts ;)

  • Un pour le site/wiki/forum
  • Un pour la partie miroir/afur
  • Le mutu pour les mails/dns/historiquement :)

Les projets en cours / à venir

  • Léger redesign du site/wiki (resynchronisation avec le design du .org)
  • A venir un redesign du forum ! (si Mike se motive)
  • Mise en place du support des signature de paquets sur [archlinuxfr] (disponible depuis pacman 4)
  • Trouver un vrai mainteneur pour yaourt (j’y reviens plus loin)
  • Tout passer en https par défaut (déjà disponible, mais pas forcé, merci globalsign pour le certificat !)
  • Pourquoi pas ajouter un miroir archlinuxarm

Yaourt, la bonne crème

Yaourt est une surcouche à Pacman, le gestionnaire de paquets d’archlinux. C’est l’une des plus vieilles surcouches encore en activité, et je pense la plus utilisée (enfin, moins depuis 2/3 ans). Écrit au départ par Wain (un des fondateurs de archlinux.fr), entièrement en bash, il a ensuite été réécrit et splitté en 2 parties par notre ami Tuxce.

  • package-query en C, pour toute la partie alpm / aur
  • yaourt en bash pour l’interface utilisateur

Package-query a grandement aidé à améliorer la vitesse d’exécution de yaourt.
Malheureusement depuis environ 1-2 ans, yaourt évolue très peu, par faute de mainteneur (wain et tuxce ayant d’autres priorités personnelles). Son code source est disponible sur github, il y a plusieurs bugs ouverts et des pull request en cours. Il y a donc besoin de bras pour cette partie ! Donc si vous vous sentez l’âme d’un mangeur de yaourt, la porte est ouverte :) Vous pouvez me contacter soit dans les commentaires, soit sur IRC, soit par mail, twitter etc pour en discuter.
J’ écrirai une version anglais à ce propos afin de toucher un plus large public :)

Et pour finir un merci à tous ceux qui participent/ont participés à archlinux.fr !