Tirar uma captura de tela da sessão do usuário atual

2

(Perdoe-me se minha terminologia não é bem precisa aqui)

Eu tenho uma configuração de tarefa cron que usa scrot para fazer capturas de tela da minha área de trabalho em vários intervalos.

No entanto, quando eu alterno o usuário para outra conta (sem fazer logoff), as capturas de tela que retornam são apenas fotos da tela de bloqueio.

Existe alguma maneira para eu obter uma captura de tela da sessão do usuário atual? Ou seja, o que é realmente na tela?

    
por Thomas Shields 03.06.2015 / 07:42

3 respostas

3

No que diz respeito ao X11, quando você alterna para outro usuário, esse usuário está em uma exibição completamente diferente.

Na sua sessão, se você executar:

echo $DISPLAY

você terá :0 , a primeira exibição virtual. No segundo usuário, o mesmo lhe dará :1 , o segundo display.

Você pode ver as telas em uso com o comando w :

[romano:~] % w  
 11:32:03 up  1:05,  8 users,  load average: 0,10, 0,24, 0,30
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
romano   :0       :0               10:27   ?xdm?   6:25   0.13s gdm-session-wor
romano   pts/1    :0               11:03   26:49   0.10s  0.10s zsh
romano   pts/3    :0               11:21    0.00s  0.12s  0.01s w
default  :1       :1               11:24   ?xdm?   6:25   0.07s gdm-session-wor
default  pts/15   :1               11:24    1:56   0.05s  0.05s bash

Para fazer uma captura de tela a partir de uma tela do outro ou de outro usuário, o usuário a ser "fotografado" deve emitir o comando

xhost + 

para ativar o acesso (nem mesmo root poderá fazer o instantâneo de outra forma). Depois disso, você pode fazer um

DISPLAY=:1 scrot 

de um script ou outro usuário. Observe que se você atirou em uma tela que não está ativa (exibida), você terá uma tela preta ou coisas estranhas --- quem sabe o que está na memória de buffer de vídeo ...

Agora cabe a você escrever um script explorando tudo isso ... você deve, em princípio, detectar qual usuário está ativo (não é fácil - ou simplesmente fotografou toda a tela e descartar os pretos depois) e fazer o captura de tela.

Boa sorte!

    
por Rmano 03.06.2015 / 11:41
0

Você precisa armazenar as capturas de tela em áreas visíveis publicamente, e também o xserver bloqueia a tela na troca de usuário (não é um fato demonstrado, mas uma suposição razoável). Você provavelmente precisará configurar um xserver para exibir isso em um arquivo no diretório inicial, para que quando a tarefa cron for chamada, você ative o xserver para renderizar a tela para o arquivo, em vez de para a exibição.

    
por Trey Gordon 03.06.2015 / 08:04
0

Quando você alterna para outro usuário, você está abrindo uma nova sessão para o novo usuário, e a sessão antiga para o primeiro usuário está apenas no login. Essa é uma atitude normal do cron, o cron é associado ao primeiro usuário, então ele só funciona com sua sessão.

Espero que você entenda o que quero dizer. Eu não sou tão bom assim em inglês, para fazer isso funcionar para o outro usuário, você tem que criar o mesmo cron para o segundo usuário, para que você possa tirar as fotos para cada usuário.

    
por Maythux 03.06.2015 / 08:20