Como eu uso a linha de comando e o wmctrl para fazer uma janela maior que a tela para obter uma captura de tela enorme?

6

Eu uso um programa que faz uma imagem grande que eu tenho que rolar para ver. O programa não tem como salvar a imagem e não tenho acesso à fonte para modificá-la. A única maneira de obter a imagem do programa é por captura de tela. Meu objetivo é salvar a imagem em tamanho maior sem ter que juntar imagens individuais.

Estou usando esse script para tentar tirar uma captura de tela:

#!/bin/bash
window=$(wmctrl -l | grep "Program$" | awk '{print $1}')
wmctrl -v -i -r $window -e '0,0,0,6030,5828'
wmctrl -i -a $window
import -window $window ~/Desktop/screenshot.png

Isto usa o wmctrl para obter o id da janela ($ window) para uma janela chamada "Program". Em seguida, ele tenta redimensionar a janela para as dimensões desejadas. Ele usa imagemagick (import) para salvar um screenshot.png na área de trabalho do usuário. Tudo isso funciona, exceto a etapa de redimensionamento.

Eu posso redimensionar a janela usando wmctrl -r -e, mas tamanhos maiores que o tamanho da tela não funcionam.

Estou usando o Ubuntu 10.04 e o Gnome Desktop. Eu corro dois monitores, mas eu tentei isso com um deles desativado.

Existe uma maneira de redimensionar a janela maior que a minha tela para obter uma captura de tela enorme?

Parte II:

Graças à resposta da sdaau, eu tentei usar o xrandr para configurar o pan da tela, de modo a ter um desktop maior do que o meu monitor.

xrandr --output LVDS --panning 2600x2500

Esse comando faz com que a tela do laptop alcance uma área de trabalho de 2600 x 2500, mesmo que só possa exibir 1440 x 900 de uma só vez. Para desativar o pan, posso usar um comando semelhante para definir o tamanho total e com zeros para a seção de pan. Isso me devolve meu comportamento original de exibição de laptop.

xrandr --fb 1440x900 --output LVDS --panning 0x0

Tudo isso é feito com xrandr e não requer nenhuma alteração no Xorg.conf (meu sistema Ubuntu nem possui um Xorg.conf).

Minha placa de vídeo parece permitir apenas cerca de 6,5 milhões de pixels, embora as dimensões máximas sejam 8192x8192. Esse máximo parece ser o máximo para qualquer dimensão, mas há um limite para quantos pixels podem ser desenhados, que é a largura multiplicada pela altura.

Quando fiz o redimensionamento da tela, tentei meu script novamente e obtive uma captura de tela. A imagem no entanto é totalmente embaralhada. Não tenho certeza se é impossível tirar uma captura de tela de uma janela fora da tela ou se ela não consegue lidar com as grandes dimensões da janela. Com a exibição panorâmica, a janela deve estar visível e o gerenciador de janelas deve pensar que está na tela. Portanto, há um buffer de pixels em algum lugar com esses pixels, portanto, deve haver uma maneira de obter uma captura de tela.

Talvez haja outro método para tirar screenshots que possam funcionar melhor do que importar.

    
por Mnebuerquo 24.01.2011 / 23:18

1 resposta

1

Apenas testei com import e uma janela estendida além / maior que o tamanho da tela; e parece que import capturará uma imagem do mesmo tamanho que o tamanho da janela grande - infelizmente todos os pixels além do tamanho da tela e todos os pixels cobertos por outras janelas serão pretos.

Então, talvez a única maneira seja usar xrandr para aumentar o tamanho da tela (como em 'screen pannning') - ou usar outra coisa que forneça tamanho de tela maior: por exemplo, "Como posso fazer capturas de tela do navegador com uma resolução maior que meu navegador suporta? - Super User "notas:

Use Xephyr to create a nested X session

( Xephyr aparentemente está em sudo apt-get install xserver-xephyr no Ubuntu)

Espero que isso ajude,
Felicidades!

Edit: yup, xrandr funciona com a tela de impressão usual para mim (também com import , só precisa de espaço suficiente para um terminal caber, por isso não se sobrepõe à janela de destino), apenas observe o tamanho Virtual em xorg.conf (veja "xrandr: screen não pode ser maior que "... )

    
por 29.01.2011 / 15:25