2017-08-23 3 views
1

J'ai un travail qui commence dans crontab avec le privilège root. Ce travail doit afficher un message contextuel après un certain temps. Le travail est en python et utilise la boîte à outils MessageBox.Envoyer l'affichage à l'utilisateur à partir d'un travail racine

Avec roit, le travail fonctionne et après 5 minutes, je vois la boîte de message. Le problème est que si je me connecte en tant qu'utilisateur, je peux voir le travail s'exécuter dans la liste des tâches mais le popup ne fonctionne pas (probablement puisque l'affichage du travail est de la racine et non de l'utilisateur).

Je ne trouve pas le moyen de changer ce travail pour utiliser l'affichage de l'utilisateur ligin actuel.

Y a-t-il un moyen de changer cela afin que l'utilisateur verra le popup?

Merci.

+0

Avez-vous essayé de définir la variable DISPLAY? – piarston

+0

Avez-vous essayé d'accomplir votre tâche? qu'avez-vous essayé? pouvez-vous poster un [exemple minimal, vérifiable, complet] (https://stackoverflow.com/help/mcve)? – bracco23

+0

@ bracco23. Le travail python qui s'exécute dans cron a une boîte de message qui popup après 5 minutes. Quand je me connecte en tant que root cela fonctionne. Lorsque je me connecte en tant qu'utilisateur1, je peux voir que le travail est en cours d'exécution mais pas la boîte de message. Donc j'essaie d'accomplir ma tâche mais je ne sais pas comment. – ZoRo

Répondre

2

Le MessageBox ne fait pas de popup parce que le travail cron s'exécute dans un environnement où le DISPLAY (variable d'environnement) n'est pas défini. Au lieu d'avoir exécuté Cron votre python directement, vous pouvez le faire exécuter une simple enveloppe autour:

#!/usr/bin/env bash 
export DISPLAY=':0' 
python /path/to/your/python/program.sh 

Alternativement, si votre confiance, il ne sera pas gâcher avec d'autres tâches cron, vous pouvez ajouter DISPLAY=:0 la première ligne de votre crontab.