"Después del juego es antes del juego"
Sepp Herberger

Mostrando entradas con la etiqueta xrandr. Mostrar todas las entradas
Mostrando entradas con la etiqueta xrandr. Mostrar todas las entradas

jueves, 30 de mayo de 2024

Espejar pantallas con xrandr y no morir en en intento.

A la hora de espejar la pantalla principal en una pantalla secundaria de un aula es corriente coger un script que ya espeja pantallas en otro sitio y plantarlo en el aula pensando que por arte de computer magic va a funcionar. Pues no, el script hay que adaptarlo y lo que traemos de otro sitio solo sirve de plantilla.

Para saber cómo adaptarlo hay que ejecutar xrandr sin parámetros y asi poder anotar como se llaman las salidas de vídeo en ese entorno concreto y cuales resoluciones soporta cada una. Hay una regla muy básica para ejecutar xrandr:


Recuerda: xrandr no se ejecuta NUNCA como root. Nada de conectar por ssh al equipo en cuestión, ni entrar en consola de texto desde el escritorio, ni hacer sudo, ni ninguna otra ocurrencia.

La única manera de ejecutar xrandr y que nos de un resultado correcto y fiable es ir físicamente al ordenador, iniciar sesión con un usuario normal, abrir un terminal en el escritorio y teclear "xrandr" seguido de enter. Fácil, ¿no? Si al teclear xrandr te sale "Cant open display" o algo similar es porque has desobedecido y no has hecho caso de la sugerencia de Doña Decibelia, la serenísima señora de la foto.

Una buena salida de xrandr seria por ejemplo:
Screen 0: minimum 320 x 200, current 1920 x 1080, maximum 8192 x 8192
VGA-1 connected primary 1024x768+0+0 (normal left inverted right x axis y axis) 0mm x 0mm
   1024x768      60.00*
   800x600       60.32    56.25  
   848x480       60.00  
   640x480       59.94  
DP-1 disconnected (normal left inverted right x axis y axis)
HDMI-1 disconnected (normal left inverted right x axis y axis)
DP-2 disconnected (normal left inverted right x axis y axis)
HDMI-2 connected 1024x768+0+0 (normal left inverted right x axis y axis) 0mm x 0mm
   1280x800      59.81 +  84.88    74.93  
   1920x1080     60.00*   50.00    59.94    30.00    24.00    29.97    23.98  
Aqui se ven dos salidas activas; VGA-1 y HDMI-2, junto con la gama de resoluciones que soportan. Nosotros tenemos que determinar cual salida es la principal y cual es la secundaria entre ambas salidas y cuales resoluciones de las que soportan queremos elegir para trabajar. Con esos 4 datos ya tenemos para sustituir XXXX, YYYY, AAAA y BBBB en el script que nos sirve de plantilla general, el cual sería:
# cat /usr/local/bin/resolucion_espejar
#!/bin/bash
test -e  $HOME/.config/xfce4/xfconf/xfce-perchannel-xml/displays.xml  &&  rm  $HOME/.config/xfce4/xfconf/xfce-perchannel-xml/displays.xml
PRINCIPAL=XXXX
SECUNDARIO=YYYY
RESOLUCION_PRINCIPAL=AAAA
RESOLUCION_SECUNDARIO=BBBB
xrandr --output $PRINCIPAL --mode $RESOLUCION_PRINCIPAL --pos 0x0 --rotate normal --output $SECUNDARIO --mode $RESOLUCION_SECUNDARIO --pos 0x0 --rotate normal --same-as $PRINCIPAL --scale-from $RESOLUCION_PRINCIPAL
exit 0
Para el ejemplo anterior, unos buenos valores tomados del resultado del xrandr-sin-parámetros™ seíian:
# cat /usr/local/bin/resolucion_espejar
........
PRINCIPAL="VGA-1"
SECUNDARIO="HDMI-2"
RESOLUCION_PRINCIPAL="1024x768"
RESOLUCION_SECUNDARIO="1920x1080"
........
Y ya está, nada más. Probamos ese script desde terminal a ver si espeja bien ambas pantallas y si lo hace lo metemos para que se ejecute en el inicio de sesión desde /etc/xdg/autostart con un fichero .desktop. Sobre este tema ya hay muchos ejemplos en otras entradas del blog, busca por xrandr y encontrarás.

再见,同志们!

viernes, 23 de noviembre de 2018

Clonado de salidas de vídeo en pantalla de login

Ya hemos empleado en varias ocasiones scripts basados en xrandr para configurar el clonado de la pantalla en 2 dispositivos diferentes, normalmente un monitor y un cañón proyector. El script resultante se llama desde un fichero /etc/xdg/autostart/xxx.desktop y así garantizamos que se ejecuta cuando el usuario inicia sesión.

El problema que tuve estos días es que debia clonar la imagen entre una TV LED colgada en un muro y un monitor y no daba con la tecla para que se mostrase la imagen clonada antes de iniciar sesión, en la pantalla de login de lightdm. En este caso el script es mas o menos:
# cat /usr/bin/resolucion_tv_monitor
#!/bin/bash

#En el PC del Taller de Peluqueria las salidas son DVI (Monitor) y HDMI (TV plana): DVI-I-1 y HDMI-1 

test -e $HOME/.config/xfce4/xfconf/xfce-perchannel-xml/displays.xml && rm $HOME/.config/xfce4/xfconf/xfce-perchannel-
xml/displays.xml

HDMI=$(xrandr | grep " connected" | grep HDMI | cut -d" " -f1)
DVI=$(xrandr | grep " connected" | grep DVI | cut -d" " -f1)
xrandr --output $DVI --mode 1024x768 --pos 0x0 --rotate normal --output $HDMI --mode 1920x1080 --pos 0x0 --rotate normal --same-as $DVI --scale-from 1024x768
exit 0
Por si fuera poco el PC tiene un sistema multiseat, por lo que hay otra tarjeta de vídeo más con un monitor independiente para otro usuario que no debe ser clonado y debe mostrar su propia sesión privada.

Lo que se suele hacer en estos casos en generar un fichero xorg.conf que se pondrá en /etc/X11/xorg.conf.d forzando el clonado de ambas salidas, pero tras varios intentos no he sido capaz de dar con la configuración correcta.

La solución por la que me he decantado es olvidarme del xorg.conf y llamar al script antes de mostrar la pantalla de login. ¿Cómo?, pues ejecutándolo al inicio de ligthdm:
# cat /etc/lightdm/lightdm.conf.d/10-resolucion.conf 
[SeatDefaults]
display-setup-script=/usr/bin/resolucion_tv_monitor
Solo debemos tener cuidado de que display-setup-script no esté siendo usado para otro script, ya que solamente puede definirse una única vez.


Acabemos con el maravilloso vídeo grabado desde otro satélite del despegue de una Progress para abastecer la Estación Espacial Internacional:



Seguro que lleva en algún recoveco la pequeña ración de vodka de contrabando que los cosmonautas rusos acostumbran a pasar para consumir desde la época de la Mir y todas las Salyut.