DWM-01

Por el principio, puede decirse que, gestores de ventanas, hay muchos.

Gestores tiling (o mosaico) hay otros tantos. Y algunos destacan por particularidades propias, como es el caso de éste. Dwm parte de una premisa bastante curiosa: Hay que compilarlo sí, o sí.

Es, si no el WM más ligero, el siguiente, y su peso es absurdo, por lo reducido: 2.000 SLOC. Sus creadores, los chicos de Suckless son extremadamente cuidadosos con no añadir código “porque sí” y eso hace que, por un lado, tenga un rendimiento increíble, y por el otro, que en ocasiones se les vaya – un poco – la pinza, y eliminen funcionalidades que algunos sí usamos, por considerarlas “bloat”.

Como por ejemplo, las fuentes ttf. Además de eso, parte de una distribución de ventanas muy esquemática, con un Máster, ocupando la mitad izquierda de la pantalla, y todo el resto de ventanas se apilan en la derecha.

Si queremos que una de las ventanas secundarias pase a ser el máster, simplemente nos desplazaremos mediante Alt+j/Alt+k (atajos por defecto) le haremos zoom (Alt+Enter) y con eso la lanzaremos a la izquierda, en grande. Dispone de 2 modos más: Flotante, y monóculo. En modo flotante las ventanas pueden desplazarse mediante el ratón (¡Herejía!), y en el modo monóculo, todas las ventanas son en pantalla completa y rotaremos entre ellas según necesitemos.

Nota: No quiero profundizar mucho en esto, pero Dwm no usa escritorios, sino que agrupa las aplicaciones en “tags”, así que podemos tener una aplicación en todos los escritorios a la vez, sin necesidad de clonarla. Útil si estamos viendo una película a la vez que hacemos otras cosas y necesitamos saltar de escritorio a escritorio, por ejemplo, todo este tutorial va a ir dirigido a dwm 6.1, el cual dispone de soporte para ttf, y un montón de parches a su disposición. Asimismo, partiré del supuesto de una instalación mínima desde netinstall bajo Debian/Devuan (Que es lo que yo uso), con este gestor como único manejador de ventanas. No afecta a los que ya tienen un DE/WM en funcionamiento, pero sí es importante para los que hacen instalación limpia. Al final del tutorial añadiré todos los enlaces, y ejemplos, para no marear demasiado. Así que, ¡Empecemos!

1. DESCARGA

Para ello, se puede hacer directamente desde la página de suckless.org. Necesita que esté activo el respositorio de fuentes main (hablo de sistemas basados en Debian) así que descomentamos la entrada en el sources.list y actualizamos. Debe de quedar así (cuidado con las versiones…):

deb-src http://deb.devuan.org/merged ascii main

Actualizamos:

sudo apt update

Y descargamos:

wget https://dl.suckless.org/dwm/dwm-6.1.tar.gz

En el caso de Debian Stretch y Devuan Ascii:

apt source dwm

En cualquiera de ambos casos, luego tendremos que bajar las dependencias:

sudo apt build-dep dwm

2. COMPILACIÓN

Descomprimimos el archivo, entramos dentro de la carpeta, copiamos el archivo config.def.h como config.h, y compilamos:

tar xvzf dwm-6.1.tar.gz
cd dwm-6.1
cp config.def.h config.h
sudo make clean install

Vale. Esto es lo más básico, y desde ahí podemos empezar. Lo que hemos hecho es descomprimir, hacer una copia para modificar, y compilar. No hay más problema si luego queremos modificarlo (que lo haremos) porque es tan simple como recompilar y se hace en un segundo.

3. AÑADIRLO COMO WM

Sí. La mayoría de los WM no tienen esta peculiaridad y crean una entrada en x-window-manager según necesitan. Curiosamente, y si mal no recuerdo, si ya tenemos instalado un WM previo (por ejemplo, Openbox) sí se hace automáticamente, pero llevo mucho tiempo instalándolo como única opción, así que no puedo asegurarlo. Por suerte, es tan sencillo como hacer:

sudo update-alternatives --config x-window-manager

Si no nos aparece ninguna opción, o no aparece Dwm, tendremos que crearlo. Afortunadamente, es bastante fácil y basta con crear un lanzador (he puesto dwm-start por tradición, no porque sea obligatorio) y si se usa un manejador de sesiones (Slim, LightDM, etc.) un archivo .desktop.

nano dwm-start dwm.desktop

¿Qué metemos dentro de esos archivos?. En el caso de dwm-start, el lanzador de dwm y todo lo que queramos que entre al inicio de sesión, y el otro es simplemente para que el DM de turno lo reconozca y pueda arrancarlo.

3.1 DWM-START

#!/bin/bash
xset +fp /usr/share/fonts/local
xset fp rehash

Cualquier manejador de papel tapiz, nitrogen, feh, whatever, va aquí.

dwmstatus &

Cualquier añadido al panel, conky-cli, xsetroot, acá.

exec dwm

3.2 DWM.DESKTOP

[Desktop Entry]
Encoding=UTF-8
Name=Dwm
Comment=Dwm
Exec=dwm-start
Type=XSession

Acto seguido le damos permisos de ejecución a dwm-start y los copiamos a donde tienen que estar:

chmod +x dwm-start
sudo mv dwm-start /usr/bin/
sudo mkdir /usr/share/xsessions
sudo mv dwm.desktop /usr/share/xsessions/

Y ahora pasamos a añadirlo al update-alternatives, caso de que no nos aparezca:

sudo update-alternatives --install /usr/bin/x-window-manager x-window-manager /usr/bin/dwm-start 90

A partir de aquí ya depende mucho de cada instalación. Si usamos xinit, basta con arrancar mediante startx. Si usamos un DM, nos aparecerá como opción para arrancar. Eso queda ya a gusto de cada usuario. En cualquier caso, dado que es un WM, caso de tener un DE o WM instalado previamente no afecta en lo más mínimo y pueden coexistir sin más inconveniente.

4. CONFIGURARLO

Empieza el auténtico festival. Nada más arrancar, lo que veremos es una pantalla en negro, y un panel con la versión de dwm, el “escritorio” y… poco más. Bien. Lo primero que haremos es abrir una terminal mediante Alt+Shift+Enter, y abrir el archivo $HOME/dwm-6.1/config.h para poder modificarlo a nuestro gusto. Todo lo que hagamos no tendrá validez alguna hasta que recompilemos y reiniciemos la sesión. Recordemos que antes hemos copiado config.def.h. Ese no lo tocaremos más, y todas las configuraciones las realizaremos en config.h. La estructura es bastante sencilla, e iré un poco a lo básico. Que cada cual se lo monte como quiera, que esto es lo bonito. Dado que lo habitual es que la letra modificadora sea Windows (O Meta4) será lo primero que cambiemos:

#define MODKEY Mod1Mask --> #define MODKEY Mod4Mask

Si queremos añadir funciones propias como atajo de teclado (Por ejemplo, el navegador de archivos, el navegador web, o lo que sea) tendremos que crear el comando y añadirle una acción asociada, cada una de las líneas en su sección correspondiente. Por ejemplo, con htop:

static const char *htop[] = { "xterm", "-e", "htop", NULL };{ MODKEY|ShiftMask, XK_h, spawn, {.v = htop } },

De la misma manera, se puede ajustar al gusto tanto el número de “escritorios”, como en qué escritorio queremos que arranque tal o cual aplicación, o si queremos que sea flotante desde el inicio. La fuente, como apunte, se puede introducir tanto de las xfonts (mediante xfontsel) o ttf, siempre que sea dwm 6.1. La estructura será “fuente:size=X:style=X”. Abajo dejaré el mío, por si alguien quiere tomar ideas. En todo caso, una vez hayamos acabado, tendremos que recompilar y salir de la sesión para que los cambios se efectúen.

cd dwm-6.1 && sudo make clean install

5. PERSONALIZARLO

Una vez compilado y funcional, con los atajos de teclado que usamos (cada uno tiene los suyos propios) toca darle un poco de glamour a la apariencia.

5.1 WALLPAPER

El papel tapiz, se puede colocar de muchos modos. El más simple, nitrogen. Si optamos por algo más sencillo y KISS, feh. En el caso de nitrogen, es un momento. Instalar, lanzar, asignar la carpeta donde tenemos las imágenes, aplicar, y hacer que /usr/bin/dwm-start lo lance al inicio. Para ello, añadiremos esta línea:

nitrogen --restore &

En el caso de feh, es igual de simple. Desde terminal, seleccionaremos la imagen con este otro comando:

feh --bg-fill ruta-de-la-imagen.jpg

Ésto creará un pequeño script ejecutable en nuestro /home, que añadiremos a /usr/bin/dwm-start:

~/.fehbg &

5.2 PANEL

Hay varios modos para modificarlo. Solo voy a tratar 2, que es, mediante conky-cli o mediante xsetroot (Disponible en x11-utils). EL uso mediante conky-cli es largo de explicar y no viene al caso, el mío usaba casi todo scripts, y necesitaría otro ladrillo como este. El método de lanzamiento, una vez tengamos un conkyrc a nuestro gusto, sería añadiéndolo, una vez más, a dwm-start:

conky -c ~/.conkyrc | while read -r; do xsetroot -name “$REPLY”; done &

Xsetroot es otro cantar. Si en una terminal ponemos, por ejemplo:

xsetroot -name “hola”

Veremos que eso es lo que sale en el panel. Así pues, dejo abajo mi script para xsetroot, por si alguien quiere tomar ideas, y la forma de añadirlo, aún más fácil que con conky, otra vez en dwm-start:

sh “ruta al script”/xsetroot.sh &

Recordad darle permisos de ejecución con chmod +x.

5.3 EL LANZADOR DE APLICACIONES

Por defecto, Dwm viene pelado. Si puedes abrir una terminal, ya ¿No?. Bueno, es cómodo las primeras 10 veces, luego ya te hartas, y ahí es donde entra esta sección. Hablaré de 3 opciones (hay tropecientas más) que son las que comparten estilo, y son las que más he usado, aunque solo me detendré un poco en una. Dmenu, j4-dmenu-desktop y rofi. Recordemos que, sea lo que sea que uses, puedes añadirlo al config.h y darle un atajo de teclado.

5.3.1 DMENU

También desarrollado por los mismos devs de dwm, dmenu es un lanzador bastante sencillo de aplicaciones, situado por defecto en la combinación Alt+p. Si bien dmenu viene integrado en el propio archivo config.h, es posible cambiarlo un poco y sobre todo, eliminar gran parte de la paja innecesaria que trae, ya que aglutina todo lo que hay en /usr/bin, y muchas de esas aplicaciones son para consola. Una forma rápida en la que se puede hacer, es mediante pipes y archivos de texto. Por poner un ejemplo rápido, si yo creo un archivo de texto llamado “menudmenu” tal que así: firefox-esr pcmanfm mirage.

Puedo usarlo como lanzador, simplemente “pipeándolo”:

less menudmenu | dmenu

Para instalaciones minimalistas, puede ser muy cómodo. Permite el control del usuario, scripts, y casi todo lo que le eches, a la vez que mantienes la sencillez de dmenu. Así es como lo uso yo, de paso, de ahí que lo mencione.

5.3.2 J4-DMENU-DESKTOP Y ROFI

Si todo lo anterior no convence, existe j4-dmenu-desktop. El cual es, básicamente, una versión de dmenu que lee los archivos desktop de /usr/share/applications. Útil para cuando dwm coexiste con instalaciones ya funcionales de DE/WM y no quieres perder tiempo buscando las aplicaciones, o creando un archivo. Rofi es otro cantar. Lo he usado durante un par de años, porque permite, no solo el acceso a archivos .desktop, sino a /usr/bin (separado por secciones), ver que ventanas están abiertas y en qué escritorio, y mil etcs. Recomiendo echarle un ojo, abajo dejo la página (2).

5.4 PARCHES

Ante todo, un apunte: Si bien muchos funcionan correctamente, acumular parches no deja de ser meter código uno encima de otro. Esto quiere decir que el orden, importa, y puede dar problemas si se meten sin cuidado. En mi caso, lo uso al original, pero sí que he usado uno que separa un poco las ventanas unas de otras. Es útil al inicio, cuando se pasa a un entorno en mosaico, porque elimina un poco la asfixia de ver todo el paquetón de ventanas, cubriéndolo todo. Se llama uselessgaps, y su instalación (y esto para todos los parches) es muy sencilla. Primero, descargamos de la propia página de suckless:

wget https://dwm.suckless.org/patches/uselessgap/dwm-uselessgap-6.1.diff

Lo copiamos a la carpeta:

mv dwm-uselessgap.diff $HOME/dwm-6.1/

Entramos a la carpeta y lo añadimos al código:

cd dwm-6.1
patch -p1 < dwm-uselessgap.diff

Editamos config.h para añadir esta línea en el apartado de apariencia (grosor a nuestra elección):

static const unsigned int gappx = 6;

Y compilamos:

sudo make clean install

La siguiente vez que entremos en la sesión, veremos un bonito espacio entre ventanas, cuando hay más de una.

6. NOTAS FINALES

He intentado hacer el tutorial lo más simple posible, y me he dejado muchas cosas en el tintero. Por ejemplo, las opciones de compilación, si se usa o no xinerama, y mil etcs y scripts. Para empezar con Dwm, creo que sobra. Y realmente, lo complicado no es en si instalarlo, sino configurar el archivo config.h, y adaptar las aplicaciones. Eso, a gusto de cada cual. Añadiré abajo, tanto mi propio archivo config.h, como el script xsetroot.sh y el dwm-start (aunque se notará que uso más scripts que no pongo por no liar). Que cada cual lo use como mejor le parezca, o lo ignore, que por algo esto es libertad.

PD: Si alguien quiere ayudarme con xsetroot.sh, se agradece. Me tocó buscar en algunos casos, y toda ayuda o consejo será bien recibido.

DWM-02

DWM ejecutando GIMP

DWM-03

DWM en Void Linux

 

Fuente: maslinux

 

Protege-5

¿Quién está en línea?

Hay 13870 invitados y ningún miembro en línea