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.