Netbook, Arch GNU/Linux, un joli i3 et des optimisations en vrac
Alors que je m'étais fendu d'un billet introductif concernant la configuration minimaliste que j'arbore sur mon netbook (un Compaq Mini 700EF, je le rappelle), voici un second billet à ce même sujet, cette fois-ci consacré à la configuration-même des différents composants logiciels que j'utilise (pour les plus importants).
J'essaierai de présenter les choix que j'ai pu faire, mais entre nous soit dit, il se peut bien que je ne me rappelle plus exactement des raisons de l'une ou l'autre modification, un peu trop pris que j'étais dans le travail d'édition ou de création de mes différentes configuration. Néanmoins, tentons tout cela !
i3 et Tomorrow Theme
Faisant quelques infidélités au thème Solarized que j'apprécie énormément, j'ai décidé non sans un vif pincement au cœur de m'éprendre du Tomorrow Theme, très efficace et dans des teintes que j'apprécie.
Pour avoir cette palette, voici les fichiers de configuration que j'ai (commentés pour la plupart) :
Notez l'importance de quelques programmes auxquels fait appel ce fichier, par exemple ceux cités en fin de fichier : i3lock (voir plus bas), nitrogen (pour le fond d'écran), urxvtd
(démon pour rxvt-unicode, appelé avec le client urxvtc
), clipit (gestionnaire de presse-papier), redshift (ajuste la température de l'écran en fonction de l'heure et de la position géographique), ou encore unclutter (cache le curseur si inutilisé après un certain délai). Je mentionnerai que j'utilise la police Terminus, pensez à l'installer si vous utilisez mon fichier, ou éditez les lignes en faisant mention. Pour avoir les ressources nécessaires :
pacman -S terminus-font unclutter redshift clipit
Notez que pour un support effectif de cette police, vous devez rajoutez dans votre ~/.xinitrc
(voici le mien en exemple) les lignes :
xset +fp /usr/share/fonts/local xset fp rehash
Pour la configuration de rxvt-unicode
, référez-vous à ce fichier. Notez le besoin de quelques dépendances également, les extensions et de quoi gérer la molette. Pour ce faire, il suffit d'installer les dépendances suivants (pour la molette voir le lien précédent) :
pacman -S rxvt-unicode urxvt-perls
Avant toute modification du système
Je vous conseille vivement d'avoir une clef USB d'Arch Linux à proximité, si jamais ça plante, histoire de chrooter tout ça et annuler les modifications effectués. Pour ce faire, il n'y aurait qu'à suivre sommairement l'utilisation des Arch Install Scripts, monter les partitions nécessaires (/boot
et /
devraient suffire), faire un arch-chroot /mnt
et essayer de réparer ce qui n'aura pas été convenablement. Avec cela, il est toujours possible de rétablir la plupart des fausses manipulations - cela n'empêche pas néanmoins de faire attention ! Prêts ? Commençons par changer de noyau !
Noyau CK
Soyons franc, je n'ai pas spécialement envie de présenter ce noyau que je trouve réactif, complet et ma foi, dont le mainteneur est une personne plutôt serviable et attentive aux régressions annoncées. Au rang des avantages de ce noyau, il y a non seulement un excellente réactivité du système qu'importe la charge de ce dernier, mais aussi des gains de performance réels. Pour bénéficier de tout cela, il vous faudra :
- ajouter le répertoire à
/etc/pacman.conf
[repo-ck] SigLevel = PackageRequired Server = http://repo-ck.com/$arch
- ajouter la signature de graysky
pacman-key -r 6176ED4B; pacman-key --lsign-key 6176ED4B
- mettre à jour la base de
pacman
(et avoir la musique en tête, accessoirement, de rien c'est gratuit)
pacman -Syy
- installer le noyau qui va bien (ici optimisé pour un Intel Atom)
pacman -S ck-atom
À ce moment, il faut sélectionner les paquets qui vont bien par rapport à la configuration matérielle, pour ma part j'avais besoin des drivers Broadcom, donc j'ai sélectionné le noyau (évidemment), et le module (qui ajoutera tout ce qu'il faut dans /etc/modules-load.d/
.
- changer d'
elevator
(si par exemple vous n'avez pas de SSD, auquel cas il est conseillé de garderdeadline
) :
Insérez elevator=bfq
dans /etc/default/grub
à la ligne GRUB_CMDLINE_LINUX_DEFAULT
, puis régénérez GRUB2 d'un grub-mkconfig -o /boot/grub/grub.cfg
.
Sources : Linux-ck sur ArchWiki, Repo-ck sur ArchWiki, le site officiel pour Arch Linux Repo-CK (des benchmarks y sont disponibles).
Optimisation du mkinitcpio
Certes, l'autodétection des modules du noyau fait un boulot fabuleux dans la plupart des cas, dans le mien il y a une motivation simple : réduire drastiquement la taille de l'image du noyau, de sorte de n'avoir que les modules nécessaires au fonctionnement de ma machine. Pour cela, il faut :
- trouver les modules disque (pour l'exemple, admettons qu'on ait
sd
etahci
)
udevadm info --attribute-walk -n /dev/sda1 | grep 'DRIVERS=="[^"]'
- ajouter ça à MODULES, comprendre :
sd_mod
+ second pilote + système de fichier (je clair, ne pas ?)
MODULES="ahci sd_mod ext4"
- placer dans les BINARIES en conséquence pour la détection des systèmes de fichier, dans mon cas il s'agit de :
BINARIES="fsck fsck.ext4"
- changer les HOOKS pour n'en garder que le minimum : base seulement, ou bien ajoutez-en quelques autres comme
timestamp
, pour avoir un systemd-analyze plus précis. Le mien est celui-ci :
HOOKS="base timestamp"
- changer la compression, ce qui nécessite dans le cas présent l'installation du paquet
lzop
COMPRESSION="lzop"
- régénérer l'image du noyau
mkinitcpio -p linux-ck
Source : Optimizing Bootup With mkinitcpio.
Économie d'énergie sans laptop-mode-tools
Note : préférer TLP, très performant, mais au risque de perdre
Pour un ordinateur portable, considérons deux liens permettant d'avoir un environnement n'utilisant que systemd
(permettant de virer acpid
et pm-utils
, youpie)
- un script d'économie d'énergie du forum CrunchBang ;
- une application de ce script moyennant quelques changements, compatible avec systemd avec quelques règles
udev
;
Prêts ? Nous allons :
- copier le répertoire git ;
git clone git://github.com/Unia/powersave.git; cd powersave
- installer les dépendances en fonction des nécessités (à votre discrétion, par exemple je ne touche pas à
hdparm
puisque j'ai un SSD) ; - installer le contenu du script ;
sudo make
- éditer
/usr/bin/powersave
en fonction des spécificités du matériel ;
Par exemple, j'ai enlevé la gestion de la luminosité, trop peu fiable pour moi, ou j'ai ajouté des arguments gérant des paramètres spécifiques aux puces Intel (i915
, commentés suite à la manipulation suivante). La majeure partie des règles sont présentes, libre à vous donc de les décommenter et de vérifier si ces règles ne génèrent aucune erreur quand vous entrez powersave true
dans votre terminal. Il ne faut pas hésiter à faire des cat
sur les chemins des lignes du script, histoire de voir s'ils existent.
- forcer ASPM powersave par un argument dans GRUB ;
Insérez pcie_aspm=force
dans /etc/default/grub
à la ligne GRUB_CMDLINE_LINUX
, puis régénérez GRUB2 d'un grub-mkconfig -o /boot/grub/grub.cfg
.
- permettre à
systemd
de gérer les événements du matériel en éditant le fichier/etc/systemd/logind.conf
; - créer le fichier
/etc/modprobe.d/blacklist.conf
avec pour contenu :
blacklist pcspkr
Cette petite ligne permet de désactiver le "beep" atroce et faisant saigner les oreilles sortant parfois des entrailles de la machine - pour un dispositif nomade, donc coutumier des salles de cours, c'est un comportement indisposant.
- créer le fichier
/etc/modprobe.d/snd_hda_intel.conf
avec le contenu :
options snd-hda-intel model=laptop options snd_hda_intel power_save=1 options snd-hda-intel enable_msi=1
- créer le fichier
/etc/modules-load.d/cpufreq.conf
afin d'activer les modules de contrôle de la fréquence du processeur, avec le contenu suivant ; ici j'utilise le module acpi_cpufreq mais choisissez le module qui convient le mieux à votre matériel :
# Load cpufreq driver acpi_cpufreq # Load cpufreq governors cpufreq_performance cpufreq_powersave
Accélérer un poil le démarrage de systemd
Premièrement, il n'y a pas de secret : choisissez bien les services à démarrer. Une fois cette manipulation faite (que je ne peux pas faire à votre place, comprenez bien), on peut vider le contenu de /etc/vconsole.conf
(oui, même si le wiki le suggère) et laisser X.Org être le seul à s'occuper des dispositifs de saisie comme inscrit dans ArchWiki. On va donc :
- supprimer le contenu de
/etc/vconsole.conf
; - rétablir
/etc/X11/xorg.conf.d/10-evdev.conf
à l'originale parce que comme des buses on l'avait modifié pour avoir une jolie disposition clavier ; - créer et éditer le fichier
/etc/X11/xorg.conf.d/20-keyboard.conf
avec le contenu suivant :
Section "InputClass" Identifier "Keyboard Layout" MatchIsKeyboard "yes" MatchDevicePath "/dev/input/event*" Option "XkbLayout" "fr,fr" Option "XkbVariant" "latin9,bepo" Option "XkbOptions" "grp:shifts_toggle" EndSection
Cette configuration me permet de passer de la disposition fr-latin9
(azerty sous stéroïdes) à fr-bepo
en appuyant sur les deux touches majuscule en même temps. Pratique, non ?
N.B. L'utilité de cette manipulation a été soulevée dans les commentaires, dans le sens où le fichier /etc/vconsole.conf
gère les tty
, et que 20-keyboard.conf
s'adresse à X.Org, sans rapport entre les deux. Je me suis rendu compte que la population de /etc/vconsole.conf
demandait plus de temps à l’exécution de systemd-vconsole-setup.service
, alors qu’il est excessivement rare que j’utilise directement une tty
sur cette machine (à part de façon automatique, voir le point suivant). La différence n’est évidemment pas énorme, 40ms à tout casser, mais c’est toujours 40ms de prises pour passer en dessous de la barre des quatre secondes. Cette manipulation n'est donc pas fondamentalement indispensable, mais il me semblait utile de la mentionner.
Connexion automatique et i3lock
Il y a sur ArchWiki un article qui m'avait jusqu'alors échappé, répondant au titre plutôt explicite de Automatic login to virtual console, que l'on peut combiner avec cet autre : Start X at Login. Alors qu'auparavant je voulais utiliser SLiM en connexion automatique, et appeler i3lock
en début de session pour tout de même avoir une demande de mot de passe, cette méthode me permet de réduire encore un peu les dépendances nécessaires à mon environnement. Notez que cette manipulation me déplaisait cruellement, étant donné la relative inutilité de SLiM sinon pour passer la main entre systemd
et X.Org
. Notez cependant que pour désactiver SLiM ou tout autre service du genre, et activer la méthode de connexion telle qu'exposée dans le wiki, il vous faudra un peu faire le ménage dans les services de systemd
. Ajoutez donc qu'il faut désactiver SLiM, mais aussi enlever la cible par défaut du service "graphique" :
systemctl disable slim.service graphical.target default.target
Vous pouvez ensuite suivre les pages du wiki sans problème, à savoir créer un service lançant une tty
automatiquement, et une ligne dans le profil bash
ou zsh
qui lancera X
automatiquement. Il ne suffit plus que d'éditer .xinitrc
ou le fichier de configuration du gestionnaire de fenêtre et d'y ajouter une commande pour i3lock
. Dans mon cas, j'ai ajouté exec --no-startup-id i3lock -c 1D1F21
au début de mes exécutions automatiques dans .i3/config
comme mentionné plus haut.
systemd-analyze blame
Je charge un minimum de services au démarrage, comme vous pouvez le constater :
193ms systemd-udev-trigger.service 159ms systemd-logind.service 134ms systemd-modules-load.service 82ms systemd-remount-fs.service 79ms sys-kernel-debug.mount 77ms dev-mqueue.mount 73ms systemd-sysctl.service 69ms systemd-tmpfiles-setup.service 61ms systemd-udevd.service 52ms systemd-vconsole-setup.service 50ms dev-hugepages.mount 38ms dev-sda2.swap 33ms home.mount 33ms systemd-user-sessions.service 27ms boot.mount 25ms tmp.mount
systemd-analyze time
En somme :
Startup finished in 1129ms (kernel) + 1366ms (initramfs) + 1480ms (userspace) = 3977ms
Certes, le SSD me permet de gagner énormément de temps, mais auparavant (configuration lourde et pas optimale, avec un DE bien trop complet pour mes besoins je ne descendais jamais en dessous des dix secondes.
pstree
sur une utilisation courante
systemd─┬─anacron ├─bash───dwb───4*[{dwb}] ├─bash───gajim ├─clipit ├─crond ├─3*[dbus-daemon] ├─2*[dbus-launch] ├─dhcpcd ├─dropbox───13*[{dropbox}] ├─dunst ├─i3bar───i3status ├─ifplugd ├─login───startx───xinit─┬─X │ └─i3 ├─redshift ├─systemd-journal ├─systemd-logind ├─systemd-udevd ├─unclutter ├─urxvtd─┬─bash───pstree │ └─bash───vim └─wpa_supplicant