Como tirar screenshots de uma GUI baseada em X11 de um terminal de texto (como tty1)?

8

Eu tentei usar DISPLAY=:0 import -window root "$HOME/Pictures/screenshot.png" ( import é parte do conjunto ImageMagick), mas isso apenas exibe uma tela preta.

Eu quero fazer isso, pois eu queria automatizar a abertura de um aplicativo e fazer capturas de tela dele em diferentes idiomas e, para alterar idiomas, preciso reiniciar o lightdm. portanto, corra em um tty para que seu script continue rodando ...

    
por Yatharth Agarwal 08.12.2012 / 17:04

5 respostas

5

Veja o que funcionou para mim.

chvt 7
DISPLAY=:0 import -window root "$HOME/Pictures/screenshot.png
chvt 1
    
por Yatharth Agarwal 09.12.2012 / 18:31
8

Além das respostas existentes, para exibir a captura de tela em ASCII no terminal:

xwd -root -display :0 | convert - jpg:- | jp2a - --colors

(Requer x11-apps para xwd , imagemagick para convert e jp2a .)

    
por Niklas 24.07.2014 / 12:20
5

Aqui está a solução usando xwd , que está disponível em quase todas as instalações do Xorg:

 xwd -root -out screenshot.xwd

O arquivo screenshot.xwd pode ser aberto com o GIMP:

Para mais informações, consulte link .

    
por rendon 03.12.2013 / 19:27
5

Tente usar o obturador

DISPLAY=:0 shutter -f -e -n -o "$HOME/Pictures/screenshot.png"

A importação não funcionará, porque a janela raiz não está em uso. Composição "ignora" (cada janela é renderizada em seu próprio buffer, em seguida, multiplexada para a exibição, em vez do modo antigo, onde todos eles foram processados na janela "raiz").

Além disso, você precisa ter certeza de que o VTY está ativo antes de fazer a captura de tela. Então, por exemplo,

#!/bin/bash  
X :1 &  
export DISPLAY=:1  
sleep 10 # give time for X to start  
gedit &  
sleep 10 # give time for app to do something  
chvt 8  # ensure the X display is active  
shutter -f -e -n -o "$HOME/Pictures/screenshot.png" # screenshot  
killall xorg # terminate X
    
por coteyr 08.12.2012 / 17:27
0

Sentar no mesmo computador e fazê-lo a partir de um terminal virtual diferente do que o servidor X está em execução não funciona.

É explicado lá: link . Citação:

  

Q-108: Eu uso Terminais Virtuais Linux (VT's) para implementar 'Troca Rápida de Usuário' entre sessões de usuários (por exemplo, Betty está em Ctrl-Alt-F7, Bobby está em Ctrl-Alt -F8, e Sid está no Ctrl-Alt-F1: eles usam esses pressionamentos de tecla para alternar entre suas sessões.) Como a visão em um visualizador VNC conectando ao x11vnc é completamente preto, não é atualizado, ou os pixels são confundidos a menos que a sessão X x11vnc está anexada está no VT ativo?

     

Isto parece ter a ver com a forma como as aplicações (o servidor X processa neste caso) devem "funcionar bem" se não estiverem no VT activo (por vezes chamado VC para consola virtual). Isto é, não devem ler a partir do teclado ou mouse ou gerenciar a exibição de vídeo, a menos que eles tenham o VT ativo. Dado que parece que a chamada XGetImage () deve recuperar os dados do framebuffer do próprio hardware de vídeo, faria sentido que o polling do x11vnc não funcionasse a menos que a sessão X tivesse controle ativo do VT.

     

Não parece ser uma maneira fácil de contornar isso. Mesmo o xwd (1) não funciona neste caso (tente.) Algo precisaria ser feito em um nível mais baixo, digamos, no servidor XFree86 / Xorg X. Além disso, usar o Shadow Framebuffer (uma cópia do framebuffer de vídeo é mantido na memória principal) não parece corrigir o problema (última verificação em 2007).

     

Se ninguém estiver sentado na estação de trabalho e você quiser apenas alternar remotamente o VT para aquele associado à sua sessão X (então o x11vnc pode pesquisar corretamente), pode-se usar o comando chvt (1), por exemplo. "chvt 7" para VT # 7.

    
por Golar Ramblar 09.09.2015 / 09:11