Multimonitor Otra Vez
=====================
26 de Septiembre, 2020

Esta semana no tuve muchas ganas de ponerme con las cosas que tenía 
que hacer (para variar...), así que me puse a probar un par de 
window managers que había visto por ahí.

Esto significó la necesidad de reescribir mis scripts de 
multimonitor para que no dependan directamente de BSPWM.

Y si bien dudo mucho que deje de usar BSPWM por el momento, no esta 
mal tener scripts mas reusables.


Los scripts, actualizados
-------------------------

El selector de monitores quedo así:

```
#!/bin/sh

conectados=$(xrandr -q | awk '/ connected/ {count++} END {print count}')
pri=$(xrandr -q | awk '/ connected/ {print $1}' | sed -sn 1p)
sec=$(xrandr -q | awk '/ connected/ {print $1}' | sed -sn 2p)

if [ "$conectados" = 1 ]; then
    xrandr --output "$pri" --primary --auto --scale 1.0x1.0 "$(xrandr -q | awk '/ disconnected/ {print "--output", $1, "--off"}' | paste -sd ' ')"
elif [ "$conectados" = 2 ]; then
    xrandr --output "$pri" --primary --auto --scale 1.0x1.0 --output "$sec" --right-of "$pri" --auto --scale 1.0x1.0
fi
```

No encontré una manera de listar `$pri` y `$sec` usando solo awk, 
lo cual me parece rarísimo. Por lo poco que entiendo, es algo que 
se debería poder hacer lo más bien, pero a pesar de que busque y vi 
varias soluciones que teóricamente funcionan, no tuve éxito. Así 
que quedó con el pipe a sed...
Este script lo corro desde `xinitrc`.

Y para mi `bspwmrc` tengo este:

```
#!/bin/sh

M=$(bspc query -M --names)
NUM=$(echo "$M" | awk 'END{print NR}')

if [ "$NUM" = 1 ]; then
	bspc monitor -d 1 2 3 4 5 6 7 8 9 10
elif [ "$NUM" = 2 ]; then
	pri=$(echo "$M" | awk NR==1)
	sec=$(echo "$M" | awk NR==2)
	bspc monitor "$pri" -d 1 2 3 4 5
	bspc monitor "$sec" -d 6 7 8 9 10
fi
```

En definitiva no cambio nada, pero hubo una separación de tantos. 
La administración de monitores en general ocurre a nivel sistema, y 
lo demás ocurre a nivel WM.

El script para poner monitores en espejo quedo igual, lo único que 
hice fue agregarle esto al final.

```sh
    if [ -e /tmp/bspwm_0_0-socket ]; then
        bspc monitor -d 1 2 3 4 5 6 7 8 9 10
    fi
```

El script para volver a un solo monitor tiene el mismo agregado.