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.