Dwm es un manejador de ventanas simple con apenas 2000 lineas de código, se basa en la filosofía suckless (sus creadores, basada en la UNIX) y KISS, esta consiste en que la mayoría de programadores creen que entre mas lineas de código le vayan añadiendo a su programa van avanzando, y lo que ellos dicen es que entre mas lineas de código vas quitando mas vas avanzando.
(Mi escritorio con dwm – dar click a la imagen para agrandar)
Este manejador de ventanas es el papa de los tiled window manager como lo es: wmii, wmi, awesome, teslawm, entre otros.
También este manejador de ventanas esta pensado para usarse con teclado totalmente para aumentar la productividad aunque tiene funciones básicas de mouse.
Un tiled window manager es un manejador de ventanas que en lugar de que al abrir otra ventana se ponga atrás de la otra, la otra se acomoda y deja espacio a la otra.
Otra ventaja que presenta es que no tiene bordes por lo cual espacio de navegación es mas grande y no hay necesidad de perder tiempo arrastrando el mouse para cerrar, minimizar, etc…
Instalación
- Arch Linux
Los usuarios de arch podemos instalarlo con:
pacman -S dwm
Para configurárlo sin joder la configuración original podemos usar el asombroso ABS
pacman base-devel -S abs
Después como root sincronizamos ABS:
abs
copiamos a nuestra home para poderlo editar (después)
cp -r /var/abs/community/dwm ~/dwm
Otras Distros
Los usuarios de otras distros (ubuntu…) tendrán que hacerlo a la antigua ya que en cada cambio hay que compilarlo.
necesitaran instalar las siguientes dependencias: build-essential libx11-dev libxinerama-dev sharutils
después descargamos:
wget http://dl.suckless.org/dwm/dwm-5.8.2.tar.gz
descomprimimos:
tar -xzf dwm-5.8.2.tar.gz
instalamos
make
make install
tendremos que añadir la entrada a kdm, gdm, slim etc.. (todas las distros)
Configuración
encontraremos un config.h y un dwm.c
el que trae la configuración para usuario es config.h
lo explicare un poco:
En esta parte modificamos la apariencia general (esta comentado lo importante – NO COPIAR Y PEGAR EN SU config.h ya que el mio tiene patches que el suyo no):
/* appearance */
static const char font[] = "-*-gohufont-medium-*-*-*-*-*-*-*-*-*-*-*"; /*font*/
static const char normbordercolor[] = "#292929"; /*borde ventana inactiva*/
static const char normbgcolor[] = "#0f0f11"; /*fondo tags inactivos*/
static const char normfgcolor[] = "#4c4c4c"; /*texto inactivo*/
static const char selbordercolor[] = "#707070"; /*borde ventana activa*/
static const char selbgcolor[] = "#0f0f11"; /*fondo de tags activos*/
static const char selfgcolor[] = "#999999"; /*tag activo*/
static const unsigned int borderpx = 1; /* borde en pixeesl ventanas */
static const unsigned int gappx = 6; /* gap pixel between windows */
static const unsigned int snap = 32; /* snap pixel */
static const Bool showbar = True; /* False sin barra */
static const Bool topbar = True; /* False barra es arriba */
/* tagging (son como escritorios) */
static const char *tags[] = { “K, “www”, “F”, “Oo”,}; /*nombre de los tags */
/*en que tag se abre cada programa y de que modo*/
static const Rule rules[] = {
/* class instance title tags mask isfloating monitor */
{ “Gimp”, NULL, NULL, 1 << 3, True, -1 },
{ “Opera”, NULL, NULL, 1 << 2, False, -1 },
{ “emesene”, NULL, NULL, 1 << 2, False, -1 },
{ “kmess”, NULL, NULL, 2 << 2, True, -1 },
{ “firefox”, NULL, NULL, 1 << 2, False, -1 },
{ “trayer”, NULL, NULL, 3 << 6, True, -1 },
{ “wicd-client”, NULL, NULL, 3 << 5, True, -1 }, }; /* layout(s) seguro ustedes no tendran esto */ static const float mfact = 0.55; /* factor of master area size [0.05..0.95] */ #include “bstack.c” #include “bstackhoriz.c” static const int nmaster = 2; /* default number of clients in the master area */ #include “nmaster-sym.c” static const Bool resizehints = True; /* True means respect size hints in tiled resizals */ /* modos de layouts*/ static const Layout layouts[] = { /* symbol arrange function */ { “[]=”, tile }, /* first entry is default */ { “><>”, NULL }, /* no layout function means floating behavior */
{ “[M]“, monocle },
{ “TTT”, bstack },
{ “===”, bstackhoriz },
{ “-|=”, ntile },
{ “-|-”, nbstack },
};
/* key definitions */
#define MODKEY Mod4Mask
#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”, selbgc$
static const char *termcmd[] = { “urxvt”, NULL };
static Key keys[] = {
/* modifier key function argument */
{ MODKEY, XK_p, spawn, {.v = dmenucmd } },
{ MODKEY|ShiftMask, XK_Return, spawn, {.v = termcmd } },
{ 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_q, setlayout, {.v = &layouts[0]} },
{ MODKEY, XK_w, setlayout, {.v = &layouts[1]} },
{ MODKEY, XK_e, setlayout, {.v = &layouts[2]} },
{ MODKEY, XK_r, setlayout, {.v = &layouts[3]} },
{ MODKEY, XK_t, setlayout, {.v = &layouts[4]} },
{ MODKEY, XK_y, setlayout, {.v = &layouts[5] } },
{ MODKEY, XK_u, setlayout, {.v = &layouts[6] } },
{ MODKEY, XK_a, incnmaster, {.i = +1 } },
{ MODKEY, XK_z, incnmaster, {.i = -1 } },
{ MODKEY, XK_x, setnmaster, {.i = 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} },
};
/* 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, zoom, {0} },
{ ClkStatusText, 0, Button2, spawn, {.v = termcmd } },
{ 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} },
};
Despues de los cambios que hayamos hecho hay que recompilar,
en arch:
makepkg -g > PKGBUILD
makepkg -efi
otras distros:
make
make install
Extras parches y demas:
Aplicaciones que queramos al incio:
solo agregamos al .xinitrc los programas que queramos al inicio finalizándolo con un “&“, ejemplo:
wicd -client &
programa –cualquiera &
Wallpaper: podemos ponerlo facilmente con feh o nitrogen, me da flojera explicarles feh (es el que yo uso) asi que les dare nitrogen.
pacman -S nitrogen #arch
sudo apt-get install nitrogen #ubuntu
ejecutamos nitrogen seleccionamos wallpaper y listo.
en el .xinitrc solo agregamos:
nitrogen --restore &
En la web de dwm nos da instrucciones de como poner parches mas modos de tiling etc…
En otro post profundizare un poco mas en esto.











Vamos... sabemos que quieres comentar algo ;)