dzen2 est un utilitaire de notification de toutes sortes. Cette command fera une notification qui dit "Hi" apparaîtra sur l'écran:
echo Hi | dzen2 -p
Debian's est un utilitaire qui programme les events à venir dans le futur. Cette command fera apparaître le file "foo" dans votre directory user après 1 minute:
echo "touch ~/foo" | at now + 1 minute
Alors, pourquoi cette command n'entraîne-t-elle pas l' dzen2
une notification dzen2
après 1 minute?
echo "echo Hi | dzen2 -p" | at now + 1 minute
J'ai enquêté pendant des heures et n'arrive pas à find une raison pour laquelle cela ne fonctionne pas! J'ai l'intuition que cela a à voir avec la coquille invoquée par, mais je ne comprends pas pourquoi elle échoue. Comme exemple de contrepoint, cette command fonctionne très bien:
echo "notify-send Hi" | at now + 1 minute
Le programme qui constitue le travail at
est un enfant du atd
(at daemon ), pas du shell où vous courez. Il n'hérite donc pas de l'environnement actuel du shell. Le système at
se charge de copyr l'environnement (et le directory de travail et quelque chose de plus obscur), mais il omet quelques variables.
En particulier, la variable DISPLAY
n'est pas copiée dans le travail at. Cette variable indique à tous les programmes X qui s'affichent à se connecter. Sans affichage X, dzen2 ne sait pas où faire apparaître une notification. Supprime DISPLAY
car il est généralement utilisé pour les tâches par lots, qui ne produisent aucun terminal ni aucune sortie graphique.
notify-send
fonctionne car il ne se connecte pas au server X: il utilise D-bus pour se connecter à un démon attaché à votre session X.
Vous pouvez faire fonctionner dzen2 en copiant explicitement la variable DISPLAY
:
echo "export DISPLAY=$DISPLAY;" 'echo hello | dzen2 -p' | at now + 42 minutes
Il est probable que dzen2 génère un message d'erreur (le message standard est Can't open display:
:). Toute sortie ou message d'erreur produit par le travail at est envoyé par courrier local (exactement comme pour les tâches cron). Vérifiez votre courrier local.