Jump to content
ElementaryOS France

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

Link to comment
Share on other sites

  • 3 weeks later...

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 by Nikos
modification du message
Link to comment
Share on other 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

Link to comment
Share on other 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

Link to comment
Share on other sites

  • lili changed the title to [Résolu] Pb d'exécution: différence entre "sudo python" et "sudo ./"

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