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.