2010-04-26 6 views
5

J'ai un script python qui définit correctement le fond d'écran du bureau via gconf à une image aléatoire dans un dossier donné.Utilisateur Crontab + Python + Fonds d'écran aléatoires = Ne fonctionne pas?

J'ai alors l'entrée suivante dans mon crontab

* * * * * python /home/bolster/bin/change-background.py

Et syslog rapports correctement exécution

Apr 26 14:11:01 bolster-desktop CRON[9751]: (bolster) CMD (python /home/bolster/bin/change-background.py) 
Apr 26 14:12:01 bolster-desktop CRON[9836]: (bolster) CMD (python /home/bolster/bin/change-background.py) 
Apr 26 14:13:01 bolster-desktop CRON[9860]: (bolster) CMD (python /home/bolster/bin/change-background.py) 
Apr 26 14:14:01 bolster-desktop CRON[9905]: (bolster) CMD (python /home/bolster/bin/change-background.py) 
Apr 26 14:15:01 bolster-desktop CRON[9948]: (bolster) CMD (python /home/bolster/bin/change-background.py) 
Apr 26 14:16:01 bolster-desktop CRON[9983]: (bolster) CMD (python /home/bolster/bin/change-background.py) 

Mais Changey de desktopy, des idées?

+0

Voyez-vous la valeur changer dans gconf-editor? Est-ce que le fond d'écran change si vous définissez la valeur de gconf-editor? – Thomas

+0

oui et oui, comme je l'ai dit, le script fonctionne en dehors de l'appel cron comme juste ~/bin/change-background.py et python ~/bin/change-background.py – Bolster

Répondre

6

Votre script dépend de la variable d'environnement DISPLAY, qui est définie lorsque vous exécutez le script à partir du shell dans une session X, mais qu'elle n'est pas définie lorsque le script est exécuté à partir de cron.

+2

Veuillez indiquer votre réponse sous la forme d'une réponse:) – Bolster

+4

@Andrew Je pensais que je l'ai fait. Votre question était "Des idées?", Je vous ai donné la raison la plus probable compte tenu des informations limitées que vous avez présentées. J'ai correctement deviné que le problème n'est pas avec cron ou gconf, c'est avec une variable d'environnement particulière. Voyant que vous parlez couramment avec * NIX et Python, je n'ai pas ressenti le besoin de vous apprendre à définir les variables d'environnement (pour l'enregistrement, c'est 'os.environ [" DISPLAY "] = ...' en Python). – Bolo

2

Selon l'observation de Bolo, j'ai oublié de construire dans le DISPLAY dans le script ou le crontab.

solution simple est de préfixer le crontab avec env DISPLAY=:0.0

donc:

* * * * * env DISPLAY=:0.0 python /home/bolster/bin/change-background.py 
+1

Alors acceptez sa réponse? – manifest

+0

Je vais, dans 44 heures :) – Bolster

+0

Errr, à moins que certains commentaires ont été supprimés: * son *, pas * ceci *, donc pas besoin d'attendre 44 heures? (Mais bon, c'est [une discussion sur Meta] (http://meta.stackexchange.com/questions/47906/etiquette-for-dealing-with-hint-answers).) – Arjan

2

Pour définir la variable d'environnement DISPLAY, je mettrais directement dans la crontab. Aussi, je rendrais le script exécutable et lui donnerais un en-tête approprié (#!/usr/bin/env python) pour qu'il puisse être exécuté directement. De plus, vous pouvez compter sur le PWD étant réglé sur HOME lorsque le crontab s'exécute.

Mon crontab ressemblerait à ceci:

DISPLAY=:0.0 
* * * * * bin/change-background.py 

Vous pouvez également définir le chemin (de la même manière que DISPLAY) de sorte que le bin/ est même pas nécessaire.


Le principal gotcha de définition d'environnement dans la table des tâches est que les valeurs sont pas variable interpolée. Par exemple, cela ne donne pas les résultats attendus:

PATH=$HOME/bin:$PATH 
+0

Script est exécutable, a l'en-tête approprié, et le chemin est correctement défini (j'ai beaucoup de choses dans ~/bin) mais j'aime juste expliquant explicitement ce qui se passe, ainsi avoir le 'export DISPLAY: 0.0' inline dans le crontab rappelez-moi pourquoi il est là dans 6 mois: D Nous vous remercions de votre intérêt. – Bolster

Questions connexes