Bspwm, calienta que sales


--- Fecha: mié 12 feb 2025 18:19:48 CET ---


Después de unos meses con Spectrwm, y siendo uno de mis tilings managers favoritos, he probado otros, como DWM y BSPWM del que hablaré en breve.

Volví a probar i3, pero volví a descartarlo por varios motivos, y es que no se acaba de adaptar a lo que busco, como apertura en mosaico Fibonacci, que no reconozca escritorios vacíos y otras tonterías similares.


¿Por qué ahora BSPWM?


Spectrwm es muy cómodo. Tiene cosas como la iconificación que es una maravilla, y si te equivocas de atajo, no te pierdes, sabes qué tienes que hacer para dejarlo como estaba.

Podría decir que he probado bspwm por un ataque súbito de distrohopping (que también). Pero todo tiene sus "peros" y es que Spectrwm se vuelve lento con algunos programas, da errores en algunas situaciones, como librerias en Alpine Linux, errores de cerrado repentino de alguna ventana en Voidlinux, etc.


NOTA: Estas distribuciones no tienen systemd, quizá sea por eso.


Lo cierto es que Spectrwm es un proyecto de colegas, de "hackers para hackers" como ellos mismos dicen, que avanza poco a poco, por eso no lo abandono, si no que lo dejo en suspensión.


Bspwm


Bspwm es bastante parecido a Spectrwm, y aunque hay que dar más vueltas para configurar cosas que spectrwm ya trae de serie, una vez hecho ya no lo vas a tocar más.

Es rápido, no consume apenas recursos, y hay bastante más info al respecto, aunque su funcionamiento técnico es un poco lioso y toca estudiar.



Instalando


Instalo bspwm y además sxhkd (vaya nombrecito), ya que bspwm no tiene un sistema propio de atajos de teclado y necesita de sxhkd para ello. Las guías indican que hay que hacer 2 directorios:


mkdir ~/.config/bspwm
mkdir ~/.config/sxhkd

Y dentro copiar bspwmrc y sxhkdrc respectivamente, que se encuentran en la ruta /usr/share/doc/ y que son los archivos de configuración.


NOTA: A bspwmrc hay que darle permisos de ejecución o no funcionará.


Cuando quieras pulsar las teclas, bspwm llamará a sxhkd, así que éste ha de estar cargado, por eso hay que añadir la siguiente linea al inicio de bspwmrc:


pgrep -x sxhkd > /dev/null || sxhkd &

Y ya está. Los programas que quieras que se carguen se ponen tal cual:


pkill clipmenud
clipmenud &

pkill picom
picom &

NOTA: Es recomendable poner pkill al inicio de cada programa porque si tras un cambio en la configuración la reinicias para aplicar los cambios en caliente, se volverán a ejecutar los programas que ya hay y se irán amontonando copias de los mismos.

El signo & al final es para ejecutarlo en segundo plano y que no se corte la carga de los siguientes programas.


Como uso Polybar, he de cargarla también, así que siguiendo la wiki de Polybar, añado la siguiente línea:


$HOME/.config/polybar/launch.sh

NOTA: launch.sh es un script que puedes copiar de la wiki en la web de Polybar


Si quieres ver mi archivo de configuración, pincha en este enlace:


Git Moribundo


Listo, ya tengo bspwm funcionando. Ahora toca configurar los atajos de teclado a mi gusto.



Atajos de teclado


Como he comentado antes, sxhkd se encarga de ello, así que hay que configurarlo.

Puedes dejar las teclas que vienen por defecto, cambiarlas a tu gusto, o añadir otras que no existen. Es la ostia de flexible, y la sintaxis es muy sencilla:


# Terminal emulator
alt + t
	lxterminal

Se pueden apilar en una sola linea varios atajos, ahorrando lineas y dolor de ojos:


# Varios atajos en una sola linea
alt + {t,x,m,c}
	{uxrvt,mc,mousepad,clipmenu}

Reglas


A veces te gustaría que ciertas ventanas se abrieran de cierta manera. En spectrwm están los "quirks", y en bspwm están las reglas, que son más potentes que los quirks de spectrwm.

Por ejemplo, si quiero que Gimp se abra en el escritorio 3 y la ventana sea modo flotante:


bspc rule -a Gimp desktop='^3' state=floating

NOTA: man bspc para más info


Todo en un tiling manager se ejecuta en una nueva ventana. Soy usuario de terminal drop down, Tilda en mi caso, aunque también he usado Guake, pero al lanzarla se ejecuta en ventana y ese comportamiento no es el que quiero, así que tengo que "emular" su funcionamiento en bspwm:


bspc rule -a Tilda:tilda state=floating sticky=on layer=above rectangle=1920x420+0+0 && tilda -g ~/.config/tilda/config_0 &

Con esa linea añado (-a) una regla (rule) que hace que Tilda (Tilda:tilda) se ejecute de forma flotante (floating) en la parte superior (above), que aunque le quite el foco siga estando (sticky) y ocupe un rectángulo (rectangle) que ocupe todo el ancho de mi pantalla y un cuarto de largo, sin márgenes, y cargando el archivo de configuración que quiero.


Como pasaba con spectrwm, bspwm utiliza la "clase de ventana" para saber cómo se llama cada ventana, cosa que puedes averiguar lanzando "xprop | grep WM_CLASS" y pinchando en la ventana que quieras. En este caso, xprop me suelta "tilda:Tilda". Se supone que se puede usar cualquiera de los dos términos, pero para ser fiel al uso de spectrwm y otros, pondré ambos, pero dándole la vuelta a los nombres.

Ahora siempre que pulso F12 (tecla configurada en Tilda, no en sxhkd) aparecerá y desaparecerá Tilda.



Bonus track


Una cosa molesta cuando inicias bspwm por primera vez es que puede que te salga un aspa en vez de un cursor. Para ello hay que poner lo siguiente en bspwmrc:


xsetroot -cursor_name left_ptr &

Otra cosa que no me gustó demasiado es la diferencia que hace bspwm entre cerrar y matar.

Estoy acostumbrado a usar el clásico Alt + F4 para cerrar ventanas. Bspwm toma esto como matar un proceso en vez de cerrarlo y si tienes 4 terminales abiertos y matas uno, los matas todos.


La orden "kill" solo hace xcb_kill_client y destruye el cliente, y "close" intenta usar ewmh para dejar que la ventana decida cómo cerrarse si la ventana lo admite. Para evitar esto, cambié el atajo predeterminado de esto:


alt + F4
	bspc node -{c,k}

a esto (quitando la k):


alt + F4
	bspc node -{c}

Y ya tendría bspwm a mi gusto. Aun faltan cosas para configurar, y cada vez que leo sobre el comando bspc veo infinitas posibilidades de hacer mil cosas.



Tag: #linux #bspwm



◄ Listado principal

◄◄ Inicio



/gemlog/