Aller au contenu
ElementaryOS France
Cotaka

[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.

Partager ce message


Lien à poster
Partager sur d’autres 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"

Partager ce message


Lien à poster
Partager sur d’autres 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.

Partager ce message


Lien à poster
Partager sur d’autres 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;

Partager ce message


Lien à poster
Partager sur d’autres sites

Créer un compte ou se connecter pour commenter

Vous devez être membre afin de pouvoir déposer un commentaire

Créer un compte

Créez un compte sur notre communauté. C’est facile !

Créer un nouveau compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant

×