Table des matières

Fond d'écran aléatoire

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

fond_ecran_crontab.sh
#!/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

voir : crontab

Mise en place (méthode sans crontab)

Pourquoi faire simple quand on peut faire compliqué LOL

fond_ecran.sh
#!/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

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

fermeture_session.sh
#!/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

1)
N'hésitez pas à y faire part de vos remarques, succès, améliorations ou échecs !