Dwm

De Le Wiki du Forum-Debian.fr
Aller à la navigation Aller à la recherche

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 :

un exemple d'utilisation de dwm

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.

Liens externes