Dwm
dwm est un gestionnaire de fenêtre tiling. Sa vraie particularité face à wmii et awesome c'est qu'il se configure à la compilation. C'est sympa au niveau légèreté il n'a pas à effectuer de lecture de fichier supplémentaire.
Voici à quoi il peut ressembler :

Il est écrit en C. Pour commencer à le configurer je vous conseille de lire ce tutoriel que je ne reprendrais pas ici : http://www.xsnake.net/howto/dwm/dwm-fr.php Il est obsolète sur un certain nombre de points, je posterais plus tard ici mes découvertes.
Par contre à la place de la technique "classique" du make clean install, je vous propose ici une méthode debian bien plus jolie.
D'abord on va récupérer les sources :
apt-get source dwm
Cela nous télécharge quelques fichiers et un dossier, il nous suffit d'entrer dans celui-ci. Il contient les sources plus un dossier debian. On effectue les paramétrages que l'on souhaite. Puis on crée le paquet avec la commande :
dpkg-buildpackage -rfakeroot -uc -b
Ce qui va créer un fichier dwm_*.deb qu'on installe comme ça :
dpkg -i dwm_*.deb
Voila c'est installé. Personnellement je n'en suis qu'au début. Je posterais ici mes configurations.
Remarque : chez moi le fichier dwm-5.7.2/debian/desktop/dwm était mal fait. En effet pour être pris en compte par gdm il faut le renommer avec l'extension ".desktop".
Configurer la barre de status
Comme vous pouvez le voir sur la copie d'écran, il est possible d'afficher toutes sortes de choses dans la barre de dwm. Admettons que vous démarrez votre session via le fichier .xinitrc et startx , il faudra inclure ceci dans le .xinitrc
- while true; do
- xsetroot -name "$( date +"%F %R" )"
- sleep 1m # Update time every minute
- done &
- exec dwm
Ici, on affiche l'heure. En somme, vous n'êtes limité que pas votre imagination sur ce que vous souhaitez afficher. Bien entendu, si vous utilisez un gestionnaire connexion, il suffira de mettre à la place de Exec=dwm , Exec=/chemin/vers/script/de/lancement/de/dwm, script que vous aurez vous-même créé.
Notes et astuces diverses pour la françisation
Voici quelques astuces pour que dwm fonctionne bien avec votre clavier français. Voici un config.h commenté afin de vous expliquer les petits détails, et pour que ça aille plus vite pour les fainéants :
/* See LICENSE file for copyright and license details. */ /* appearance */ static const char font[] = "-*-terminus-*-*-*-*-12-*-*-*-*-*-iso10646-*"; // Changement de la police pour avoir les accents éèàù... static const char normbordercolor[] = "#EDEDED"; static const char normbgcolor[] = "#251C1A"; static const char normfgcolor[] = "#D4D4D4"; static const char selbordercolor[] = "#E2E2E2"; static const char selbgcolor[] = "#D4D4D4"; static const char selfgcolor[] = "#5B5453"; static const unsigned int borderpx = 1; /* border pixel of windows */ static const unsigned int snap = 32; /* snap pixel */ static const Bool showbar = True; /* False means no bar */ static const Bool topbar = True; /* False means bottom bar */
/* tagging */ static const char *tags[] = { "1", "2", "3", "4", "5", "6", "7", "8", "9" };};
static const Rule rules[] = { /* class instance title tags mask isfloating monitor */ { "Gimp", NULL, NULL, 0, True, -1 }, { "Gajim", NULL, NULL, 1 << 6, False, -1 }, { "MPlayer", NULL, NULL, 0, True, -1 }, { "VLC", NULL, NULL, 0, True, -1 }, };
/* layout(s) */ static const float mfact = 0.60; /* factor of master area size [0.05..0.95] */ static const Bool resizehints = True; /* True means respect size hints in tiled resizals */
static const Layout layouts[] = { /* symbol arrange function */ { "[]=", tile }, /* first entry is default */ { "><>", NULL }, /* no layout function means floating behavior */ { "[M]", monocle }, };
/* key definitions */ #define MODKEY Mod4Mask #define MODKEY2 Mod1Mask #define TAGKEYS(KEY,TAG) \ { MODKEY, KEY, view, {.ui = 1 << TAG} }, \ { MODKEY|ControlMask, KEY, toggleview, {.ui = 1 << TAG} }, \ { MODKEY|ShiftMask, KEY, tag, {.ui = 1 << TAG} }, \ { MODKEY|ControlMask|ShiftMask, KEY, toggletag, {.ui = 1 << TAG} },
/* helper for spawning shell commands in the pre dwm-5.0 fashion */ #define SHCMD(cmd) { .v = (const char*[]){ "/bin/sh", "-c", cmd, NULL } }
/* commands */ static const char *dmenucmd[] = { "dmenu_run", "-fn", font, "-nb", normbgcolor, "-nf", normfgcolor, "-sb", selbgcolor, "-sf", selfgcolor, NULL }; static const char *termcmd[] = { "urxvt", NULL }; static const char *monteson[] = { "amixer", "set", "Master", "2dB+", "unmute", NULL }; static const char *baisseson[] = { "amixer", "set", "Master", "2dB-", "unmute", NULL }; static const char *muteson[] = { "amixer", "-q", "set", "Master", "toggle", NULL }; }; static Key keys[] = { /* modifier key function argument */ { MODKEY, XK_p, spawn, {.v = dmenucmd } }, { MODKEY|ShiftMask, XK_Return, spawn, {.v = termcmd } }, { 0, 0x1008ff13, spawn, {.v = monteson } }, { 0, 0x1008ff11, spawn, {.v = baisseson } }, { 0, 0x1008ff12, spawn, {.v = muteson } }, { 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_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, 0xe0, view, {.ui = ~0 } }, //changement pour le 0 { MODKEY|ShiftMask, 0xe0, tag, {.ui = ~0 } }, // changement pour le 0, 0xe0 est le code pour la touche 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( 0x26, 0) // La touche 1 a le code 0x26 TAGKEYS( 0xe9, 1) //changement pour le 2... TAGKEYS( 0x22, 2) TAGKEYS( 0x27, 3) TAGKEYS( 0x28, 4) TAGKEYS( 0x2d, 5) TAGKEYS( 0xe8, 6) TAGKEYS( 0x5f, 7) TAGKEYS( 0xe7, 8) // changement jusqu'au 9 { MODKEY|ShiftMask, XK_q, quit, {0} }, };
/* button definitions */ /* click can be ClkLtSymbol, ClkStatusText, ClkWinTitle, ClkClientWin, or ClkRootWin */ static Button buttons[] = { /* click event mask button function argument */ { ClkLtSymbol, 0, Button1, setlayout, {0} }, { ClkLtSymbol, 0, Button3, setlayout, {.v = &layouts[2]} }, { ClkWinTitle, 0, Button2, killclient, {0} }, { ClkClientWin, MODKEY, Button1, movemouse, {0} }, { ClkClientWin, MODKEY, Button2, togglefloating, {0} }, { ClkClientWin, MODKEY, Button3, resizemouse, {0} }, { ClkTagBar, 0, Button1, view, {0} }, { ClkTagBar, 0, Button3, toggleview, {0} }, { ClkTagBar, MODKEY, Button1, tag, {0} }, { ClkTagBar, MODKEY, Button3, toggletag, {0} }, };
Notez que le code des touches peut-être récupéré avec xev lancé en console, puis ensuite appuyez sur la touche en question.