Firefox, économiseur d'écran et Xfce

Comment un bogue énervant m'a conduit à contribuer à Firefox.

Contexte

J'ai la fâcheuse manie de changer l'environnement de bureau de mon ordinateur tous les 6 mois à peu près. À cette occasion, j'utilise régulièrement Xfce dont la simplicité et légèreté me plaisent.

Lors de mon dernier essai, je remarque un comportement fâcheux : l'écran se met en veille lorsque je visionne une vidéo Youtube avec Firefox. Encore une fâcheuse manie !

On creuse

Je profite de l'occasion pour creuser le problème et voir si je peux le résoudre. Après quelques recherches, je trouve un rapport de bogue similaire à mon problème, lié au composant xfce4-power-manager.

Le mainteneur de projet suggère que Firefox n'appelle pas la bonne interface D-Bus lorsqu'il veut inhiber la mise en veille de l'écran. D-Bus est un démon qui permet de faire communiquer différents programmes entre eux, via des interfaces pré-définies. Le problème n'apparait pas avec Chromium, qui doit certainement faire quelque chose de différent !

Hacker Firefox

Je plonge donc dans les entrailles de Firefox. Je trouve le fichier qui s'occupe de cette fonctionnalité : WakeLockListener.cpp. Je compare avec le code qui remplit la même fonction chez Chromium pour avoir une meilleure idée de ce qui peut mal …

plus ...

Podman, volume et SELinux

En ce moment j’expérimente avec Rust, le langage de programmation à la mode. Ayant compilé mon programme expérimental sur mon système Fedora, je l’envoie à un ami. Quelle déception quand il me dit que mon programme répond mal :

/lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.32' not `found

Rust compile avec la version de la librairie glibc de mon système, qui est trop récente et pas compatible avec Ubuntu. Je dois donc compiler avec un système plus ancien. Pas de panique les conteneurs sont parfaits pour ça !

Comme je travaille avec Fedora, j’utilise Podman qui est un équivalent à Docker pour créer mon conteneur.

Je tente ainsi, mais c’est l’échec :

% podman run --rm -v "$PWD":/usr/src/ -w /usr/src/ rust cargo build --release 
error: could not find `Cargo.toml` in `/usr/src` or any parent directory
zsh: exit 101   podman run --rm -v "$PWD":/usr/src/ -w /usr/src/ rust cargo build --release

D’où vient cette erreur ? Je tente de lire le répertoire depuis le conteneur :

% podman run --rm -v "$PWD":/usr/src/ rust ls /usr/src
ls: cannot open directory '/usr/src': Permission denied
zsh: exit 2     podman run --rm -v "$PWD …
plus ...

Changer la taille de police dans les applications Qt sous Xfce

En ce moment j’utilise Xfce comme environnement de bureau, pour soulager mon ordinateur portable âgé de sept ans qui fatigue un peu.

Comme je suis myope, je change toujours la taille des polices en changeant le DPI, pour le régler à 120. C’est facile à faire dans Xfce en utilisant le module « Apparence » du panneau de paramètres.

Mais dans certaines applications qui utilisent le framework Qt ce paramètre n’était pas toujours respecté. Après quelques recherches, j’ai trouvé qu’un moyen simple de changer l’apparence dans ces applications est d’utiliser le fichier ~/.Xresources. Ce fichier est utilisé par le serveur X pour configurer ses applications clientes.

Voici la configuration que j’ai utilisée :

!-------------------------------------------------------------------------------
! Xft settings
!-------------------------------------------------------------------------------

Xft.dpi:        120
Xft.antialias:  true
Xft.rgba:       rgb
Xft.hinting:    true
Xft.hintstyle:  hintslight
Xft.autohint:   false
Xft.lcdfilter:  lcddefault

Il faut ensuite utiliser la commande xrdb pour appliquer ces paramètres :

xrdb -merge ~/.Xresources

Et voilà, mes applications Qt comme KeepassXC ont la bonne taille de police !

plus ...

Debian 9 et IPv6 sur AWS EC2

Ce week-end j'ai configuré IPv6 sur mon infrastructure EC2 qui tourne sous Debian 9. J'ai suivi le guide fourni par AWS, mais j'ai rencontré quelques soucis, et ce guide n'a pas d'instructions pour Debian. Je vous conseille fortement de réaliser ces changements d'abord sur des instances de tests, car mes premiers essais ont rendus mes instances totalement injoignables, heureusement que ce n'étaient pas celles de prod !

Au début j'ai simplement configuré /etc/network/interfaces de la façon suivante afin d'utiliser dhcp pour IPv6:

% cat /etc/network/interfaces# 
# interfaces(5) file used by ifup(8) and ifdown(8)
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet dhcp
iface eth0 inet6 dhcp

Mais après un redémarrage mon instance de test n'arrivait pas à configurer le réseau, et était donc injoignable et inutilisable. Après quelques tests, j'ai réalisé que le problème venait du cient DHCP installé, qui était dhcpcd. Apparemment le paquet installé sur mon système était une relique de Debian 7, car il n'est pas disponible pour les versions ultérieures ! Je l'ai donc remplacé par isc-dhcp-client.

% sudo apt install isc-dhcp-client isc-dhcp-common
% sudo apt remove dhcpcd

Après un redémarrage, tout fonctionne, mon instance obtient son adresse IPv6 !

plus ...

BOINC, systemd et priorité des processus sous Linux, la suite

Dans mon précédent billet j'avais pensé avoir réglé mon problème, le démon BOINC laissant toutes les ressources processeur libres en cas de besoin.

Pour cela j'avais configuré systemd pour allouer une priorité faible au cgroup contenant les processus de calculs BOINC:
sudo systemctl set-property boinc.service CPUWeight=1

Comme noté dans les commentaires, cet attribut n'est pas disponible dans les versions de systemd antérieures à 231, où il remplace l'attribut CPUShares.

L'équivalent pour ces versions est: systemctl set-property boinc.service CPUShares=2

Ce changement reflète une modification de l'interface cgroups du noyau, où l'attribut cpu.shares est remplacé par cpu.weight. Or cette modification n'a pas encore été intégrée dans la branche principale, ce qui conduit systemd à convertir la valeur de CPUWeight à son équivalent cpu.shares sur mon système.

Pourtant j'ai remarqué que la lecture de vidéos n'était pas fluide sur mon système. En renouvelant l'expérience précédemment décrite les résultats montraient que BOINC ne laissait pas libres toutes les ressources du processeur.

Après avoir lu quelque documentation comme la page de manuel de systemd sur la gestion des ressources et la documentation du noyau sur les cgroups, j'ai pu comprendre d'où venait le problème.

Les cgroups sont organisés …

plus ...