Aller au contenu
ElementaryOS France
lili

[Résolu] Pb d'exécution: différence entre "sudo python" et "sudo ./"

Recommended Posts

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)

Partager ce message


Lien à poster
Partager sur d’autres sites

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

 

Modifié par Nikos
modification du message

Partager ce message


Lien à poster
Partager sur d’autres sites

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 :blink:

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

Partager ce message


Lien à poster
Partager sur d’autres sites

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

Partager ce message


Lien à poster
Partager sur d’autres sites

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.

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

×