De FVWM à awesome
Vincent Bernat
J’ai utilisé FVWM comme gestionnaire de fenêtres pendant plus de 10 ans. Cependant, le placement manuel des fenêtres et l’utilisation continuelle de la souris a fini par me lasser. Un gestionnaire de fenêtres fait partie de cette poignée de logiciels avec lesquels on interagit en permanence, ce qui explique leur grande diversité et l’investissement important en temps qu’ils peuvent représenter.
J’ai donc décidé d’utiliser un « tiling window manager ». Alors qu’i3 semblait particulièrement abouti et puissant (le screencast constitue une bonne démo), je cherchais un gestionnaire de fenêtres configurable et extensible à l’aide d’un langage de programmation quelconque. Parmi les choix les plus courants, on peut citer :
- awesome, écrit en C, configurable et extensible en Lua,
- StumpWM, écrit, configurable et extensible en Common Lisp,
- xmonad, écrit, configurable et extensible en Haskell.
J’ai choisi awesome bien que StumpWM, avec l’utilisation de Common Lisp, me paraissait aussi intéressant. Il est cependant beaucoup plus minimaliste.
Voici ce que j’ai pu en tirer visuellement :
Configuration#
Sans fichier de configuration, awesome ne fait absolument rien. Il n’y a aucun comportement prédéfini: tout doit être programmé à travers un fichier de configuration en Lua. Bien sûr, un tel fichier est fourni comme base mais il est aussi possible de partir de zéro. Lorsqu’on désire un contrôle total sur son gestionnaire de fenêtres, c’est vraiment appréciable.
awesome est bien documenté. Le wiki fournit une FAQ, une bonne introduction et la référence de l’API est suffisamment concise pour pouvoir être lue du début à la fin. Savoir programmer en Lua n’est pas un prérequis, le langage étant assez simple de prise en main.
J’ai placé ma configuration sur GitHub. Elle n’est pas à utiliser directement : mieux vaut y piocher quelques éléments et l’adapter à vos goûts. Les sections suivantes mettent en lumière certains aspects.
Raccourcis#
Il y a dix ans, je faisais les poubelles pour récupérer des
claviers « Modèle M ». Ils étaient
particulièrement agréables à utiliser et le plus souvent dépourvus de
touches Windows jugées nuisibles. Désormais, tous mes claviers ont des
touches Windows. C’est finalement un changement majeur quand on veut
configurer un gestionnaire de fenêtres car il devient possible d’y
dédier une de ces touches, généralement celle la plus à gauche,
appelée Mod4
et non utilisée par la plupart des applications.
Il devient alors possible de définir de nombreux raccourcis. Le souci
est alors d’être capable de s’en souvenir. Pour m’aider, j’ai modifié
le module awful.key
pour pouvoir attacher une chaîne de
documentation à chaque raccourci. J’ai documenté ce processus sur le
wiki d’awesome.
Console à la Quake#
Une console à la Quake est un terminal escamotable en haut de l’écran. On l’affiche ou le cache à l’aide d’un raccourci. J’utilisais ce mécanisme très souvent avec FVWM. Bien que moins utile avec awesome, c’est un plus que je continue d’apprécier. Il existe plusieurs solutions documentées dans le wiki d’awesome. J’y ai ajouté la mienne1.
XRandR#
XRandR est une extension qui permet de configurer à la volée les différents écrans : vous branchez un écran externe sur votre ordinateur portable et une commande permet d’y étendre le bureau :
$ xrandr --output VGA-1 --auto --left-of LVDS-1
awesome détecte ce changement et redémarre automatiquement. Sur les
portables, il y a une touche dédiée à l’activation d’un écran
externe. De nos jours, cette touche ne fait rien sans un peu de
configuration. Elle correspond généralement au symbole
XF86Display
. J’ai associé celui-ci à une fonction qui fait
tourner les différentes configurations possibles selon les
écrans détectés. Par exemple, avec un écran externe branché sur un portable,
je peux faire tourner les configurations suivantes :
- écran interne uniquement,
- écran externe uniquement,
- écran interne à gauche, écran externe à droite,
- écran externe à gauche, écran interne à droite,
- aucun changement.
La configuration proposée est affichée via naughty, le système de notification intégré dans awesome.
Widgets#
J’utilisais jusqu’ici Conky pour afficher différentes informations relatives au système comme l’espace disponible, l’utilisation du CPU ou la bande passante réseau. awesome est livré avec des widgets qui peuvent remplir le même usage. J’utilise vicious, une surcouche pour gérer plus facilement les widgets: ce module permet d’attacher à chaque widget une fonction qui aura pour tâche de récupérer les valeurs nécessaires à l’affichage. Simple mais très puissant.
Voici un exemple pour afficher le volume :
local volwidget = widget({ type = "textbox" }) vicious.register(volwidget, vicious.widgets.volume, '<span font="Terminus 8">$2 $1%</span>', 2, "Master") volwidget:buttons(awful.util.table.join( awful.button({ }, 1, volume.mixer), awful.button({ }, 3, volume.toggle), awful.button({ }, 4, volume.increase), awful.button({ }, 5, volume.decrease)))
Il est également possible de fournir une fonction qui laissera toute latitude au formatage du texte. Par exemple, il est possible d’afficher une valeur en rouge sous un certain seuil. Voir par exemple mon widget pour batterie.
Divers#
J’ai également apporté quelques modifications à divers autres points de ma configuration.
Configuration du clavier#
Je configure mes claviers en QWERTY. Pour les lettres accentuées et autres symboles, j’utilise une touche compose. J’ai également inversé Caps Lock et Control. La touche Pause est de plus redéfinie pour déclencher l’économiseur d’écran.
Grâce à un excellent article expliquant comment enrichir la configuration du clavier avec xkb, j’ai découvert qu’il existait dans X un mécanisme pour changer à la volée la configuration des touches2. Ainsi, ma configuration finale est :
$ setxkbmap us,fr '' compose:rwin ctrl:nocaps grp:rctrl_rshift_toggle $ xmodmap -e 'keysym Pause = XF86ScreenSaver'
Il est possible de switcher entre AZERTY et QWERTY en pressant à la fois les touches Control et Maj situées à droite du clavier.
Ménage du côté GNOME#
Il y a à peine un an, j’ai voulu entrer de plain-pied dans la
modernité et utiliser de nombreux composants GNOME tels que
le GNOME Display Manager, le GNOME Power Manager, le GNOME Screen
Saver, gnome-session
, gnome-settings-daemon
et
gnome-four-à-pizza
. Bien mal m’en a pris puisque même après la
configuration initiale, j’ai continué à rencontrer régulièrement de
nombreux problèmes avec notamment un économiseur d’écran qui fait
grève après chaque mise à jour de GNOME jusqu’au prochain redémarrage
de la session.
J’ai donc décidé de revenir vers des classiques et de troquer tous ces
composants capricieux par des outils éprouvés comme sleepd et les
outils du paquet pm-utils
pour la gestion de l’énergie, xautolock
et i3lock pour l’économiseur d’écran. SLiM a remplacé GDM et
supporte désormais ConsoleKit3. J’utilise les fichiers
~/.gtkrc-2.0
et ~/.config/gtk-3.0/settings.ini
pour configurer
GTK+.
La modernité attendra.
Couleurs du terminal#
J’utilise rxvt-unicode comme terminal avec un fond noir (et un peu de transparence). Les seize couleurs par défaut sont parfois difficiles à lire. Il existe cependant de nombreux endroits pour trouver des palettes alternatives. J’ai opté pour une palette « derp » aux couleurs pastels et très lisibles.
J’ai également opté pour la fonte DejaVu Sans Mono au lieu de la
vénérable fixed
en ajoutant ceci dans ~/.Xresources
:
Xft.antialias: true Xft.hinting: true Xft.hintstyle: hintlight Xft.rgba: rgb URxvt.font: xft:DejaVu Sans Mono-8 URxvt.letterSpace: -1
Le résultat est un peu moins net mais me semble toutefois plus lisible. Je changerai peut-être d’avis par la suite.
Prochaine étape#
J’utilise désormais beaucoup moins la souris. Il reste toutefois le problème du navigateur. Je regarde activement du côté de luakit, un navigateur basé sur WebKit et extensible en Lua.
-
La console utilise un nom qui lui est propre. Cela permet à awesome de la détecter de manière fiable quand elle apparaît, notamment lors des redémarrages. Je me suis inspiré de la façon de faire dans le mod de FVWM que j’utilisais. ↩︎
-
L’agencement est commun à toutes les fenêtres. Pour obtenir un agencement propre à chaque fenêtre, jetez un œil sur kbdd. ↩︎
-
Il est quasiment impossible de survivre sans ConsoleKit. La plupart des politiques de sécurité mises en place par PolicyKit n’utilisent plus de groupes pour gérer les permissions. Donc à moins de réécrire toutes ces politiques… ↩︎