Eu entendo o problema na pergunta da seguinte forma:
-
Você está em um console de texto tty ,
então não há X rodando no tty onde você está rodando o comando screenshot. -
Você pode executar os comandos da linha de comando da tela de comando para as exibições do X.
-
Você especificou o X exibe para os comandos de captura de tela, como em
DISPLAY=:2 scrot out.png
. -
O comando de captura de tela não apresenta um erro
Mas você obtém uma imagem em preto como saída .
O problema pode ser que o servidor X não esteja pintando a imagem em algum buffer de imagem, e a captura de tela é tirada desse buffer vazio. Mas também pode ser que seja um gerenciador de janelas de composição, como compiz
, que não está pintando. Pelo menos se você capturar janelas únicas, esse poderia ser o problema. Eu acho que vale a pena tentar usar um gerenciador de janelas não composto, como metacity
.
Se isso não resolver, há uma abordagem completamente diferente:
Execute todos os seus servidores X como servidores X aninhados em um único monitor. Cada servidor X aninhado mostra sua saída de tela em uma janela. Você pode, então, fazer capturas de tela em tela inteira da exibição aninhada ou capturas de tela da janela na tela principal.
Como implementação de um servidor X aninhado, Xephyr
parece ser o mais atual. Há também os antigos Xnest
e Xvfb
:
De man Xephyr
:
NAME
Xephyr - X server outputting to a window on a pre-existing X display
DESCRIPTION
Xephyr is a kdrive server that outputs to a window on a pre-existing "host" X dis‐
play. Think Xnest but with support for modern extensions like composite, damage
and randr.
Unlike Xnest which is an X proxy, i.e. limited to the capabilities of the host X
server, Xephyr is a real X server which uses the host X server window as "frame‐
buffer" via fast SHM XImages.
De maneira semelhante, o Xvnc (do pacote vnc4server) pode ser usado, fornecendo acesso adicionalmente pelo protocolo VNC:
De Xvnc4
:
NAME
Xvnc - the X VNC server
DESCRIPTION
Xvnc is the X VNC (Virtual Network Computing) server. It is based on a standard X
server, but it has a "virtual" screen rather than a physical one. X applications
display themselves on it as if it were a normal X display, but they can only be
accessed via a VNC viewer - see vncviewer(1).
So Xvnc is really two servers in one. To the applications it is an X server, and to
the remote VNC users it is a VNC server. By convention we have arranged that the
VNC server display number will be the same as the X server display number, which
means you can use eg. snoopy:2 to refer to display 2 on machine "snoopy" in both
the X world and the VNC world.
( Xvnc
está disponível como pacote vnc4server
no Ubuntu)