======Fond d'écran aléatoire=====
* Objet : Mise en place d'un script pour un changement automatique du fond d'écran sous Mate
* Niveau requis : {{tag>débutant}}
* Commentaires : //Ce tuto s'adresse aux utilisateurs de l'**environnement Mate**, mais on peut toutefois s'en inspirer pour l'adapter sur d'autre environnement de Bureau. //
* Débutant, à savoir : [[:doc:systeme:commandes:le_debianiste_qui_papillonne|Utiliser GNU/Linux en ligne de commande, tout commence là !.]] :-)
* créé le 13/06/2021 testé sous Debian Buster
* Modifié le 15/06/2021
* Commentaires sur le forum : [[https://debian-facile.org/viewtopic.php?id=30209 | Lien vers le forum concernant ce tuto]]((N'hésitez pas à y faire part de vos remarques, succès, améliorations ou échecs !))
====Introduction====
Sous Mate un seul slideshow disponible pour les fonds d'écran (Cosmos), je n'ai trouvé aucune solution facile pour en créer d'autre \\
Le meilleur logiciel de slideshow que j'ai trouvé : variety est disponible dans les dépôts Debian \\
Un autre logiciel fait son apparition sous Bulleye : hydrapaper , pour l'instant mes tests en VM sont peu concluants
====Mise en place (méthode simplifiée)====
On créer un fichier script avec le contenu suivant
#!/bin/bash
#change de fond d'écran aléatoirement grâce à la commande shuf
#Plusieurs répertoires peuvent être indiqués à l'intérieur des guillemets double, les répertoires contenant des espaces devront être protégé par des guillemets simple
backgroundsdir="/home/stephane/Images/Wallpapers/16:9 /home/stephane/.config/variety/Downloaded/Unsplash"
currentpic="$(find $backgroundsdir -iname '*.*p*g' | shuf -n1)"
gsettings set org.mate.background picture-filename "$currentpic"
exit
rendre le fichier exécutable
chmod +x fond_ecran_crontab.sh
En utilisant crontab certaines variables indispensable au bon fonctionnement du script nous manquent \\
Pour afficher ses variables
env |egrep 'DISPLAY|DBUS'
DISPLAY=:0
DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus
Éditer le fichier crontab et régler le temps voulu entre les changements de fond d'écran (sans oublier de reporter les valeurs des deux variables)
crontab -e
exemple pour un changement de fond d'écran toute les 5 minutes:
*/5 * * * * DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus DISPLAY=:0 /home/stephane/fond_ecran_crontab.sh
===Utilisation===
Un ou plusieurs répertoires contenant des photos doivent être précisés pour la variable backgroundsdir \\
Pour le reste tout se passe en éditant le fichier crontab
crontab -e
il suffit juste de commenter la ligne pour désactiver le script par exemple ;-)
#*/5 * * * * DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus DISPLAY=:0 /home/stephane/fond_ecran_crontab.sh
[[:doc:systeme:crontab|voir : crontab]]
====Mise en place (méthode sans crontab)====
Pourquoi faire simple quand on peut faire compliqué LOL
#!/bin/bash
#change de fond d'écran aléatoirement grâce à la commande shuf
#Plusieurs répertoires peuvent être indiqués pour la variable backgroundsdir
#les répertoires contenant des espaces devront être protégé par des guillemets simple
backgroundsdir="$HOME/Images/Wallpapers/16:9 $HOME/.config/variety/Downloaded/Unsplash"
while true
do
#5 minutes
sleep 300
currentpic="$(find $backgroundsdir -iname '*.*p*g' | shuf -n1)"
gsettings set org.mate.background picture-filename "$currentpic"
done
Ne pas oublier de rendre le script éxécutable ;-)
chmod +x fond_ecran.sh
l'intérêt du script est qu'il soit lancé à l'ouverture de session
j'ai donc créé un fichier desktop avec le contenu suivant que j'ai placé dans mon dossier \\ $HOME/.config/autostart
[Desktop Entry]
Version=1.0
Type=Application
Terminal=false
Icon=$HOME/.icons/oomox-quakeWorld_croutons/scalable/status/xfce-unknown.svg
Icon[fr_FR]=st
Name[fr_FR]=fond_ecran
Exec=$HOME/fond_ecran.sh
Comment[fr_FR]=chargement aléatoire de fond d'écran
Name=fond_ecran
Comment=chargement aléatoire de fond d'écran
X-MATE-Autostart-enabled=true
**dernière étape indispensable**: créer un script pour tuer le processus à la fermeture de session
sans quoi le script fond_ecran.sh reste actif et peut avoir plusieurs instances d'ouverte à mesure que les sessions s'ouvrent sans redémarrage de l'ordi
#!/bin/bash
#ce script s'exécute après la fermeture de session
#session-cleanup-script=$HOME/fermeture_session.sh ajouté dans le fichier configuration de lightdm
#arret du script fond_ecran, tue le ou les processus correspondant au PID fond_ecran.sh
kill $(pgrep -f 'fond_ecran.sh')
(rendre le script exécutable)
Éditer le fichier de configuration de lightdm en root
nano /etc/lightdm/lightdm.conf
puis ajouter sous la section
[SeatDefaults]
ou bien
[Seat:*]
la ligne
session-cleanup-script=/home/stephane/fermeture_session.sh
Enregistrer le fichier et redémarrer le pc ou redémarrer le service lightdm pour que les modifications soient prises en compte
bien indiquer le chemin complet, ne pas utiliser de variable d'environnement \\
cette ligne sera éxécuté en tant que root
===Utilisation===
Un ou plusieurs répertoires contenant des photos doivent être précisés pour la variable backgroundsdir \\
l'affichage par défaut pour chaque fond d'écran est de 5 minutes (sleep 300) \\
la valeur est à inscrire en secondes, mais on peut utiliser un suffixe (voir sleep --help)
Pour inactivé le script au démarrage, éditer le fichier desktop du dossier autostart et passer la ligne à false
X-MATE-Autostart-enabled=false
inversement repasser la valeur à true pour réactiver le démarrage auto
Note: si tout est bien la commande suivante doit renvoyer un seul numéro de PID du script actif
pgrep -f 'fond_ecran.sh'
à la fermeture de session cette commande ne doit rien renvoyer, dans le cas contraire c'est que quelque chose ne vas pas
sources du script d'origine
https://forums.linuxmint.com/viewtopic.php?t=305338