Configurando plano de fundo com Python2.7 Crontab no Ubuntu 12.04
-
13-12-2019 - |
Pergunta
Eu escrevi o seguinte script python simples que pretendia definir como um cron job no Ubuntu 12.04 para alterar o papel de parede uma vez por hora.O script é executado e altera o papel de parede quando eu o executo perfeitamente em um terminal.No entanto, quando configuro o cron job, posso ver no syslog que o cron job foi executado, mas o papel de parede não muda?
#!/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))
Solução
Parece que é um problema ao executar gsettings no cron.Alterar o comando os.system para incluir DISPLAY=:0 GSETTINGS_BACKEND=dconf resolve.
os.system("DISPLAY=:0 GSETTINGS_BACKEND=dconf gsettings set org.gnome.desktop.background picture-uri '%s'" % (setup))
Outras dicas
Você precisa alterar o diretório de trabalho do seu script.Você pode fazer isso invocando-o no crontab assim:
cd /path/of/your/script && python scriptname.py
ou Você pode fazer isso em seu script fazendo algo assim:
import os
my_path = os.path.abspath(__file__)
dir_name = os.path.dirname(my_path)
os.chdir(dir_name)
Além de fornecer um caminho correto para o arquivo de imagem de plano de fundo e definir as variáveis de ambiente necessárias, você pode alterar o plano de fundo do Python sem os.system()
chamar:
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 O trocador automático de plano de fundo usando Python 2.7.3 não funciona, embora devesse