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