dwm le gestionnaire de fenêtre minimaliste concentré sur l'efficacité
Introduction
Le projet “suckless” propose beaucoup d’outils, avec pour but affiché «la simplicité, la clarté et la frugalité». Parmi les outils disponibles, nous trouvons “dwm” qui est un gestionnaire de fenêtre en mode “tile”. A la différence d’un gestionnaire de bureau (un environnement graphique auquel vous être probablement habitué, Gnome, KDE), il n’y a pas de bureau ici, pas d’icône superflues, pas de gaspillage d’espace d’écran. Le but étant juste de gérer des fenêtres et de pouvoir faire tout cela au clavier. Bien entendu, la souris est présente et est utilisable, mais elle n’est pas indispensable. Vous en aurez besoin pour, par exemple, surfer sur Internet dans votre navigateur, mais pour ce qui est de la gestion de fenêtre, vous pouvez l’oublier. Cela aura deux principaux avantages, gagner du temps et éviter un peu les TMS dues aux fréquents aller-retours entre le clavier et la souris. Vous pouvez retrouver dwm sur le site officiel.
Installation
Pour l’installation, il faut passer par la compilation. En effet, dwm se veut simple et léger et ne fait donc pas appel à un fichier de configuration externe, mais contient sa configuration dans un fichier “.h” utilisé lors de la compilation. Cependant, pas de panique, la compilation est simple, une fois les dépendances installées, il suffit d’un “make install” et le tour est joué.
Voici comment installer dwm sous Debian : Installer les dépendances pour la compilation :
sudo apt install make gcc libx11-dev libxft-dev libxinerama-dev -y
Récupération des sources sur le repository git officiel, compilation et installation :
git clone https://git.suckless.org/dwm
cd dwm
sudo make clean install
A partir de ce moment là, dwm est installé sur votre système dans le répertoire /usr/local/bin/ Vous pouvez donc le lancer pour le tester. Par contre, encore deux petites choses :
- Comment le lancer ?
- Vous n’avez fait à ce stade aucune configuration, donc tous les paramètres sont par défaut.
Pour répondre à la première question, sous Debian par défaut c’est “lightdm” qui sert de login manager. Lorsque vous êtes sur l’interface de login, vous pouvez cliquer sur la petite icône, en haut à droite et sélectionner le gestionnaire de fenêtre ou de bureau de votre choix. Comme dwm a été installé par compilation, il n’apparaît pas dans la liste, mais vous pouvez choisir ceci “default Xsession” Cela lancera les instructions présentes dans votre fichier ~/.xsession
Et c’est dans ce fichier que nous allons écrire les commandes que nous voulons lancer. Voici un exemple de son contenu :
exec dwm
On ne peut faire plus simple !
En effet, c’est simple mais par conséquent, cela ne fait pas grand chose à par lancer dwm. Mais c’est déjà bien pour le moment et nous allons pouvoir tester un peu la bête !
Vous arrivez alors sur un espace de travail qui affiche le fond d’écran que vous aviez dans votre login manager lightdm et une barre en haut de l’écran affichant les numéros de 1 à 9. Ces numéros, représentent des “bureaux virtuels”, ce sont des espaces de travail sur lesquels des fenêtres vont être rattachés et donc s’afficher à l’écran uniquement lorsque vous serez sur l’espace en question. C’est très pratique pour compartimenter son travail et ranger les applications par thème. Cela permet d’être efficace et de ne pas passer un temps trop long à chercher ses fenêtres. Dans le langage de dwm, ces bureaux virtuels sont appelés des “tags”, nous utiliserons ce nouveau vocable pour la suite de l’article.
Configuration
Avant de commencer toute configuration, il faut copier dans le dossier des sources de dwm, le fichier modèle de configuration comme ceci :
cp config.def.h config.h
Vous ferez alors vos configurations, dans ce nouveau fichier “config.h”.
Changer le shell par défaut
Lorsque vous ferez la combinaison de touche qui permet de lancer un shell, dwm tentera de lancer “st”. C’est un émulateur de terminal développé par le projet suckless au même titre que dwm. “st” signifie Simple Terminal. Afin de ne pas nous compliquer la tâche pour le moment, nous allons remplacer cet émulateur par celui de votre choix. Pour ma part ce sera “mate-terminal”, mais vous pouvez mettre “xterm” ou “urxvt” par exemple.
Pour configurer cela, il faut modifier le fichier “config.h” et à la ligne 61 pour “termcmd”, replacer “st” par celui de votre choix.
Exemple :
static const char *termcmd[] = { “mate-terminal”, NULL };
Pour la prise en compte, une petite compilation s’impose :
sudo make clean install
Changer de tag avec un clavier azerty
Le raccourci clavier pour changer de tag est “alt + un chiffre”, par exemple “alt2” pour aller au tag numéro 2. Cependant, dwm est prévu pour un clavier de type “qwerty” et donc cette combinaison de touche n’a aucun effet si l’on ne change pas la configuration par défaut.
Voici la configuration à mettre dans votre fichier “config.h” à la place des lignes existantes. Dans la version 6.3 de dwm, cela se situe à la ligne 88.
TAGKEYS( 0x26, 0)
TAGKEYS( 0xe9, 1)
TAGKEYS( 0x22, 2)
TAGKEYS( 0x27, 3)
TAGKEYS( 0x28, 4)
TAGKEYS( 0x2d, 5)
TAGKEYS( 0xe8, 6)
TAGKEYS( 0x5f, 7)
TAGKEYS( 0xe7, 8)
En fait les lignes “TAGKEYS” sont déjà présentes, ce sont juste les valeurs qui changent afin de correspondre à un clavier “azerty”. Si vous avez bien suivi, afin de prendre en compte vos nouveaux paramètres, il faut donc recompiler dwm.
Rappel : sudo make clean install
Il suffit ensuite de quitter dwm (alt+shift+q) et de vous authentifier à nouveau.
La barre de statut
Par défaut, dwm affichera sa version tout en haut à droite de l’écran, cet emplacement est la barre de statut. Évidemment vous pouvez mettre ce que vous voulez dans cette barre et sa configuration est simple ! Cette fois ci, il n’y aura pas besoin de recompiler dwm pour afficher des informations, car le texte affiché est la propriété WM_NAME de la fenêtre principale de X.org. Renseigner cette valeur peut-être fait par une simple ligne de commande :
xsetroot -name "Démonstration de la barre de statut :)"
Si vous êtes dans un shell dans dwm et que vous saisissez cette ligne de commande, vous verrez les modifications se faire immédiatement. Évidemment, vous n’allez pas taper cette ligne de commande à chaque fois que vous aller lancer dwm pour avoir un texte personnalisé dans la barre de statut. Maintenant regardons comment avoir l’heure dans cette barre d’information. Il est possible d’exécuter une commande à la place du texte pour l’option “-name” de xsetroot. Cela se fait avec les “backquotes”. Voici donc la ligne de commande à exécuter pour mettre l’heure dans la barre de statut :
xsetroot -name `date`
Cependant, si vous attendez un moment, vous verrez que l’heure ne change pas. Et c’est dommage pour une information comme l’heure ;) La solution consiste à exécuter cette commande toutes les une seconde dans le boucle. Voici le code :
while xsetroot -name "`date`"
do
sleep 1
done
Mais avec ce bout de code, vous serrez obligé de le faire à chaque lancement de dwm.
Avoir cette barre de statut automatiquement
Pour avoir cette barre de statut automatiquement au démarrage de dwm, il faut renseigner dans le fichier ~/.xsession avant la ligne “exec dwm” ceci :
while xsetroot -name "`date`"
do
sleep 1
done &
Notez bien le “&” à la fin de la ligne “done”. C’est important, car sans cela, dwm ne se lancera jamais étant donné que votre fichier ~/.xsession est lu séquentiellement. C’est la commande “exec dwm” qui doit terminer ce fichier.
Le systray
Vous avez sans doute remarqué qu’il n’y a pas de zone “systray” (zone de notification) dans la barre de dwm. Comment donc avoir son network manager ou l’icône de la gestion du volume ? Il faut deux choses : avoir la prise en charge de la “zone de notification” et avoir également lancé les applications que l’on souhaite y afficher. Cependant, dwm n’est pas prévu par défaut pour avoir un systray. Mais rassurez-vous, un patch existe !
Sur le site officiel, un grand nombre de patchs pour dwm sont disponibles. Parmi eux, se trouve le patch “systray”, qui permet d’avoir une zone de notification dans la barre en haut à droite pour les icônes de type systray.
Voici comment appliquer le patch, placez vous dans le dossier des sources de dwm, puis :
wget https://dwm.suckless.org/patches/systray/dwm-systray-20200914-61bb8b2.diff
patch -p1 < dwm-systray-20200914-61bb8b2.diff
sudo make clean install
Il suffit de relancer dwm pour profiter de ces belles icônes :)
Évidemment il faut que les logiciels concernés soient lancés pour que leurs icônes s’affichent dans le systray, c’est logique. Pour ce faire, il suffit d’indiquer dans votre fichier ~/.xsession ce que vous voulez lancer suivi du caractère “&” le tout, avant la ligne “exec dwm”. Par exemple, pour lancer l’icône systray du gestionnaire bluetooth, il suffit d’écrire cela :
blueman-tray &
Utilisation de dwm
Maintenant que tout est bien installé et configuré passons au plus important, l’utilisation du gestionnaire de fenêtre ! Vous êtes donc sur un écran “vide” avec une barre en haut de l’écran, affichant les tags existants et la barre de statut. Éventuellement, vos icônes dans le systray.
Pour ouvrir un terminal, utilisez la combinaison de touche “Alt + Shift + Entrée”.
Par défaut, dwm fonctionne en mode “tile”. Si vous avez seulement une fenêtre ouverte, elle occupera tout l’écran disponible. Si vous en lancez une seconde (Alt + Shift + Entrée, pour un second terminal), l’écran se retrouvera divisé en deux de manière verticale mais vos fenêtres resterons optimisées pour occuper tout l’espace écran disponible. Si vous ouvrez un troisième terminal, les deux premiers seront empilés (stackés) dans la partie de droite. Et ainsi de suite. La partie de gauche s’appelle la zone “master” et contient une seule fenêtre, c’est sensé être votre fenêtre principale, étant donnée que c’est elle qui aura le plus d’espace d’écran alloué.
Voici un petit schéma expliquant cela :

Si vous voulez inverser une fenêtre de la stack avec celle de la zone master afin que cette dernière devienne master, il suffit d’avoir le focus sur la fenêtre en question et d’appuyer sur “Alt + Entrer”.
Vous avez donc maintenant trop de fenêtre, mais comment les fermer ? Si c’est un terminal, vous pouvez simplement taper “exit” ou effectuer un Ctrl + d, pour en sortir, la fenêtre se fermera. Si par exemple, depuis un xterm vous avez lancé xclock, il nous faut une combinaison de touche pour la fermer. C’est Alt + Shift + c (comme close)
Pour finir l’introduction, voyons comment changer de “tag” ? Vous vous souvenez ce sont les “bureaux virtuels”. Normalement, tous les tests que vous venez de faire sont sur le tag 1, et les autres tags sont encore vide de fenêtre. Si vous voulez changer de tag pour ouvrir une autre fenêtre dans le tag 2 par exemple, il suffit de faire la combinaison de touche “Alt + 2”. Aussi simple que cela. Et bien évidemment pour revenir au tag 1, “Alt + 1”. Lorsque vous êtes dans le tag 3 par exemple, si vous lancez un shell ou un logiciel (firefox), il sera visible uniquement dans ce tag.
Changer le focus entre les fenêtres
Pour basculer entre les fenêtres utilisez la combinaison de touche Alt + j ou Alt + k. Alt + j fait tourner le focus dans le sens horaire tandis que “Alt + k” fait l’inverse. Bien sur, vous pouvez basculer entre les fenêtres en déplaçant la souris dessus. Lorsque la souris passe sur une fenêtre celle-ci prend automatiquement le focus, vous n’avez pas besoin de cliquer dedans. C’est pratique, une chose de moins à faire ! Vous voyez le concept là ? Ce gestionnaire de fenêtre est fait pour vous simplifier la vie.
OK c’est bien ça, mais est-ce qu’il y a d’autres façons de gérer les fenêtres ? La réponse est oui ! Dwm a trois algorithmes de gestion de fenêtres: tile, float et monocle. Tile est le mode que vous utilisez depuis le début de vos essais (normalement ;)), float permet d’avoir des fenêtres flottantes, comme sous Windows, MacOS, KDE ou Gnome et monocle met la fenêtre en plein écran et “cache” les autres.
Ce qui est pratique, c’est que rien n’est figé et il est possible de basculer entre ces modes avec la combinaison de touches Alt + Espace. Et là on sent toute la puissance de dwm ! Petite note : on ne bascule pas en “monocle”, mais ont fait passer la fenêtre qui a le focus en monocle via la combinaison de touche “Alt + m”. Ensuite, pour revenir à la précédente disposition, admettons “tile”, il suffit de faire “Alt + t”, si c’était le mode float, alors c’est “Alt + f”. Pour information, une fenêtre toute seule, en mode “tile”, équivaut, en taille, à une fenêtre en mode “monocle”.
Pour savoir dans quel type d’algorithme dwm se trouve à un instant T, il faut regarder ce qui s’affiche juste à droite du dernier tag (9).
Pour le mode tile, le signe est []=
Pour le mode float, le signe est ><>
Pour le mode monocle, le signe est [M]
Le mode tile
Si vous voulez changer la taille de la fenêtre master, il suffit de faire au clavier : Alt + h ou Alt + l, pour respectivement réduire ou augmenter sa taille. Bien évidemment cela fonctionne uniquement si vous avez au moins deux fenêtres à l’écran. En effet, si vous avez une seule fenêtre, la taille ne changera pas, le but de dwm étant d’occuper tout l’espace possible.
Le mode float
Si vous changez de mode (Alt + f) pour basculer en mode float (><>) puis que vous lancez une application, la fenêtre aura alors sa taille normale et pourra être déplacée et redimensionnée. Pour déplacer la fenêtre, il faut maintenir la touche “Alt” enfoncée, puis tenir le clic gauche enfoncé pendant que vous déplacez votre souris. Pour redimensionner la fenêtre, il faut faire la même chose mais avec le clic droit de la souris. Le mode float peut-être utilisé, par exemple, pour l’application Gimp qui fonctionne par défaut avec trois fenêtres distinctes.
Le mode monocle
Une fois que vous êtes en mode monocle (Alt + m), ce n’est pas bien compliqué : toutes les fenêtres utilisent tout l’espace de l’écran. Donc si vous avez 3 fenêtres, vous en verrez une seule, et pour changer de fenêtre, faites simplement “Alt + k”.
Déplacer une fenêtre sur un autre tag
Si par erreur vous avez lancé une fenêtre sur le tag 1 mais que finalement vous voulez l’avoir sur le tag 3, rien de plus simple ! Lorsque vous avez le focus sur la fenêtre désirée, appuyez alors sur : “Alt + Shift + 3”. Cela déplacera la fenêtre sur le tag 3. Ensuite, rendez-vous au tag 3 avec: “alt + 3”
Lancement d’applications graphiques
Si vous avez lancé firefox vous avez sûrement dû le faire depuis un terminal déjà ouvert. Cela fonctionne mais n’est pas très pratique. Un petit menu disponible avec le raccourci “Alt + p” permet de lancer des applications. C’est un autre outil du projet suckless, il se nomme “dmenu”. Pour l’installer sous Debian faites ceci :
sudo apt install suckless-tools
Lorsque vous appuyez sur “Alt + p”, dans ce menu qui s’affiche sur le haut de votre écran, vous pouvez taper le début d’un nom de logiciel, par exemple “fire” pour firefox et automatiquement dmenu vous proposera des choix, dont firefox. Vous pouvez vous déplacer dans ces choix via les flèches gauche et droite de votre clavier, et valider votre choix par la touche entré tout simplement. Sobre et efficace !
Remplacer la touche “Alt”
Depuis le début, tous les raccourcis clavier utilisent la touche “Alt”. Mais si vous préférez mettre la touche “Logo” de votre clavier, celle situé entre “Ctrl” et “Alt”, celle où est souvent imprimé le logo Windows, il faut alors dans votre fichier config.h modifier ceci à la ligne 53:
#define MODKEY Mod1Mask
Remplacez Mod1Mask par Mod4Mask.
La touche “Alt” équivaut à Mod1Mask. La touche “Logo” équivaut à Mod4Mask.
Petit résumé des raccourcis clavier
Nous avons vu au cours de l’article comment utiliser dwm et ses raccourcis clavier. En voici un condensé qui vous sera utile pour les premiers jours. Ensuite, avec la pratique vous les connaîtrez tous par cœur !
Ouvrir un shell : alt + shift + entrer
Fermer une fenêtre : alt + shit + c
Basculer à la fenêtre suivante : alt + k
Basculer à la fenêtre précédente : alt + j
Changer la taille d’une fenêtre : alt + h ou alt + l
Changer de mode de fenêtrage :
- alt + t = tile
- alt + m = monocle
- alt + f = float
- vous pouvez aussi utiliser “alt + espace” qui va boucler sur les modes de fenêtrage disponibles.
Cacher la barre supérieure de statut : alt + b
Mettre une fenêtre de la stack à la place de celle de master : alt + entrer (la fenêtre qui était sur master par sur le haut de la stack)
Ouvrir dmenu pour lancer une application graphique : alt + p
Quitter dwm : alt + shift + q
Conclusion
Dwm se veut simple, efficace et léger. L’essayer, c’est l’adopter ! Passé la courbe d’apprentissage de quelques heures, dwm vous fera gagner en efficacité. Au fait, le binaire compilé sur x86_64 fait 74Ko. Enjoy !