paulo1205
(usa Ubuntu)
Enviado em 12/02/2020 - 01:23h
Acesso ao ambiente gráfico normalmente é afetado por variáveis de ambiente, tais como
DISPLAY e
XAUTHORITY . Se for uma aplicação mais voltada para FreeDesktop e comunicação via DBUS, outras ainda podem ser necessárias (por exemplo:
DBUS_SESSION_BUS_ADDRESS e
DESKTOP_SESSION ). E mesmo os valores de coisas mais básicas, tais como
PATH ,
LANG ou
LC_... podem influenciar a aplicação e ser diferentes quando a tarefa é executada via
cron .
É muito improvável que as variáveis relativas à sessão X11 e/ou FreeDesktop estejam definidas no momento em que o serviço
cron (ou equivalente) execute seu
crontab , pois todas elas têm a ver com uma sessão de
login interativo, podendo inclusive mudar entre um
login e outro. Isso é difícil de o
cron , sem alguma ajuda se sua parte, tentar simular, de modo que ele nem sequer tenta tal simulação.
Dá para fazer via
cron ? Dá, mas eu não estou certo de se é o melhor caminho. Se o que você quer capturar é tirar fotos periódicas da sua sessão de
login , possivelmente seria melhor usar um agendador de tarefas especificamente vinculado à sessão (mas confesso que eu não sei se existe um programa assim; ao procurar rapidamente sobre “
task scheduler ” para Gnome e para KDE, só encontrei interfaces para manipular
crontabs ).
Mesmo que você queira capturas de tela forçadas, ainda que seja outra pessoa logada, em vez de você, ou ainda que não haja ninguém logado, ainda assim eu creio que possa haver caminhos simples do que o cron, tal como, por exemplo, colocar um
script executando em
loop como parte da inicialização do
display (etapa de
Xsetup ).
Por exemplo, imagine o seguinte
script .
#!/bin/sh
MAX_FAILURES=5
[ -z "$DISPLAY" ] && exit 1
failures=0
while : ; do
if ! import -window root "/tmp/tela-$DISPLAY.png"; then
# Falha de execução pode indicar que a sessão já terminou. Mesmo assim,
# tenta mais algumas ezes antes de interromper as captura, pois a causa
# ode também ser por uma situação temporária. De todo modo, você pode
# tentar sofisticar um pouco mais a detecção e tratamento de erros.
failures=`expr $faillures + 1`
[ $failures -gt $MAX_FAILURES ] && exit 1
fi
sleep 300 # Pausa de 5 minutos (300 segundos)
done & # Executa o laço de repetição num subshell e em background (um arremedo de daemon).
exit 0 # Volta ao Xsetup (ou ao programa que o chamou).
Se você colocar o
script acima como parte das rotinas do
Xsetup , ele deve (não testei) herdar os valores já definidos de variáveis de ambiente, satisfazendo requisitos do comando de captura da tela, e vai executar (como root) ao longo de toda a vida do processo que exibe o ambiente gráfico, mesmo antes de o usuário fazer
login ou até depois do
logout (se o gerenciador de sessão estiver configurado para preservar o mesmo processo do servidor X11). Mas você também pode colocá-lo como
script a ser executado no início da sua sessão de
login (por meio, por exemplo, do painel de controle do KDE ou Gnome), e pode até executá-lo manualmente.
... “Principium sapientiae timor Domini, et scientia sanctorum prudentia.” (Proverbia 9:10)