unix xorg – Capturas de pantalla de varios servidores X

Pregunta:

Quiero tomar capturas de pantalla simultáneamente desde múltiples servidores X en una PC de escritorio.

Tengo varios usuarios registran en diferentes terminales ( tty1 , tty2 , tty3 , tty4 ) que empiezan a múltiples servidores X con startx /usr/bin/openbox-session -- :1 (y :2 , :3 , :4 , respectivamente). Entonces puedo acceder a cada uno de ellos con Ctrl+Alt+F8 , +F9 , +F10 , +F11 .

Solo hay un monitor en ese escritorio.

Quiero tomar capturas de pantalla para cada uno de estos servidores X, preferiblemente con scrot , pero actualmente obtengo una imagen en blanco / negro cada vez que lo intento. Solo cuando estoy activo en ese servidor X obtengo una captura de pantalla adecuada.

Por ejemplo, si estoy en Ctrl+Alt+F8 y ejecuto scrot test.png obtengo una captura de pantalla adecuada; si entiendo correctamente no tengo que configurar el $DISPLAY , ya que estoy en Ctrl+Alt+F8 obtengo echo $DISPLAY > :1 . Pero si corro el sleep 10; scrot test.png y vaya a Ctrl+Alt+F7 , luego obtengo una imagen en negro.

¿Cómo puedo obtener múltiples capturas de pantalla de cada uno de esos terminales simultáneamente?

Lo que funcionó para mí fue Xephyr . El único problema con esta solución parece ser que cuando xdotool comandos xdotool extremadamente rápidos, no responde tanto como X.

Para referencia futura, lo que hice para cada uno de los cuatro usuarios y terminales fue:

En ~/.profile , configuro a cada usuario para que inicie sesión automáticamente después del inicio de mi sistema, como:

if [[ -z $DISPLAY ]] && [[ $(tty) = /dev/tty1 ]]; then
     sleep 30 # for some reason it crashes if I do not let 
              # it sleep for a while, not necessarily so long. 
              # I guess it has to do with my "normal" X at DISPLAY=:0 . 
              # Thus for tty2 I let it sleep 40 seconds, 
              # for tty3 50 seconds and so on.
     startx
fi

En ~/.Xsession , inicio un Xserver / client (con blackbox) y Xephyr (con openbox) en él como:

Xephyr -fullscreen -screen 1920x1200 :11 &
exec blackbox & 
sleep 3 # Perhaps sleeping is redundant.
DISPLAY=:11 /usr/bin/openbox-session

Quiero que el administrador de ventanas "final" sea openbox-session . Me gustaría usar openbox tanto para Xserver como para Xephyr , pero el exec openbox & DISPLAY=:11 /usr/bin/openbox-session bloquea, mientras que el exec openbox & DISPLAY=:11 /usr/bin/openbox no.

De esta manera, el usuario en :11 puede tomar una captura de pantalla, mientras que el monitor muestra :0 . (o :13 :14 , etc.).

No probé XVnc , pero tengo la sensación de que podría ser más lento que Xephyr ; Por favor, corríjame si estoy equivocado.

Respuesta:

Método n. ° 1: uso de xwd

Puede usar la herramienta de línea de comando xwd para tomar las pantallas X así:

$ xwd -display :1 -root -out 1.xwd

Podrías recorrer 1 a 4 así:

$ for i in {1..4};do xwd -display :$i -root $i.xwd; done

NOTA: Los archivos .xwd resultantes son un tipo especial de archivo de volcado de X Windows.

$ file 1.xwd 
1.xwd: XWD X Window Dump image data, "xwdump", 4160x1440x24

Puede usar xwud para mostrarlos así:

$ xwud -in 1.xwd

O puede usar el comando de display de ImageMagick para verlos:

$ display 1.xwd

Método n. ° 2: usar la importación

También puede usar el comando de import de ImagMagick para hacer algo similar:

$ import -window root -display :0.0 -screen /tmp/0.png

Método # 3 – usando scrot

O, como sugirió @mikeserv en los comentarios, intente configurar $DISPLAY para que scrot pueda encontrar la pantalla X activa correctamente:

$ DISPLAY=:1 scrot 1.png

Esto podría estar en bucle así:

$ for i in {1..4};do DISPLAY=:$i scrot $i.png; done

Referencias

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top

web tasarım