Planet Archlinux FR

ArchLinux, en Français

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)

Mise à jour de pacman-5.0.1 requise avant le 23-04-2016

La parution de pacman-5.0 a apporté le support des hooks transactionnels. Ceux-ci nous permettront (par exemple) des mises à jour du cache des polices une seule fois au cours d’une mise à jour plutôt qu’après chaque installation d’un paquet de police. Cela permettra à la fois d’accélérer le processus de mise à jour, mais aussi de réduire la charge de fabrication des paquets pour les Développeurs et Utilisateurs de confiance.

Dans le but de démarrer l’utilisation des hooks, nous avons besoin que tous les utilisateurs aient au moins mis à jour pacman-5.0.1 avant le 23/04/2016. Pacman-5.0.1 a été publié le 23/02/2016, donc cela donne à chacun deux mois pour mettre à jour son système.

Article original

PHP 7.0 est disponible

Les paquets de la nouvelle version stable de PHP sont maintenant dans les dépôt stables. En plus des nouvelles fonctionnalités, les changements suivants sont appliqués. De manière générale, la configuration des paquets est maintenant plus proche de ce que le projet PHP préconise. Voir aussi le guide migration vers PHP 7.0.

Paquets supprimés

* php-pear
* php-mssql
* php-ldap : Ce module est dorenavant intégré dans le paquet php
* php-mongo : php-mongodb est une alternative, même si non compatible
* php-xcache : Utilisez plutôt php-opcache and optionnellement APCu
* graphivz : Le binding PHP va être supprimé.

Nouveaux paquets

* php-apcu-bc : Installez et activez ce module si les fonctions apc_* sont nécessaires.
* php-mongodb

Changements dans la configurations

* open_basedir n’est plus activé par défaut
* Les extensions openssl, phar et posix sont integrées par défaut
* php-fpm ne fournit plus une configuration logrotate. À la place syslog/journald est utilisé
* Le fichier service de php-fpm n’active plus PrivateTmp=true
* La configuration et le module de php-apache ont été renommés en php7_module.conf et libphp7.so

Article original

Suppression de Plasma 4

Étant donné que KDE 4 Desktop n’est plus maintenu depuis plusieurs mois, et qu’il est de plus en plus difficile de maintenir deux versions de Plasma, nous [NdT: Les développeurs Archlinux] avons décidé de le supprimer de nos dépôts. Plasma 5.5 vient de sortir, et devrait être assez stable pour le remplacer.

Les installations de KDE 4 ne vont pas être automatiquement mises à jour vers Plasma 5.
Cependant, nous recommandons à tous nos utilisateurs de mettre à jour ou de basculer sur une alternative le plus vite possible, étant donné que KDE 4 peut maintenant être cassé sans préavis.

Veuillez suivre le wiki expliquant la marche à suivre pour mettre à jour vers Plasma 5.

Article Original

Changement de l’ABI C++

Avec GCC 5.x, deux versions de l’ABI sont prises en compte par libstdc++, et nous [NdT: Les developpeurs Archlinux] avons décidés de switcher sur la nouvelle ABI.

Bien que l’ancienne ABI C++ soit toujours disponible, il est recommandé que vous reconstruisiez tous les paquets ne provenants pas des dépots officiels afin de bénéficier de la nouvelle ABI.
Ceci est particulièrement important si ces paquets sont liés à des bibliothèques elles même liées à la nouvelle ABI.

Vous pouvez lister les paquets à reconstruire grâce au script bash suivant (mapfile est une commande « built-in » de bash) :

#!/bin/bash

while read pkg; do
    mapfile -t files < <(pacman -Qlq $pkg | grep -v /$)
    grep -Fq libstdc++.so.6 "${files[@]}" 2>/dev/null && echo $pkg
done < <(pacman -Qmq)

Texte de Allan McRae à ce sujet : lien

Article original

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 !

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.

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 …

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 !

Ma procédure d'installation Archlinux

Contrairement à bon nombre de distributions Archlinux ne possède pas de LiveCD avec processus d'installation plus ou moins automatisé. Bien au contraire c'est le futur utilisateur qui doit, étape après étape, préparer son ordinateur, installer les paquets de base, choisir ses pilotes graphiques, paramétrer le système et le(s) compte(s) utilisateur(s), choisir les applications qu'il utilisera... Ce qui peut apparaître comme une tâche rébarbative à certains est en fait un exercice didactique plus qu'intéressant, seul à même d'aider à passer progressivement du rôle passif de consommateur à celui d'artisan de son système d'exploitation, c'est à dire de concepteur, agenceur, réalisateur puis administrateur.

Pour nous aider dans cette procédure nous disposons de l’excellent wiki du site archlinux.fr (ou de sa version anglaise, plus complète). La méthodologie d'installation est expliquée pas à pas et sauf configuration exotique ou trop nouvelle on y trouvera tout ce qui est nécessaire et suffisant à une installation propre. En cas de difficulté on peut également compter sur une communauté très réactive dans les forums.

Toutefois pour ceux qui installent souvent des PC install parties, boulot, amis...(1) il est tentant d'essayer d'automatiser un peu les choses.

La première étape est d'utiliser ssh : cela permet le copier / coller et évite les fautes de frappe.

Ensuite, et à condition de mettre à jour régulièrement ses fiches à partir du wiki, de compiler les instructions qui nous concernent habituellement, et celles-ci seulement. Ce n'est pas la peine par exemple de ce farcir la virtualisation, les pilotes graphiques propriétaires ou même le trio apache / php / mysql si l'on installe essentiellement des machines de bureau. En cas de besoin il sera toujours possible de retourner au wiki.

Enfin on établira une listes des applications que l'on installe par défaut. Rien de plus facile après une fraîche installation :
yaourt --nocolor -Qe | cut -d ' ' -f 1 | sort > liste_brute
leafpad liste_brute #retirer les paquets spécifiques, drivers, AUR...
cut -d \/ -f 2 liste_brute > liste

et mettre cette liste quelque part facilement atteignable. La mienne est ici est repose sur l'environnement de bureau KDE. Si l'on veut installer des paquets issus de AUR il vaut mieux en faire une liste à part et utiliser yaourt quand celui-ci sera installé.

booter sur l'image d'installation et installer ssh

loadkeys fr #taper loqdkeys fr puisque le clavier est pour l'heure en qwerty
nano  /etc/ssh/sshd_config
  #décommenter "PermitRootLogin yes"
  #décommenter "PermitEmptyPasswords no" et mettre la valeur à yes
systemctl start sshd
ifconfig #pour connaître l'adresse ip à laquelle se connecter avec ssh

Se connecter depuis une autre machine

ssh root@192.168.x.y #mettre ici l'adresse trouvée à l'étape précédente.

Partitionnement

Créez au minimum une partition racine et une pour /home. Avec les machines modernes disposant de plus de 2Go de mémoire il n'est plus nécessaire de prévoir de swap, sauf si vous prévoyez d'utiliser l'hibernation. Utilisez fdisk ou gdisk suivant que votre disque dur doive être partitionné en MBR ou en GPT. Si votre carte mère utilise un firmware UEFI il est en principe nécessaire d'utiliser GPT.


Montage des partitions

mount /dev/sdaX /mnt                    # remplacez sdaX par la partition qui va bien
mkdir /mnt/home
mount /dev/sdaY /mnt/home               # remplacez sdaY par la partition qui va bien
swapon /dev/sdaZ                        # si partition de swap

Installer la base

pacstrap /mnt base base-devel

Créer le fstab

genfstab -U -p /mnt >> /mnt/etc/fstab

chroot

arch-chroot /mnt

Nom machine

echo NomDeLaMachine > /etc/hostname

locale et fuseau horaire

echo "fr_FR.UTF-8 UTF-8 " >> /etc/locale.gen
locale-gen
echo 'LANG="fr_FR.UTF-8"' > /etc/locale.conf
export LANG=fr_FR.UTF-8
ln -s /usr/share/zoneinfo/Europe/Paris /etc/localtime

Installer xorg

pacman -Syu xorg-server xorg-xinit xorg-server-utils xf86-input-synaptics xterm

clavier

echo KEYMAP=fr-pc > /etc/vconsole.conf
nano /etc/X11/xorg.conf.d/10-keyboard-layout.conf
# coller les éléments ci-dessous
# (disposition oss avec æ et œ)
  Section "InputClass"
    Identifier         "Keyboard Layout"
    MatchIsKeyboard    "yes"
    MatchDevicePath    "/dev/input/event*"
    Option             "XkbLayout"  "fr"
    Option             "XkbVariant" "oss"
  EndSection


pacman

echo -e '\n[archlinuxfr]\nSigLevel = Never\nServer = http://repo.archlinux.fr/$arch' >> /etc/pacman.conf
cp /etc/pacman.d/mirrorlist /etc/pacman.d/mirrorlist.backup
sed '/^#\S/ s|#||' -i /etc/pacman.d/mirrorlist.backup
rankmirrors -n 6 /etc/pacman.d/mirrorlist.backup > /etc/pacman.d/mirrorlist
pacman -Syy

Cloner

wget http://blog.vintherine.org/public/Linux/liste # mettre votre liste à la place, voir plus haut
# ou nano liste et copier / coller
pacman -S `cat liste`
rm liste
# si yaourt est dans la liste il est maintenant disponible pour installer des paquets AUR.

Pilotes graphiques

lspci | grep VGA
# En fonction du résultat choisi l'un des 3 pilotes ci-dessous pacman -S xf86-video-intel pacman -S xf86-video-ati pacman -S xf86-video-nouveau nouveau-dri libtxc_dxtn

Réseau

pacman -S networkmanager modemmanager net-tools openssh

ramdisk

mkinitcpio -p linux

root

passwd # saisir le mot de passe root
echo "export EDITOR=nano" >> /root/.bashrc

Installer grub (Système BIOS)

grub-mkconfig -o /boot/grub/grub.cfg
grub-install --no-floppy --recheck /dev/sda 

Installer grub (Système UEFI)

mkdir -p /boot/efi
mount -t vfat sdaX /boot/efi  # remplacez sdaX par votre partition EFI
mkdir -p /boot/efi/EFI        # Peut-être existe-t-il déjà si Windows a été pré-installé
grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=arch_grub --recheck
grub-mkconfig -o /boot/grub/grub.cfg
N.B. se reporter au wiki pour démarrer d'autres systèmes (Windows par ex.)
 

Démarrer les services

systemctl enable sshd
systemctl enable NetworkManager
systemctl enable ModemManager.service   #s'il faut gérer une clef 3G
systemctl enable kdm visudo #décommenter %wheel ALL=(ALL) NOPASSWD: ALL

Créer un utilisateur

useradd -g users -m -s /bin/bash -G sys,adm,lp,wheel,uucp,locate,games,network,video,audio,optical,storage,scanner,power <nom utilisateur>
passwd <nom utilisateur>

Quitter et redémarrer

exit
umount -R /mnt
reboot

En conclusion

Voilà ma procédure à ce jour, elle devra toujours évoluer avec la distribution. Peut-être inspirera-t-elle un archer qui aura la même problématique que moi pour établir la sienne, mais en aucun cas elle ne devrait être suivie aveuglément. Elle n'a pas vocation à remplacer le wiki mais seulement à rendre l'installation plus rapide quand on en maîtrise préalablement les principales étapes.


(1)  Pour répondre d'avance aux arguments (fallacieux) selon lesquels Arch n'est pas une distribution à installer pour tout le monde je dirais :
  • que d'après mon expérience une Arch, hors situation exceptionnelle (1 fois par an ?) est plus facile à mettre à jour qu'une Ubuntu
  • que comme en cas de problème c'est moi qui intervient autant que ce soit sur la distribution que je connais le mieux
  • que ssh ce n'est pas fait pour les chiens
  • qu'une rolling release évite une grosse manip tous les 6 mois (ou une très très grosse qui ne fonctionne pas toujours tous les 2 ans)
  • qu'avec Arch on n'a pas à s'emm..... avec les ppa
  • et que de toutes manières c'est comme ça et pas autrement. Na !

Installation d'Archlinux sur un Asus X75VD

Dans une grande surface près de chez moi j'ai trouvé un Asus X75VD en solde pour la modique somme de 350€. Sachant que Asus rembourse 42€ sur simple demande par mail (voir ci-dessous) une licence Windows 8 sans utilité, cela ramenait à 308€ pour un i3, 8Go de RAM et 750Go de disque. Ça tombait bien, le PC de ma fille aînée commençait à donner des signes de faiblesse.

À peine envoyé le mail qui va bien à Asus, et puisque le PC était destiné à ma fille, j'insérais sans délai la clé USB d'installation de la LinuxMint dont elle avait l'habitude et... écran noir. Ah ! Qu'est-ce à dire ? Mint buggué ?

Je télécharge Ubuntu, insère derechef la sus-dite clé... pour un résultat identique. Ah !

Pour vérification j'insère la clé d'installation Archlinux et là pas de problème. Le problème vient donc de xorg. Pourtant j'étais sûr qu'il y avait une GPU Intel. Je fais lspci | grep VGA pour vérifier et...

lspci | grep VGA
00:02.0 VGA compatible controller: Intel Corporation 3rd Gen Core processor Graphics Controller (rev 09)
01:00.0 VGA compatible controller: NVIDIA Corporation GF119M [GeForce 610M] (rev a1)

Damned, je suis refait, il y a 2 cartes graphiques, une Intel et une nVidia. Il s'agit de fameuse fumeuse technologie Optimus, qui valut entre autre un beau doigt d'honneur de Linus à l'adresse de nVidia. Et rien dans le BIOS permettant de désactiver l'une des deux cartes.

Retour sur la doc Ubuntu :

impossibilité de démarrer un média d'installation (LiveCD, LiveUSB) et de manière plus générale, l'impossibilité de démarrer un Linux quelconque. Ce problème est généralement dû à un Kernel Panic provoqué par le pilote libre pour carte graphique nVidia, nouveau, qui supporte très mal cette technologie.

Ben y'a qu'à pas l'installer le pilote nouveau, comme ça on restera bien sagement avec le pilote xf86-video-intel. Oui mais ça c'est pas dans la philosophie Ubuntu : par défaut on installe tous les pilotes et on laisse udev se démerder. Bon, il y a sûrement moyen de se faire une installation à la pogne mais j'ai trop peur qu'un apt-get dist-upgrade vienne tout casser. Je me décide donc pour installer une Arch, au moins je sais ce qu'il s'y passe.

Premièrement partitionner. Je décide de laisser le partitionnement en GPT et l'emploi de gdisk en lieu et place du fdisk habituel ne pose pas trop de problème. La question serait plus délicate s'il s'agissait de conserver partiellement Windows mais comme l'emploi d'un LiveCD n'est pas possible, je ne peux pas utiliser gparted.

À défaut d'être gravée dans le marbre ma procédure d'installation fait l'objet d'une petite fiche qui me permet des copier / coller dès lors que j'ai pu me connecter en ssh. Du reste je me demande pourquoi openssh n'est pas installé / démarré par défaut dans l'iso officielle. En attendant je tape les commandes habituelles :

loadkeys fr                 # pour avoir le clavier en français
pacman -Sy openssh # installer openssh
passwd # donner un mot de passe à root pour se loguer en ssh
nano /etc/ssh/sshd_config # et décommenter la ligne PermitRootLogin yes
ifconfig # pour connaître l'adresse ip
systemctl start sshd # et roule ma poule !

Je n'ai donc plus qu'à me connecter depuis un poste muni d'une interface graphique et  suivre mes fiches ou l’excellent wiki d'Archlinux. Pour les anglophobes il existe un wiki en français mais moins complet (comme d'hab). Je ne ferai donc pas un compte rendu détaillé mais me contenterai des résolutions des quelques petites difficultés rencontrées.

Grub et EFI

J'ai l'habitude d'utiliser grub comme chargeur d'amorçage, et avait pris soin de charger le module efivars avant le arch-chroot. Mais j'ai eu droit à un magnifique

modprobe: FATAL: Module efivars not found

Donc /sys/firmware/efi/efivars restait vide dans l'environnement d'installation et grub refusait de s'installer correctement. Le bug (incompatibilité de niveau entre le noyau et efibootmgr) et son contournement sont expliqués ici mais comme j'avais utilisé avec succès l'iso du mois de septembre j'ai tout simplement fini l'installation de grub avec celle-ci. Après boot sur la clé :

modeprobe efivars
arch-chroot

puis classiquement (grub, dosfstools et efibootmgr ayant été installés préalablement) :

mkdir /boot/efi
mount /dev/sdax /boot/efi/
grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=arch_grub --recheck
grub-mkconfig -o /boot/grub/grub.cfg
J'espère que le problème sera résolu sur la prochaine iso.

xorg

Après installation de xorg je me suis contenté d'installer xf86-video-intel sans installer ni nouveau ni le pilote propriétaire. Et comme je l'espérais cela a fonctionné sans problème. Comme ce PC est destiné à la bureautique et un peu de multimédia cela suffit amplement.

Par mesure de sécurité j'ai blacklisté le module nouveau et installé bbswitch pour éteindre la carte au boot :
-> options bbswitch load_state=0 dans /etc/modprobe.d/bbswitch.conf

Pour tout savoir sur optimus sous Archlinux voir la page de wiki consacrée à Bumblebee (la page en français pour les anglophobes)

Wifi

Maintenant que xorg fonctionne, que j'ai installé KDE et vérifié que le son fonctionne, il reste à m'occuper du réseau. Toute l'installation a été faite en utilisant l'interface ethernet, mais ma fifille utilise soit le wifi soit une clé 3G. Pour cette dernière partie il suffit d'installer modemmanager en complément de NetworkManager ainsi que usb_modeswitch. Voir la documentation ici.

Pour le wifi ça a été plus compliqué : impossible d'activer la carte, témoin éteint et touche de fonction prévue à cet usage sans effet. rfkill list me confirme cet état de fait :

rfkill list
0: phy0: Wireless LAN
Soft blocked: no
Hard blocked: no
1: asus-wlan: Wireless LAN
Soft blocked: no
Hard blocked: yes

Tout d'abord je ne comprend pas pourquoi je vois 2 cartes au lieu d'une mais après des heures carrées de recherche sur le web je fini par trouver ce post ou un gus suggérait de blacklister un module hp-wmi. Chez moi c'était naturellement un asus-wmi que j'ai blaclisté et effectivement j'ai pu utiliser le wifi. Et rfkill list ne me montre plus qu'une carte, comprenne qui peut.

rfkill list
0: phy0: Wireless LAN
Soft blocked: no
Hard blocked: no

Le témoin reste éteint, la touche de fonction sans effet mais le wifi fonctionne. Bah....

Sortie de veille

Ultime vérification avant de livrer l'appareil à son destinataire, et notamment mise en veille. Et nouveau problème ! Plus de réseau ethernet en sortie de veille (le wifi fonctionne). dmesg me montre des tonnes d'erreur

kernel: alx 0000:04:00.0: invalid PHY speed/duplex: 0xffff

ifconfig up et systemctl restart NetworkManager sont sans effet, et le système crash à l'arrêt de la machine.

C'est de toute évidence le pilote alx de la carte qui est en cause. La solution est donc de le décharger à la mise en veille et de le recharger en sortie de veille. Un peu bricolo, pas très élégant, mais ça fonctionne.

sudo nano /etc/systemd/system/root-suspend.service
[Unit]
Description=Local system suspend actions
Before=sleep.target
[Service]
Type=simple
ExecStart=/usr/bin/rmmod alx
[Install]
WantedBy=suspend.target
sudo nano /etc/systemd/system/root-resume.service
[Unit]
Description=Local system resume actions
After=suspend.target
[Service]
Type=simple
ExecStart=/usr/bin/modprobe alx
[Install]
WantedBy=suspend.target

et rendre tout ceci actif au démarrage :

sudo systemctl enable root-suspend
sudo systemctl enable root-resume

Ici le post ou j'ai trouvé cette solution.

Conclusion

bon, c'est pas franchement du "out of the box", mais tout fonctionne. Youpi !

Annexe : Demande de remboursement de la taxe Windows

Mail adressé à acf_coa@asus.com

Bonjour,

Je viens de faire l’acquisition d’un Ultrabook Asus X75VD-TY256H Numéro de série D3N0CX286768119
Je suis très content de cet achat, cependant, je ne souhaite pas conserver le système d’exploitation Windows 8 qui ne me convient pas.

Je n’ai pas encore démarré la machine. Pourriez-vous me donner la procédure afin d’obtenir le remboursement de la licence Windows 8.

Mes coordonnées :
Vincent Gay
xxxxxxxxxxx, 74000 Annecy - France
Téléphone : +33 (0)4 50 xx xx xx

Vous trouverez en pièce jointe :
- copie de la facture d'achat
- copie de la page 1 de la « carte de garantie ASUS »
- photo de l'étiquette Windows situé sous l'appareil

Cordialement,

J'ai eu en retour deux formulaires pré-remplis que je n'ai eu qu'à signer et à renvoyer à la même adresse.