Você não pode com certeza. Você tem que fazer suposições.
Finja que você é cron
e está enfrentando o pior cenário por um segundo: há vários usuários conectados e cada usuário está executando várias sessões X. Você terá que adivinhar o usuário (bastante fácil, estamos executando o crontab) e uma das sessões X desse usuário.
Se quisermos supor que o usuário está executando uma e somente uma sessão X de um tty e obter o valor $DISPLAY
dessa sessão, podemos usar w
:
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
user tty1 16:32 7:15 0.21s 0.19s -zsh
user tty2 :1 15:52 48:13 2:17 0.08s /sbin/upstart
user pts/3 :1 16:19 0.00s 0.66s 0.00s w
Por exemplo, aqui estou logado em tty1, em tty2 (onde estou executando uma sessão X) e em pts / 3 (o terminal do qual estou executando o comando).
Com um pouco de análise:
% w $(id -un) | awk 'NF > 7 && ~ /tty[0-9]+/ {print ; exit}'
:1
Então, assumindo todos os itens acima:
0 0 * * * DISPLAY=$(w $(id -un) | awk 'NF > 7 && ~ /tty[0-9]+/ {print ; exit}') command
Fará cron
executar command
com $DISPLAY
definido para a primeira sessão X em execução no valor $DISPLAY
de tty encontrado para o usuário.