2010-04-26 13 views
5

Tengo una secuencia de comandos python que establece correctamente el fondo de escritorio a través de gconf a una imagen aleatoria en una carpeta determinada.Usuario Crontab + Python + Fondos de pantalla aleatorios = ¿No funciona?

que tienen entonces la siguiente entrada en mi crontab

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

y syslog informa correctamente de ejecución

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) 

Pero no changey desktopy, alguna idea?

+0

¿Ve el cambio de valor en gconf-editor? ¿El fondo de pantalla cambia si configura el valor de gconf-editor? – Thomas

+0

sí y sí, como he dicho, la secuencia de comandos funciona fuera de la llamada cron como ~ ~ bin/change-background.py y python ~/bin/change-background.py – Bolster

Respuesta

6

Su secuencia de comandos depende de la variable de entorno DISPLAY, que se establece cuando ejecuta el script desde el shell en una sesión X, pero se desactiva cuando el script se ejecuta desde cron.

+2

Indique su respuesta en forma de respuesta:) – Bolster

+4

@Andrew Pensé que sí. Su pregunta fue "¿Alguna idea?", Le di la razón más probable dada la información limitada que ha presentado. He adivinado correctamente que el problema no está en cron o gconf, sino en una variable de entorno particular. Viendo que eres aparentemente fluido con * NIX y Python, no sentí la necesidad de enseñarte cómo configurar variables de entorno (para el registro, es 'os.environ [" DISPLAY "] = ...' en Python) – Bolo

2

Según la observación de Bolo, me olvidé de construir en la PANTALLA en el script o en el crontab.

solución más fácil es anteponer el crontab con env DISPLAY=:0.0

manera:

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

Entonces, ¿aceptas su respuesta? – manifest

+0

Lo haré, en 44 horas :) – Bolster

+0

Errr, a menos que se haya eliminado algún comentario: * his *, not * this *, ¿así que no hay que esperar 44 horas? (Pero bueno, eso es [una discusión sobre Meta] (http://meta.stackexchange.com/questions/47906/etiquette-for-dealing-with-hint-answers).) – Arjan

2

Para establecer la variable de entorno DISPLAY, yo lo pondría directamente en el crontab. Además, haría el script ejecutable y le daría un encabezado adecuado (#!/usr/bin/env python) para que se pueda ejecutar directamente. Además, puede confiar en que PWD se establece en INICIO cuando se ejecuta crontab.

Mi crontab se vería así:

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

También puede establecer la ruta (de la misma manera como DISPLAY) para que el bin/ no es incluso necesario.


El Gotcha principal para el establecimiento de medio ambiente en el crontab es que los valores son no variable interpolada. Por ejemplo, esto no da los resultados esperados:

PATH=$HOME/bin:$PATH 
+0

La secuencia de comandos es ejecutable, tiene el encabezado adecuado y la ruta está configurada correctamente (tengo muchas cosas en ~/bin) pero me gusta indicar explícitamente qué está pasando, por lo que tener el 'export DISPLAY: 0.0' en línea en el crontab recuérdeme por qué está allí en 6 meses: D Gracias por su interés. – Bolster

Cuestiones relacionadas