Question

J'ai écrit le simple script python suivant que j'avais l'intention de définir comme tâche cron dans Ubuntu 12.04 pour changer le fond d'écran une fois par heure.Le script s'exécute et change parfaitement le fond d'écran lorsque je l'exécute depuis un terminal.Cependant, lorsque je configure la tâche cron, je peux voir dans syslog que la tâche cron a été exécutée mais que le fond d'écran ne change pas ?

#!/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))
Était-ce utile?

La solution

Il semble que c'est un problème avec des gsettings en cours de cron.Changement de la commande OS.System pour inclure Affichage=: 0 gsettings_backend= dconf fait le truc.

OS.System ("Affichage=: 0 gsettings_backend= dconf gsettings définit org.gnome.desktop.background image-uri '% s'"% (configuration))

Autres conseils

Vous devez modifier le répertoire de travail de votre script.Vous pouvez le faire en l'appelant de crontab comme ceci:

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

ou vous pouvez le faire dans votre script faire quelque chose comme ceci:

import os

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

En plus de fournir un chemin correct pour le fichier image d'arrière-plan et de définir les variables d'environnement nécessaires, vous pouvez modifier l'arrière-plan depuis Python sans os.system() appel:

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

depuis Le changeur d'arrière-plan automatique utilisant Python 2.7.3 ne fonctionne pas, alors qu'il devrait le faire

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top