Estou tentando fazer uma captura de tela de uma janela não visível em X.
Minha primeira tentativa foi capturar a janela usando xwd
ou import
(do ImageMagick).
Infelizmente quando a janela está sob algumas outras janelas, as partes ocultas são pretas.
O pior é que, quando a janela não está na área de trabalho atual, recebo um erro BadMatch
.
O próximo pensamento foi usar o Xnest, que criaria uma nova instância X apenas para esse aplicativo e estaria sempre no topo. E eu me deparo com outro problema. Xnest não suporta OpenGL.
Algumas pesquisas no Google e eu acho [Xephyr] [1] que suporta OpenGL ... mas não acelerado por hardware, então não é accaptable, pois mata a minha CPU.
O mesmo vale para o Xvfb, que também usa CPU para renderizar o OpenGL. Abaixo está parte da saída do glxinfo
:
OpenGL vendor string: Mesa Project OpenGL renderer string: Software Rasterizer OpenGL version string: 2.1 Mesa 7.8.2 OpenGL shading language version string: 1.20
A única coisa que posso pensar é de alguma forma usar o Xlib para forçar meu servidor X a renderizar a janela para um pixbuf. Infelizmente eu quase não tenho conhecimento do Xlib.
Então, minha pergunta é: como posso obter uma captura de tela de uma janela não visível de um aplicativo que usa o OpenGL em X?
Por enquanto, só posso fazer uma captura de tela usando [Python-Xlib] [2] e PIL . Além disso, qualquer outra solução usando Python ou C é aceitável.
Tags opengl screenshot linux