Por que o dzen2 não funciona quando invocado via at?

3

dzen2 é um utilitário de notificação das sortes. Este comando fará uma notificação que diz "Oi" aparece na tela:

echo Hi | dzen2 -p

O do Debian é um utilitário que agenda eventos para ocorrer no futuro. Este comando fará com que o arquivo "foo" apareça no seu diretório de usuários após 1 minuto:

echo "touch ~/foo" | at now + 1 minute

Então, por que esse comando não faz com que uma notificação dzen2 apareça depois de 1 minuto?

echo "echo Hi | dzen2 -p" | at now + 1 minute

Eu tenho investigado por horas e não consigo encontrar uma razão para isso não funcionar! Eu tenho um palpite que tem a ver com o shell que é invocado por, mas eu simplesmente não entendo porque ele falha. Como um exemplo de contraponto, este comando funciona bem:

echo "notify-send Hi" | at now + 1 minute
    
por Cory Klein 11.05.2012 / 00:21

1 resposta

6

O programa que constitui o trabalho at é filho do atd (no daemon ), não do shell em que você executa at . Portanto, ele não herda o ambiente atual do shell. O sistema at organiza para copiar o ambiente (e o diretório de trabalho e algumas coisas mais obscuras), mas omite algumas variáveis.

Em particular, a variável DISPLAY não é copiada para o trabalho em. Esta variável informa todos os programas X que exibem para se conectar. Sem um display X, o dzen2 não sabe onde aparecer uma notificação. Em remove DISPLAY porque geralmente é usado para trabalhos em lote, que não produzem nenhum terminal ou saída gráfica.

notify-send funciona porque não se conecta ao servidor X: ele usa D-bus para conectar-se a um daemon que está anexado à sua sessão X.

Você pode fazer o dzen2 funcionar explicitamente copiando a variável DISPLAY :

echo "export DISPLAY=$DISPLAY;" 'echo hello | dzen2 -p' | at now + 42 minutes

É provável que dzen2 produza uma mensagem de erro (a mensagem padrão é Can't open display: ). Qualquer saída ou mensagem de erro produzida pelo trabalho em é enviada por correio local (exatamente como para trabalhos agendados). Verifique seu e-mail local.

    
por 11.05.2012 / 03:17

Tags