lili Posted June 22, 2017 Posted June 22, 2017 Bonjour à tous, J'ai voulu faire un script afin de créer un diaporama avec les images de fond du bureau. Je me suis inspirée du post de Cotaka posté il y a 1 an que j'ai modifié un peu. Voici mon problème, il fonctionne nickel quand je l'exécute depuis la console en tapant: python fond.py par contre si je fais: sudo ./fond.py il se lance correctement mais l'image de fond ne change pas. Quelle est la différence entre ces 2 façons? Car du coup quand il s'exécute avec CronTab, le script s'exécute bien (le fichier .log est correctement modifié) mais le fond ne change pas.. Est-ce que c'est un problème de droits incorrects quand il tente de faire: os.system('gsettings set org.gnome.desktop.background picture-uri "file://'+str(chemin)+str(num_img)+'.jpg"')? voici le code de mon script de diaporama: #!/usr/bin/python # -*- coding: utf-8 -*- ''' Ce script permet de changer le fond d'écran toutes les 15 min avec CronTab Pour le tester depuis la console: ne pas le lancer "sudo ./fond.py" mais "python fond.py" (Pourquoi??) ''' import os # Configuration des variables chemin = '/home/liliana/fond-ecran/' # dossier contenant les img de fond # On compte le nombre d'images de fond qu'il y a dans le dossier nb_img = (len(os.listdir( chemin )) - 3) # on enlève 3 car il y les fichiers fond.py, liscatoi et num-img.log # On va checker ou créer le fichier num-img.log pour connaitre le numéro de l'image de fond en cours if os.path.isfile(chemin+"num-img.log"): print("Le fichier num-img.log existe: on met son contenu ds la variable num_img") fichier = open(chemin+"num-img.log", "r") num_img = fichier.read() fichier.close() else: # num-img.log n'existe pas print("Le fichier num-img.log n'existe pas -> on le créer et on inscrit 1 dedans pour 1ère img") num_img = 1 # on cree la variable fichier = open(chemin+"num-img.log", "a") fichier.write(str(num_img)) fichier.close() # On charge l'image portant le numéro contenu dans $num_img os.system('gsettings set org.gnome.desktop.background picture-uri "file://'+str(chemin)+str(num_img)+'.jpg"') #print('gsettings set org.gnome.desktop.background picture-uri "file://'+str(chemin)+str(num_img)+'.jpg"') print("Image de fond " + str(num_img) + ".jpg chargée..") # Puis on met +1 dans num-img.log num_img = (int(num_img) + 1) if num_img > nb_img: # si le numéro de l'image est > que le nombre d'img dans le dossier alors num_img = 1 # on revient à la 1ère img os.remove(chemin+"num-img.log") # on efface le fichier num-img.log fichier = open(chemin+"num-img.log", "a") # pour le recreer avec + 1 fichier.write(str(num_img)) fichier.close() print("Fichier num-img.log + 1") Un grand merci d'avance :-) (source du post de Cotaka: http://forum.elementaryos-fr.org/topic/1977-résolu-python-mettre-en-background-depuis-le-web-toutes-les-x-secondes)
Nikos Posted July 13, 2017 Posted July 13, 2017 (edited) Bonjour,Il vaut mieux lancer ce script sans sudo, il y a fort à parier que ce script modifie le fond d'écran de root. Il y a un soucis dans ce script, je vais y regarder Nikos Edited July 13, 2017 by Nikos modification du message
lili Posted July 13, 2017 Author Posted July 13, 2017 Salut, Merci pour ta réponse, mais mon problème est que depuis la console taper: python /etc/fond-ecran-diapo/fond.py fonctionne nickel et avec Crontab avec la commande */1 * * * * python /etc/fond-ecran-diapo/fond.py le script est bien exécuté toutes les minutes, mais mon fond ne change pas J'ai même testé avec Cron en spécifiant un utilisateur: */1 * * * * lili python /etc/fond-ecran-diapo/fond.py mais c'est idem.. Bref tant pis ce n'est pas très important finalement
Nikos Posted July 13, 2017 Posted July 13, 2017 Hello lili, J'ai une solution pour toi qui sera plus simple : Tout d'abord il te faudra, depuis un terminal taper la commande suivante (note le résultat) : echo $DISPLAY Puis il te faudra sauvegarder le contenu de ce script sur ta machine par exemple dans ton dossier Documents sous le nom mywall.sh #!/bin/bash # # Script author : Nikos # From : www.elementaryos-fr.org # Date : 13/07/2017 # # Purpose : choose a random wallpaper from a directory and set it as a wallpaper # Ligne a personnaliser WALLFOLDER="/home/lili/fond-ecran/" WALLFILE=$(shuf -n1 -e ${WALLFOLDER}*.{jpg,png}) if [[ -r ${WALLFILE} ]] then # Le fichier est accesible en lecture, on va pouvoir l'utiliser DISPLAY=:0 gsettings set org.gnome.desktop.background picture-uri "file://${WALLFILE}" else echo "le fichier ${WALLFILE} non lisible par ${USER}" fi Lors de la précédente commande (echo $DISPLAY) si le résultat de la commande n'était pas ":0", il te faudra adapter la ligne 17 : DISPLAY=:0 gsettings set org.gnome.desktop.background picture-uri "file://${WALLFILE} Par exemple si la commande t'a retournée :5, la ligne 17 se trouvera donc être : DISPLAY=:5 gsettings set org.gnome.desktop.background picture-uri "file://${WALLFILE}" Il te faudra ajouter des fichiers dans ton dossier "fond-ecran", le script est prévu pour charger les fichiers de type jpg et png (il prend en compte aussi les fichiers avec des espaces). Pour l'utiliser, il te faudra le rendre exécutable via la commande suivante : chmod u+x /home/lili/Documents/mywall.sh là tu pourras le tester via la commande : ./mywall.sh Si ce script se comporte comme tu le souhaites, tu peux, depuis un terminal programmer un lancement de ce script toutes les 5 minutes via la crontab (en utilisant la commande crontab -e) et y ajouter la ligne suivante : */5 * * * * /bin/bash /home/lili/Documents/mywall.sh Nikos
lili Posted July 16, 2017 Author Posted July 16, 2017 Salut Nikos! Merci beaucoup pour ton script!! Ca marche nickel, du coup j'apprends le langage shell car je ne connaissais pas du tout :-) Merci encore! A bientôt, Liliana.
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now