Fervent utilisateur de dwm depuis longtemps, j'ai toujours eu du mal à passer à autre chose. Les habitudes sont ancrées, tout est à portée de main, c'est simple... C'est une retrouvaille avec un vieux copain du forum debian-fr sur obsd4a (coucou eol ;) ) qui m'a donné envie de consacrer un peu de temps à un gestionnaire inclus par défaut dans OpenBSD : calm window manager ou cwm.
Il me semble qu'il s'agit là d'une belle réussite très bien pensée. L'équilibre entre fonctionnalités, ergonomie et part de configuration laissée à l'utilisateur est trouvé. Pour ma part, ça m'aide à être efficace et plus concentré.

Par contre, on ne va pas se mentir, quand on vient de gnome, ça peut être déroutant au début. Cela dit, si ça vous tente, je vous propose de faire un petit tour de ce gestionnaire de fenêtre (disponible aussi sur les distributions GNU/Linux) pour découvrir sa façon d'être. On tentera d'utiliser autant que possible les composants livrés avec OpenBSD par défaut.

Découverte et configuration

Sous OpenBSD, pour lancer une session cwm, je n'ai qu'à mettre dans le fichier ~/.xsession la ligne suivante :

cwm

Une fois la session démarrée, vous avez devant vous un écran tout gris. Beurk. C'est normal cela dit, puisque ce n'est pas au gestionnaire de fenêtres de gérer le fond d'écran. On va y remédier, ne vous en faîtes pas.

Tout d'abord, on va ouvrir un terminal. Pour ça, deux choix s'offrent à vous :

  • Ctrl-Alt-Entrée : pouf, xterm s'ouvre.
  • Alt-? : un menu pour écrire la commande s'affiche, vous pouvez alors écrire le nom de votre terminal favori.

Pour déplacer la fenêtre, un glisser-déposer avec la souris tout en appuyant sur Alt fera votre bonheur.
Pour redimensionner la fenêtre, là aussi plusieurs possibilités :

  • Ctrl-Alt-m : maximise la fenêtre
  • Ctrl-Alt-Shift-[hjkl] : selon la lettre choisie, vous redimensionnez la fenêtre
  • Alt-clic milieu : redimensionnement par glissé déposer.

Pour fermer une fenêtre, appuyez sur Ctrl-Alt-x.

Pour changer de fenêtre, vous avez toujours Alt-Tab, ou bien vous cliquez sur le bureau pour avoir un menu de sélection de fenêtre. On ne s'encombre pas avec une barre d'état, on reste concentré sur son travail :) Vous pouvez aussi appuyer sur Ctrl-/ puis taper le nom de la fenêtre. Si vous ne vous souvenez plus de son nom, appuyez sur Ctrl-a.

Ça semble faire beaucoup de raccourcis, mais ils ont tous une certaine logique et on s'y retrouve vite. Si vous n'aimez pas les raccourcis clavier, sachez que :

  • Un clic-gauche sur le bureau fait apparaître la liste des fenêtres
  • Un clic-droit fait apparaitre la liste des applications définies dans la configuration (vide par défaut)
  • Un clic-milieu fait apparaître la liste des groupes.

Dans la suite, j'écrirai "C" pour "Ctrl", "M" pour "Alt", "S" pour "Shift" et "4" pour la touche "Super" ou "Windows" qui ne sert à rien habituellement. Ces lettres sont celles utilisées dans la configuration.

Une des particularités de cwm est de permettre de :

  • Pouvoir étiqueter une fenêtre (ajout d'un label) afin de la retrouver facilement ensuite (Ctrl-Alt-n).
  • Placer les fenêtres dans des groupes. Ça ressemble aux espaces de travail auxquels vous êtes habitués, ainsi qu'aux tag de dwm.

À partir de ce moment-là, vous voudrez certainement éditer le fichier de configuration ~/.cwmrc afin d'y régler 2-3 choses.
Si vous souhaitez savoir ce que vous pouvez configurer, les pages "man cwm" et "man cwmrc" vous en diront plus.

Via ce lien, vous trouverez mon fichier de configuration si vous voulez regarder ce qui est possible. Rien de très étonnant dans ce que j'ai mis hein.
J'attire juste votre attention sur les éléments de configuration suivants :

Menu clic-droit

command "   Web   " firefox
command "   Mail  " 'xterm -class "mutt" -fa "Hack:size=10:antialias=true" mutt'
command "  Files  " pcmanfm
command " > next  " "mpc next"
command " < prev  " "mpc prev"
command "|> toggle" "mpc toggle"
command "   top   " "xterm top"

Avec Alt-Tab, je passe d'un groupe à l'autre rapidement

bind-key M-Tab group-cycle
bind-key MS-Tab group-rcycle

Tiling rapide
Pour un arrangement rapide en mode "tiling" des fenêtres, j'utilise Alt-t ou Alt-Return comme dans dwm. M-S-t permet un arrangement vertical. Et ça, ça claque des fesses ! :D

bind-key M-t window-vtile
bind-key M-Return window-vtile
bind-key MS-t window-htile

à la dwm
Puisque je parle de dwm, j'utilise les mêmes raccourcis pour passer d'un groupe à l'autre et assigner les fenêtres à des groupes facilement. Si vous cherchez les noms des touches, tapes "xev" dans un terminal puis appuyez sur la touche, vous verrez alors son petit nom.

bind-key M-ampersand        group-only-1
bind-key M-eacute           group-only-2
bind-key M-quotedbl         group-only-3
bind-key M-apostrophe       group-only-4
bind-key M-parenleft        group-only-5
bind-key M-minus            group-only-6
bind-key M-egrave           group-only-7
bind-key M-underscore       group-only-8
bind-key M-ccedilla         group-only-9
bind-key M-agrave           group-toggle-all

# Déplacer les fenêtres dans un groupe
bind-key MS-ampersand        window-movetogroup-1
bind-key MS-eacute           window-movetogroup-2
bind-key MS-quotedbl         window-movetogroup-3
bind-key MS-apostrophe       window-movetogroup-4
bind-key MS-parenleft        window-movetogroup-5
bind-key MS-minus            window-movetogroup-6
bind-key MS-egrave           window-movetogroup-7
bind-key MS-underscore       window-movetogroup-8
bind-key MS-ccedilla         window-movetogroup-9

Et tout autour?
Si vous avez bien regardé la capture d'écran au début, vous avez peut-être remarqué une barre tout en haut et des couleurs "solarized". C'est la partie rigolote où je vous montre mes scripts :P

Le fond d'écran
Le fond d'écran est chargé avec qiv au démarrage. En fait, ça tourne entre plusieurs fonds d'écran.
Si vous voulez rester simple, vous pouvez mettre une couleur pleine avec xsetroot (pas besoin d'installer quoi que ce soit) :

xsetroot -solid steelblue

La barre
La barre est un simple conky, dont la configuration est là : conkyrc. Il m'affiche la chanson jouée dans mpd, le nombre de nouveaux mails dans mes boîtes et la date et l'heure.
Mais ce n'est pas tout, tout à gauche, j'ai aussi les numéros des groupes utilisés par des fenêtres. Ça m'évite de les chercher, bien que je pourrais m'en passer.
Pour ça, je fais appel au script suivant :

#!/bin/sh

CURGROUP=$(xprop -root -notype _NET_CURRENT_DESKTOP | cut -d'=' -f2)

USEDGROUPS=$(
for ID in $(xprop -root -notype _NET_CLIENT_LIST | cut -d'#' -f 2); do
	#echo $(xprop -id "$ID" -notype _NET_WM_DESKTOP WM_NAME)
	echo $(xprop -id "$ID" -notype _NET_WM_DESKTOP |cut -d'=' -f 2)
done | sort -u
)

for G in $USEDGROUPS; do
	if [ $G -lt 10 ]; then
		if [ $G -eq $CURGROUP ]; then
			echo -n "\${color3}$G\${color} "
		else
			echo -n "$G "
		fi
	fi
done

Ce n'est plus très utile quand on tourne entre les groupes avec Alt-Tab comme configuré plus haut.

Le terminal
J'ai décidé d'utiliser les outils livrés par défaut avec OpenBSD. Donc xterm au lieu de st. Ici, vous trouverez le fichier de configuration pour les couleurs, faire du copier/coller dans le terminal...
Ce fichier doit être chargé au démarrage avec la commande

xrdb -load ~/.Xdefaults

Le démarrage de session
Pour prendre en compte tous ces petits ajouts à chaque démarrage, modifiez le script ~/.xsession ainsi :


#!/bin/sh
.  ~/.profile
# Fond d'écran
# ou qiv -z /chemin/vers/fond/decran
xsetroot -solid steelblue &
# Chargement des options pour xterm
xrdb -load ~/.Xdefaults &
# Verouillage automatique avec xlock
xautolock -time 10 -locker xlock &
conky &

cwm

Les "&" à la fin sont importants. Ajoutez dans ce fichier tous les outils que vous souhaitez lancer au démarrage de session.

Trouver une fenêtre parmi des centaines
En général je n'ai pas plus de 5 ou 6 fenêtres ouvertes en même temps. Cela dit, si un jour de folie j'en ouvrais des tas, je pourrais facilement les retrouver avec le raccourci M-/. C'est pratique quand on se souvient à peu près de l'application que l'on veut ouvrir. Sauf que quand beaucoup de fenêtres sont ouvertes, on ne se souvient peut-être plus du nom de celle souhaitée. Après avoir appuyé sur M-/, vous pouvez toutes les afficher avec C-a.
C'est chiant.
À la place, j'ai fait un script à base de dmenu :

#!/bin/sh
# script to choose a window from list
# only use 'xprop' coming with X server and xdotool

. ~/.dmenurc

P="Fenêtre:"
OPTION="$COLORS -l 10 -p $P "
W=$(
(for ID in $(xprop -root -notype _NET_CLIENT_LIST | cut -d'#' -f2); do
	echo $(xprop -id "$ID" -notype WM_NAME | cut -d'=' -f 2) "::"  $(xprop -id "$ID" -notype WM_CLASS | cut -d'"' -f2) "|"    $ID
done) | dmenu $OPTION | awk 'END {print $NF}')

if [ -n "$W" ]; then
	xdotool windowactivate $W
fi
exit 0

Et après ?
Les outils suckless sont très agréable à utiliser avec cwm si vous aimez la simplicité. Par exemple, je n'aime pas trop xlock que je remplace avec slock. Et sans dmenu, je serai perdu. Tous ces scripts sans doute pas très propres me rendent bien service ! :)
Sinon, j'utilise des outils simples : mutt/fdm/msmtp pour les mails, Firefox pour la navigation (eh oui, surf aurait bien besoin d'être mis à jour), pcmanfm, qiv...

Ce gestionnaire de fenêtres porte bien son nom : avec, je me sens plus caaaaalme :)
Je suppose qu'un certain PengouinBSD va me tanner pour faire une page de wiki après cet article, et le pire, c'est qu'il a raison le bougre ;P

Si vous testez cwm, je serais ravi de voir vos astuces/idées/configurations en commentaies ;)