2012-10-03 18 views
5

He escrito la siguiente secuencia de comandos simple de python que tenía la intención de establecer como una tarea de cron en Ubuntu 12.04 para cambiar el fondo de pantalla una vez por hora. El script se ejecuta y cambia el fondo de pantalla cuando lo ejecuto perfectamente desde un terminal. Sin embargo, cuando configuro la tarea cron, puedo ver que en syslog se ejecutó la tarea cron, pero el fondo de pantalla no cambia.Configuración de fondo con Python2.7 Crontab en Ubuntu 12.04

#!/usr/bin/python 

import os 
import random 

directory = os.getcwd() + '/' 
files = os.listdir('.') 
random.shuffle(files) 
files.remove('.project') 
files.remove('.pydevproject') 
files.remove('background.py') 
background = files[0] 
setup = 'file://' + directory + background 

print setup 

os.system("gsettings set org.gnome.desktop.background picture-uri '%s'" % (setup)) 

Respuesta

2

Parece que es un problema con el funcionamiento gsettings bajo cron. Cambiar el comando os.system para incluir DISPLAY =: 0 GSETTINGS_BACKEND = dconf hace el truco.

os.system ("DISPLAY =: 0 GSETTINGS_BACKEND = dconf gsettings establecer org.gnome.desktop.background foto-uri '% s'" % (setup))

1

Tienes que cambiar el directorio de trabajo de tu script. Puede hacerlo mediante la invocación desde crontab como esto:

cd /path/of/your/script && python scriptname.py 

o puede hacerlo en la secuencia de comandos haciendo algo como esto:

import os 

my_path = os.path.abspath(__file__) 
dir_name = os.path.dirname(my_path) 
os.chdir(dir_name) 
+0

gracias he intentado tanto, pero tampoco funcionó. El fondo no cambia. – James

0

Además de proporcionar una ruta de acceso correcta para el archivo de imagen de fondo y ajuste de las variables de entorno necesarias que podrían cambiar el fondo de Python sin os.system() llamada:

import os 
import urllib 
from gi.repository.Gio import Settings # pylint: disable=F0401,E0611 

def set_background(image_path, check_exist=True): 
    """Change desktop background to image pointed by `image_path`. 

    """ 
    if check_exist: # make sure we can read it (at this time) 
     with open(image_path, 'rb') as f: 
      f.read(1) 

    # prepare uri 
    path = os.path.abspath(image_path) 
    if isinstance(path, unicode): # quote() doesn't like unicode 
     path = path.encode('utf-8') 
    uri = 'file://' + urllib.quote(path) 

    # change background 
    bg_setting = Settings.new('org.gnome.desktop.background') 
    bg_setting.set_string('picture-uri', uri) 
    bg_setting.apply() # might be unnecessary 

de Automatic background changer using Python 2.7.3 not working, though it should

Cuestiones relacionadas