# bspwm (Español)

Related articles

- bspwm/Example configurations
- Window manager
- Comparison of tiling window managers

bspwm es un gestor de ventanas tipo mosaico que organiza las ventanas en un árbol binario completo. Tiene soporte para EWMH y múltiples monitores, y se configura y controla a través de mensajes.

## Instalación

Instale bspwm y sxhkd, o las versiones en desarrollo: bspwm-gitAUR y sxhkd-gitAUR. sxhkd es un simple servicio de combinaciones de teclas usables dentro de X, requerido para comunicarse con bspwm y lanzar aplicaciones a elección.

Para comenzar bspwm al iniciar sesión, añada lo siguiente a `~/.xinitrc` o `~/.xprofile` (dependiendo de cómo ha escogido iniciar X):

    sxhkd &
    exec bspwm

## Configuración

Puede encontrar ejemplos de configuración en `/usr/share/doc/bspwm/examples/` y en GitHub.

Cree los directorios `~/.config/bspwm/` y `~/.config/sxhkd/`, y luego copie `/usr/share/doc/bspwm/examples/bspwmrc` a `~/.config/bspwm/` y `/usr/share/doc/bspwm/examples/sxhkdrc` a `~/.config/sxhkd/`. En estos dos archivos se definirán las configuraciones y las combinaciones de teclas, respectivamente. Por último, haga que el archivo bspwmrc sea ejecutable, con `chmod +x ~/.config/bspwm/bspwmrc`.

Note: Asegúrese de que su variable de entorno $XDG_CONFIG_HOME esté indicada en el sistema, o su bspwmrc no será tomado en cuenta. Para indicarla, escriba `XDG_CONFIG_HOME="$HOME/.config"` y `export XDG_CONFIG_HOME` en ~/.profile, en líneas aparte.

Las opciones de configuración para cada archivo se encuentran enlistadas y descritas al ejecutar `man bspwm` y `man sxhkd`.

#### Para múltiples monitores

El ejemplo de bspwmrc configura diez escritorios para un sólo monitor:

    bspc monitor -d I II III IV V VI VII VIII IX X

Esa línea tendría que ser dividida para cada monitor:

    bspc monitor DVI-I-1 -d I II III IV
    bspc monitor DVI-I-2 -d V VI VII
    bspc monitor DP-1 -d VIII IX X

Para averiguar el nombre de sus monitores, puede escribir `xrandr -q` o `bspc query -M` en su terminal.

En el ejemplo anterior, el número total de escritorios fue limitado a diez. Esto es para que cada escritorio pueda ser invocado con 'super + {1-9,0}', de acuerdo a al ejemplo de sxhkdrc. La tecla de inicio de Windows es denominada universalmente como 'super', y es la más utilizada en el ejemplo de sxhkdrc.

### Reglas

Hay dos formas de definir reglas para el comportamiento de ventanas (a partir de cd97a32).

La primera consiste en usar el comando de regla integrado (bspc), como se muestra en el ejemplo de bspwmrc:

    bspc rule -a Gimp desktop=^8 follow=on state=floating
    bspc rule -a Chromium desktop=^2
    bspc rule -a mplayer2 state=floating
    bspc rule -a Kupfer.py focus=on
    bspc rule -a Screenkey manage=off

La segunda opción consiste en usar un comando de regla externo. Esto es más complejo, pero permite diseñar reglas más específicas. Vea estos ejemplos.

Si alguna ventana desobedece a bspwmrc, asegúrese de que la regla correspondiente invoque al programa con el sinónimo ejecutable de su nombre oficial. Puede averiguar dicho sinónimo, ejecutando: `xprop | grep WM_CLASS` (requiere tener xorg-xprop instalado).

### Paneles

Aparte de los ejemplos de bspwmrc y de sxhkdrc, en la carpeta examples se encuentra un ejemplo para integrar un panel lemonbarAUR. Para aprender más acerca de su uso, visite nuestra entrada de lemonbar. Revise las dependencias opcionales que pueda necesitar para su configuración deseada.

El panel se ejecuta incluyendo la línea `panel &` en su bspwmrc.

Para visualizar información del sistema en la barra de estado, se puede usar diversas llamadas al sistema. El siguiente ejemplo le enseñará a conseguir que su panel muestre el estado del volumen de audio:

    panel_volume()
    {
            volStatus=$(amixer get Master | tail -n 1 | cut -d '[' -f 4 | sed 's/].*//g')
            volLevel=$(amixer get Master | tail -n 1 | cut -d '[' -f 2 | sed 's/%.*//g')
            # ¿está alsa en mute o no?:
            if [ "$volStatus" == "on" ]
            then
                    echo "%{Fyellowgreen} $volLevel %{F-}"
            else
                    # si está en mute, que la fuente sea roja:
                    echo "%{Findianred} $volLevel %{F-}"
            fi
    }

Luego, verificaremos que es invocado y redirigido a `$PANEL_FIFO`:

    while true; do
    echo "S" "$(panel_volume) $(panel_clock) > "$PANEL_FIFO"
            sleep 1s
    done &

### Scratchpad

Se puede emular un scratchpad (un terminal invocado en cualquier lugar del escritorio para ejecutar un comando específico), añadiendo una combinación de teclas para su invocación con xdotool:

    xdotool search --onlyvisible --classname scratchpad windowunmap \
    || xdotool search --classname scratchpad windowmap \
    || st -c scratchpad -g 1000x400+460 &

y añadiendo esta regla:

    bspc rule -a scratchpad sticky=on state=floating

Véase [1] y [2].

Para un scratchpad que prescinda de reglas pre-definidas, véase: [3]

Para un scratchpad con más sofisticación de comportamiento, instale tdrop-gitAUR.

### bspwmrc como script

Dado que `bspwmrc` es un script (guión de comandos), usted puede hacer con él cosas como éstas:

Configuraciones diferentes para cada monitor:

    #! /bin/sh

     if [[ $(hostname) == 'myhost' ]]; then
         bspc monitor eDP1 -d I II III IV V VI VII VIII IX X
     elif [[ $(hostname) == 'otherhost' ]]; then
         bspc monitor VGA-0 -d I II III IV V
         bspc monitor VGA-1 -d VI VII VIII IX X
     elif [[ $(hostname) == 'yetanotherhost' ]]; then
         bspc monitor DVI-I-3 -d VI VII VIII IX X
         bspc monitor DVI-I-2 -d I II III IV V
     fi

Que todas las ventanas sean flotantes:

    #!/bin/bash

     # change the desktop number here
     FLOATING_DESKTOP_ID=$(bspc query -D -d '^3')

     bspc subscribe node_manage | while read -a msg ; do
        desk_id=${msg[2]}
        wid=${msg[3]}
        [ "$FLOATING_DESKTOP_ID" = "$desk_id" ] && bspc node "$wid" -t floating
     done

(fuente)

## Solución de problemas

### Aparece una pantalla negra y las combinaciones de teclas no funcionan

Primero que todo, una pantalla negra significa que bspwm está funcionando. Respecto a las combinaciones de teclas, verifique que usted haya seguido los pasos correctamente. Si lo había hecho así, entonces incluya la ejecución de un emulador de terminal en `~/.xinitrc`:

    sxhkd &
    [su terminal de preferencia] &
    exec bspwm

Habiendo iniciado X con `startx`, usted tendrá su emulador de terminal dispuesto. Ahora, tipee `pidof sxhkd`. Si el comando no devuelve un número, inténtelo de nuevo asociando sxhkd con sxhkdrc explícitamente, ejecutando `pidof sxhkd -c ~/.config/sxhkd/sxhkdrc`.

También puede intentar cambiando la tecla 'super' por 'Alt', en sxhkdrc.

### Una aplicación no ocupa todo el espacio de su ventana

Esto puede pasar si está usando aplicaciones GTK3, y especialmente en el caso de los cuadros de diálogo. Si se trata de eso, añada lo siguiente a ~/.config/gtk-3.0/gtk.css:

    .window-frame, .window-frame:backdrop {
      box-shadow: 0 0 0 black;
      border-style: none;
      margin: 0;
      border-radius: 0;
    }

    .titlebar {
      border-radius: 0;
    }

(fuente: foro de bspwm)

### Problemas con aplicaciones Java

Si, por ejemplo, las aplicaciones Java no pueden cambiar de tamaño o sus menús se cierran espontáneamente, véase Java#Applications not resizing with WM, menus immediately closing.

## Véase también

- Mailing List: bspwm en librelist.com.
- `#bspwm` - canal IRC en irc.freenode.net
- https://bbs.archlinux.org/viewtopic.php?id=149444 - Tema en el foro Arch BBS
- https://github.com/baskerville/bspwm - GitHub
- https://github.com/windelicato/dotfiles/wiki/bspwm-for-dummies - Un "bspwm para tontos"
- https://github.com/smlb/dotfiles/wiki/Bspwm - La wiki de smlb

Category:

- Tiling WMs (Español)