Jump to content
ElementaryOS France

[Résolu] Python mettre en background depuis le web toutes les x secondes


Recommended Posts

Hello à tous,

 

Je souhaite faire un petit script qui télécharge (wget) une image avec le protocole http toutes les heure et la met en fond d'écran.

 

Mon problème : le script télécharge l'image comme il faut, met l'image en fond d'écran, mais lors du nouveau téléchargement, il ne met plus à jour l'image...

  • J'ai alors pensé que le problème venait du fait que comme le chemin et nom de l'image ne changent pas, il considédrait que c'était la même, alors il ne fait rien.
  • Donc, j'ai fais en sorte qu'un coup sur 2 l'image téléchargée s'appelle respectivement : photo_a.jpg, photo_b.jpg (en prenant soins de supprimer l'image précédente).
  • Il met bien à jour avec les 2 images, le fond changent, mais si entre temps les images photo_a.jpg et photo_b.jpg ont changé il continue de mettre à jour avec les premières versions téléchargées. Comme s'il y avait une histoire de cache...
  • [EDIT] Pour info si ça peut éclairer : je viens de m'apercevoir qu'après déconnexion de la session, l'arrière-plan s'est mis à jour (avec la version 2 cf ci-dessous)

Schéma pour mieux comprendre :

  1. wget photo_a.jpg (version 1)
    fond d'ecran devient photo_a.jpg (version 1)
  2. wget photo_b.jpg (version 1)
    fond d'écran devient photo_b.jpg (version 1)
  3. wget photo_a.jpg (version 2 (donc mise à jour))
    fond d'écran devient photo_a.jpg (version 1)
  4. wget photo_b.jpg (version 2)
    fond d'écran devient photo_b.jpg (version 1)

Voici le code :

#!/usr/bin/python
# -*- coding: utf-8 -*-

import time
import os

# Configuration des variables
chemin = '/home/bryan/.local/share/backgrounds'
temps = 20
url = 'http://cotaka.net/partage/photo.jpg'

while True :
    if os.path.isfile(''+chemin+'/photo_a.jpg') is False :
        if os.path.isfile(''+chemin+'/photo_b.jpg') is True :
            os.system('rm '+chemin+'/photo_b.jpg')
        os.system('wget -O photo_a.jpg '+url+'')
        os.system('mv photo_a.jpg '+chemin+'')
        os.system('gsettings set org.gnome.desktop.background picture-uri "file://'+chemin+'/photo_a.jpg"')
        time.sleep(temps)
    else :
        os.system('rm '+chemin+'/photo_a.jpg')
        os.system('wget -O photo_b.jpg '+url+'')
        os.system('mv photo_b.jpg '+chemin+'')
        os.system('gsettings set org.gnome.desktop.background picture-uri "file://'+chemin+'/photo_b.jpg"')
        time.sleep(temps)

A noter que le temps est bien de 20 secondes pour les tests.

 

Solutions probables :

  • il y aurait-t-il un autre emplacement où stocker l'image qui "surpasserait" un cache quelconque ?
  • il y a-t-il une commande pour forcer la mise à jour du fond d'écran ?
  • il y a-t-il une option à changer pour modifier le comportement de gnome ?

Merci par avance pour vos réponses :D.

Bon dimanche à tous.

Link to comment
Share on other sites

Salut,

 

pourquoi tu ne fais pas l'algo suivant :

while true

    wget -O /path/to/file.jpg http://www.example.com/image.jpg
    gsettings set org.gnome.desktop.background picture-uri "file:///path/to/file.jpg"
    sleep 3600;

Si tu veux éviter le sleep, je te conseille de lancer ton script (qui fait juste un wget et gsettings) via une tache cron (cherches crontab sur le net).

 

Est-ce que ceci pourrait également fonctionner ?

gsettings set org.gnome.desktop.background picture-uri "http://www.example.com/image.jpg"
Link to comment
Share on other sites

Salut,

 

Merci de ta réponse.

Si je ne me trompe pas, ton code c'est le même que le miens mise à part que tu indiques le bon chemin dés le wget et non en passant par un mv ?

J'ai fais le test : donc en téléchargeant l'image dans le dossier concerné puis en mettant la commande avec le chemin de ce dossier. Mais le comportement est le même...

 

Bonne idée de passer directement l'URL dans la commande, je n'y avais pas pensé ! Mais malheureusement ça ne fonctionne pas ça serait trop beau :P.

Link to comment
Share on other sites

oui c'est le même comportement.

 

Peut être que ça pourrait aller comme ça :

while true

    wget -O /path/to/file.jpg http://www.example.com/image.jpg
    # mise à une valeur vide pour prendre en compte un changement
    gsettings set org.gnome.desktop.background picture-uri ""
    gsettings set org.gnome.desktop.background picture-uri "file:///path/to/file.jpg"
    sleep 3600;
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...