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