2012-10-03 5 views
5

Ho scritto il seguente semplice script python che intendevo impostare come cron job in Ubuntu 12.04 per cambiare lo sfondo una volta all'ora. Lo script viene eseguito e cambia lo sfondo quando lo eseguo perfettamente da un terminale. Tuttavia quando imposto il cron job posso vedere in syslog che il cron job è stato eseguito ma lo sfondo non cambia?Impostazione dello sfondo con Python2.7 Crontab in 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)) 

risposta

2

Sembra proprio un problema con l'esecuzione gsettings sotto cron. Cambiando il comando os.system per includere DISPLAY =: 0 GSETTINGS_BACKEND = dconf fa il trucco.

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

1

È necessario modificare la directory di lavoro del proprio script. Puoi farlo invocando da crontab così:

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

o lo si può fare nello script facendo qualcosa di simile:

import os 

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

grazie ho provato entrambi, ma non ha funzionato. Lo sfondo non cambia. – James

0

Oltre a fornire un percorso corretto per il file di immagine di sfondo e delle variabili di ambiente necessarie si potrebbe cambiare sfondo da Python senza os.system() chiamata:

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 

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