Dwm otro wm aún mas KISS – Tutorial

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.

12 thoughts on “Dwm otro wm aún mas KISS – Tutorial

    • @Setup

      te recomiendo que te leas el manual the the arch way donde explica que es simplicidad.

      la configuracion es demasiado facil, simple involucra facil omitiendo los agregados incesarios que hagan mas pesado al programa

      @Martí

      tambien se refiere a sencilla pero sin omitir nada, solo son 2000 lineas de codigo contando dwm.c y config.h

      @PaBLoX

      para nada, es desde el punto de vista de los 2, no es para un novato pero no es nada dificil esta comentada cada linea y hay que cambiarle muy poco simple es para ambos que el acceso sea rapido, igual que los cambios sin agregados inecesarios.

      Me gusta

  1. Intente instalar Arch en mi notebook pero dios mio, la configuracion de la red inalambrica resulto un dolor de cabeza… quizas porque si bien muchos tutoriales explican muy bien como instalar arch, hay un momento en que te das cuenta que, o con mucho ensayo y error logras hacerlo, o simplemente necesitas un poco mas de experiencia. Es un excelente distribucion para aprender, pero para alguien no ligado al mundo de la informatica, ciertas cosas lo superan,,, asi que volvi a Ubuntu.

    saludos.

    Me gusta

  2. Genial.

    Solo como crítica:

    Ordena un poco más el código en el post, dale colores o que se yo… Creo que cualquier usuario no tan acosumbrado a ver tantas “letras” se espantará xD!

    Yo ya estoy extrañando mi dwm =( Regresaré… O tal vez pruebea lgún otro WM.

    ¿Y cómo que nano? :P ¡Vim powa!

    Me gusta

  3. Hola.

    Yo he usado Awesome durante una año, más o menos.
    Es tiling también, muy sencillo de configurar en un sólo archivo de texto, y quizás no tan árido como dwm. La velocidad no la vamos a notar, sinceramente. Para añadir los programitas al inicio, es otro archivito que los listas y punto.

    Tiene un uso del ratón muy ingenioso y los accesos directos de teclado están realmente muy bien pensados.

    Para todo el problema de reconocimiento de hardware, pues puedes utilizar pcmanfm, como navegador y ya te reconoce todos los periféricos.

    Que no te quieres complicar la vida, le añades el gnome-daemon y tienes todo lo que necesites sin configurar nada.

    Ahora mejoré mi máquina y me tira un kde con arch como si fuera un awesome, pero awesome dejó su huella. Todos mis accesos directos son los de awesome. He configurado compiz para que el manejo sea calcado al de awesome, incluso con las tile windows. Es genial. Lo mejor de ambos mundos.

    salu2.

    Me gusta

    • de hecho empeze con awesome pero son muchas dependencias y me molestaba liarme con lua.

      dwm es mucho mas sencillo y su configuracion es en c, hay varios patches y plugins y las posibilidades de modeo son muy buenas.

      en recursos es menor.

      gracias por tu comentario :)

      Me gusta

Deja un comentario

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s