DWM – Gestionnaire de fenêtres

Préambule

DWM est un gestionnaire de fenêtre simple, léger et rapide. Il appartient au projet http://suckless.org. Il utilise la méthode du “tilling” pour afficher les fenêtres sur l’écran, c’est à dire qu’il utilise au mieux l’espace disponible. Enfin, il se configure en modifiant directement le fichier source (en C) et se compile en un seul binaire.

Screenshots

DWM - Mode Tilling

DWM - Mode Tilling

DWM - Mode Flottant

DWM - Mode Flottant

DWM - Firefox

DWM - Firefox

Installation

Sur Archlinux, si vous voulez tester DWM, il suffit d’installer le paquet dwm et dmenu (optionnel) :

yaourt -S dwm
yaourt -S dmenu

Cependant, si vous voulez configurer DWM, il est préférable de télécharger les sources via HG et de compiler à la main… Je vous rassure tout de suite : c’est très simple et rapide!

Installez hg :

yaourt -S hg

Placez vous dans le répertoire de votre choix et tapez la commande suivante pour récupérer la version actuelle de DWM :

hg clone http://code.suckless.org/hg/dwm

Hg va télécharger la version à jour de DWM dans le répertoire dwm/. Une fois le téléchargement fini, vous allez pouvoir commencer à configurer DWM (voir chapitre suivant).

Une fois votre configuration terminée, pour compiler DWM, il suffit de lancer la commande :

make clean

Enfin vous pouvez installer DWM avec la commande :

sudo make install

Lancement de DWM via xinitrc

Pour lancer DWM via le fichier ~/.xinitrc, il suffit d’appeler DWM de cette façon :

while true
do
    xsetroot -name "`date +'%d/%m/%Y %k:%M'`"
    sleep 1
done &
bgs images/wallpapers/background.png &
exec /usr/local/bin/dwm

Dans la boucle while true / do { code } / done, on exécute cette commande toutes les secondes :

xsetroot -name "`date +'%d/%m/%Y %k:%M'`"

Elle permet de remplir la barre de statut de DWM (en haut à gauche) avec l’heure. Dedans on peut par exemple afficher le réseau wifi et sa qualité, l’état de la batterie, etc.

Ensuite, la ligne suivante appelle bgs pour afficher un fond d’écran puis on appelle DWM (installé dans /usr/local/bin si compilé à la main).

Configuration

Pour configurer l’aspect, les raccourcis clavier ou encore les fonctions, tout ce situe dans le fichier config.h.

Pour configurer le thème, c’est tout au début du fichier, on déclare les constantes suivantes :

/* appearance */
#define SHOWBAR                       True      /* False means no bar */
#define TOPBAR                        True      /* False means bottom bar */
static const char font[]            = "-*-*-medium-*-*-*-14-*-*-*-*-*-*-*";
static const char normbordercolor[] = "#4d4d4d";
static const char normbgcolor[]     = "#4d4d4d";
static const char normfgcolor[]     = "#7f7f7f";
static const char selbordercolor[]  = "#aeeb3d";
static const char selbgcolor[]      = "#7f7f7f";
static const char selfgcolor[]      = "#aeeb3d";
static unsigned int borderpx        = 2;        /* border pixel of windows */
static unsigned int snap            = 32;       /* snap pixel */

Par défaut, DWM utilise le terminal xterm… Si vous aimez les jolis desktop, vous pouvez installer urxvt et ainsi profiter de la transparence et plein d’autres options futiles mais sympa.

Dans le fichier config.h, il faut soit templacer le shortcut qui lance xerm par celui pour urxvt ou alors en ajouter un nouveau (j’ai choisit Ctrl + ModKey + Return ) :

/* commands */
static const char *dmenucmd[] = { "dmenu_run", "-fn", font, "-nb", normbgcolor, "-nf", normfgcolor, "-sb", selbgcolor, "-sf", selfgcolor, NULL };
static const char *termcmd[]  = { "uxterm", NULL };
static const char *rxvtcmd[]  = { "urxvt", NULL };

On déclare donc dans la section /* commands */ un pointeur vers une constante statique *rxvtcmd[] puis dans la sectiondes shortcuts on ajoute une ligne (en vert) :

static Key keys[] = {
 /* modifier                     key        function        argument */
 { MODKEY,                       XK_p,      spawn,          {.v = dmenucmd } },
 { MODKEY|ShiftMask,             XK_Return, spawn,          {.v = termcmd } },
 { MODKEY|ControlMask,           XK_Return, spawn,          {.v = rxvtcmd } },
 { MODKEY,                       XK_b,      togglebar,      {0} },
 { MODKEY,                       XK_j,      focusstack,     {.i = +1 } },
 { MODKEY,                       XK_k,      focusstack,     {.i = -1 } },
 { MODKEY,                       XK_h,      setmfact,       {.f = -0.05} },
 { MODKEY,                       XK_l,      setmfact,       {.f = +0.05} },
 { MODKEY,                       XK_Return, zoom,           {0} },
 { MODKEY,                       XK_Tab,    view,           {0} },
 { MODKEY|ShiftMask,             XK_c,      killclient,     {0} },
 { MODKEY,                       XK_Escape, killclient,     {0} },
 { MODKEY,                       XK_t,      setlayout,      {.v = &layouts[0]} },
 { MODKEY,                       XK_f,      setlayout,      {.v = &layouts[1]} },
 { MODKEY,                       XK_m,      setlayout,      {.v = &layouts[2]} },
 { MODKEY,                       XK_space,  setlayout,      {0} },
 { MODKEY|ShiftMask,             XK_space,  togglefloating, {0} },
 { MODKEY,                       XK_0,      view,           {.ui = ~0 } },
 { MODKEY|ShiftMask,             XK_0,      tag,            {.ui = ~0 } },
 { MODKEY,                       XK_comma,  focusmon,       {.i = -1 } },
 { MODKEY,                       XK_period, focusmon,       {.i = +1 } },
 { MODKEY|ShiftMask,             XK_comma,  tagmon,         {.i = -1 } },
 { MODKEY|ShiftMask,             XK_period, tagmon,         {.i = +1 } },
 TAGKEYS(                        XK_1,                      0)
 TAGKEYS(                        XK_2,                      1)
 TAGKEYS(                        XK_3,                      2)
 TAGKEYS(                        XK_4,                      3)
 TAGKEYS(                        XK_5,                      4)
 TAGKEYS(                        XK_6,                      5)
 TAGKEYS(                        XK_7,                      6)
 TAGKEYS(                        XK_8,                      7)
 TAGKEYS(                        XK_9,                      8)
 { MODKEY|ShiftMask,             XK_q,      quit,           {0} },
};

Enfin il faut modifier le fichier .Xdefaults pour passer les paramétres à urxvt pour la transparence :

!
! .Xdefaults : X configuration by Julien Pecqueur
!

! GENERALITES POUR XTERM
xterm*font:        		-*-*-medium-*-*-*-14-*-*-*-*-*-*-*
xterm*visualbell:   	true
xterm*cursorblink:  	true
xterm*background:   	#333333
xterm*foreground:   	white

! GENERALITES POUR URXVT
! +sb -tr -fade 20 -tint black -sh 50 -fg white -bg black
URxvt*font:        		-*-*-medium-*-*-*-14-*-*-*-*-*-*-*
URxvt*fade:        		20
URxvt*tint:        		black
URxvt*background:   	#333333
URxvt*foreground:   	white
URxvt*transparent:  	on
URxvt*shading:      	50
URxvt*scrollBar:    	off
URxvt.urlLauncher:  	firefox
URxvt.matcher.button:   2
URxvt.perl-ext-common:  matcher
URxvt.cursorBlink:    	true
URxvt.visualBell:    	true

Diverses astuces/informations pour DWM

Lien vers les articles sur DWM dans la partie blog.

Comments are closed.