.

Breaking News
recent

-

dwm - dinamic window manager



Atención

Esto no es una guia es solo una pequeña introduccion a dwm para que puedan conocer este window manager y si les gusta animarse a probarlo .

Descripción

dwm es un gestor de ventanas dinámico .Permite posicionar las mismas en forma de mosaico (tiling), en forma de pila (stack), y en pantalla completa (monocle), así como en diversas modalidades adicionales mediante la ayuda de parches opcionales. La disposición de las ventanas puede ser aplicada en forma dinámica optimizando así el entorno en función de la aplicación en uso y la tarea a realizar. dwm es extremadamente liviano y rápido, está escrito en C con la premisa de que su código fuente no supere las 2000 líneas. Provee soporte de multi-monitor para xrandr y Xinerama.



Instalación

Para instalarlo y posteriormente poder personalizarlo, es necesario descargar el paquete y compilarlo , en arch lo recomendable es con ABS y en distros basadas en debian me basto con un simple "make clean install". Es necesario tambien instalar dmenu , ya que no posee un menu como awesome u openbox.

Configuración

Cada vez que cambiemos la configuracion de dwm es necesario recompilarlo .
Para manejar los wallpapers lo mas recomendable es usar Nitrogen.
Accesos basicos :
[color=#000000]
[Shift]+[Alt]+[Enter] - terminal
[Alt]+[p] - dmenu 
[/color]


La configuracion de los colores , fuentes y atajos de teclado se realizan en el archivo config,h , el cual esta en el lenguaje C . Aca un ejemplo (sin parches) , es bastante intuitivo .

[color=#000000]/* See LICENSE file for copyright and license details. */

/* appearance */
static const char font[]            = "-*-terminus-medium-r-*-*-16-*-*-*-*-*-*-*";
static const char normbordercolor[] = "#444444";
static const char normbgcolor[]     = "#222222";
static const char normfgcolor[]     = "#bbbbbb";
static const char selbordercolor[]  = "#005577";
static const char selbgcolor[]      = "#005577";
static const char selfgcolor[]      = "#eeeeee";
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 },
    { "Firefox",  NULL,       NULL,       1 << 8,       False,       -1 },
};

/* layout(s) */
static const float mfact      = 0.55; /* factor of master area size [0.05..0.95] */
static const int nmaster      = 1;    /* number of clients in master area */
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 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[]  = { "uxterm", 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_i,      incnmaster,     {.i = +1 } },
    { MODKEY,                       XK_d,      incnmaster,     {.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,                       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} },
};
[/color]


Para hacer modificaciones mas grandes , como por ejemplo los simbolos de los tags o el comportamiento de las ventanas en modo flotante , etc . Es necesario modificar el codigo de fuente que tambien esta en c (dwm.c). Por suerte existen variedad de parches que hacen el trabajo por nosotros ,

Por ultimo podemos agregar barras de estado mediante xsetroot , la forma mas sencilla es mediante un script aunque es posible hacerlo con conky .
Aca un ejemplo de barra que muestra el estado de bateria y la hora (va en nuestro .xinitrc)

[color=#000000]
while sleep 1m; do
  batt=`LC_ALL=C acpi -b`

  case $batt in
    *Discharging*) batt=${batt_main#* * * }; batt="${batt%%, *} " ;;
    *)             batt=''                                        ;;
  esac

  xsetroot -name "$batt`date +"%R"`"
done &
exec dwm
[/color]


Mi escritorio con dwm







Conclusión

Dwm es super ligero y muy productivo para trabajar con multiples ventanas ademas de tener una estetica minimalista y existen muchisimos parches para cambiar su aspecto a gusto . Pero no es muy simple de usar , hay que tener bastante paciencia y ganas de leer y aprender .

No hay comentarios:

Publicar un comentario

-

Con la tecnología de Blogger.