¿Por qué cronjob no ejecuta el comando feh?

¿Por qué cronjob no ejecuta el comando feh?

Construyo un cronjob para descargar una nueva imagen de una fuente cada diez minutos y la configuro como fondo de pantalla usando feh. El archivo se descarga pero el fondo de pantalla no cambia. ¿Dónde está el problema? crontab -eejecuta comandos como usuario, por lo que debería ser como ejecutaría la línea, lo cual funciona por cierto.

aquí está el guión

#!/bin/sh

#Filename
file="space-"$(date +%x_%H:%M:%S)

#save it 
wget http://rammb.cira.colostate.edu/ramsdis/online/images/latest_hi_res/himawari-8/full_disk_ahi_true_color.jpg -O /home/tim/Bilder/Wallpaper/$file -o /dev/null

#set background
feh --bg-max /home/tim/Bilder/Wallpaper/$file

Esto es crontab -epara el usuario qué fondo debe cambiarse (también conocido como yo)

*/10 * * * * /bin/sh /home/tim/Dokumente/Scripts/wallpaper.sh

En mi syslog encontré estas líneas

Jan 31 21:40:01 LinuxMint CRON[18209]: (tim) CMD (/bin/sh /home/tim/Dokumente/Scripts/wallpaper.sh)
Jan 31 21:40:11 LinuxMint CRON[18204]: (CRON) info (No MTA installed, discarding output) 

Respuesta1

Desafortunadamente, no se enfatiza lo suficiente que los procesos ambientales iniciados por cron get sonmuysimple, contiene sólo las variables y valores más importantes. Puede comprobarlo ejecutando un script de shell que contenga sólo

#!/bin/bash

set > /tmp/myset.txt

Verá que no hay ninguna variable DISPLAY configurada allí que sea necesaria para ejecutar cualquier aplicación basada en X (y, salvo raras excepciones, todo lo que usamos es ese tipo).

Tienes que poner algo como

export DISPLAY=:0.0

en su guión y tener mejores probabilidades.

Respuesta2

Para completar la respuesta de Gombai con instrucciones:

Ejecute env | grep -i displayy verifique el valor de DISPLAY. Probablemente sea :0.0, o :0.

Modifique su crontab en consecuencia:

*/10 * * * * DISPLAY=:0 /bin/sh /home/tim/Dokumente/Scripts/wallpaper.sh

información relacionada