[BASH] Partage script de changement de fond d'ecran

Autres projets et contributions
Répondre
xp-1000
Hankyu
Messages : 29
Inscription : ven. 12 juil. 2013, 13:35

[BASH] Partage script de changement de fond d'ecran

Message par xp-1000 »

Bonjour !

Ca fait un moment maintenant que j'ai installé archlinux pour un serveur domestique censé effectuer certaines tâches longues des clients et centraliser des données.
C'était donc un serveur sans environnement graphique qui faisait tourner mon serveur mail et web perso ainsi que des services domestiques comme SMB/FTP/PyLoad et divers logiciels de communication TCP que j'ai du développés pour des besoins spécifiques.

J'ai déménagé récemment et ce serveur est maintenant branché sur la télé principale. J'ai donc installé un environnement graphique complet pour qu'il joue le rôle d'un mixte client/serveur.
Comme je souhaité rester sur un système léger, j'ai installé et configuré openBox. Après pas mal de boulot, il répond enfin aux nombreux critères de fonctionnement.
Je m'attaque maintenant à l'optimisation et l'enrichissement de l'expérience utilisateur. C'est pourquoi, je demande au nombreux utilisateurs de mon serveur de me prévenir dès qu'ils ont un besoin ou une idée.

Quelqu'un m'a ainsi dit qu'il aimerait que ce soit comme sur seven et que le fond d'ecran change automatiquement ..
Bref, les clients sont rois alors utilisant nitrogen pour définir mes fonds d'ecrans, j'ai cherché une solution pour répondre à cette demande.
Je n'ai rien trouvé ce très léger et complet (j'ai peut être mal cherché) mais ce n'était pas grave, nitrogen rempli très bien sa fonction.

Hier soir, j'ai donc développé un petit script pour automatiser la définition d'un fond d'écran aléatoire.
Je ne connais pas vraiment ce domaine (les seuls forums que je côtoies activement sont les forums d'hardware, overclocking ou modding comme hfr).
Je voulais donc avoir votre avis si ce script pouvait intéresser quelques personnes et si oui, où devrais-je le poster ?

Je vous remercie d'avance pour vos conseils.
hopimet
Elfe
Messages : 996
Inscription : mer. 14 mars 2012, 22:48

Re: [BASH] Partage script de changement de fond d'ecran

Message par hopimet »

Salut,
Si le script n'est pas trop long, tu peux le poster dans un message entre 2 balise code. Sinon, tu le mets sur pastebin et tu donnes le lien dans un message.
Avatar de l’utilisateur
FoolEcho
Maître du Kyudo
Messages : 10707
Inscription : dim. 15 août 2010, 11:48
Localisation : Basse-Normandie

Re: [BASH] Partage script de changement de fond d'ecran

Message par FoolEcho »

Salut,

Pour ce type d'usage, ce ne sont pas les scripts qui manquent.
Tu peux utiliser feh aussi, le wiki anglophone a des exemples.
«The following statement is not true. The previous statement is true.» :nage:
Avatar de l’utilisateur
Ypnose
Maître du Kyudo
Messages : 1363
Inscription : sam. 01 mai 2010, 13:17

Re: [BASH] Partage script de changement de fond d'ecran

Message par Ypnose »

Donne le script, je suis curieux.
xp-1000
Hankyu
Messages : 29
Inscription : ven. 12 juil. 2013, 13:35

Re: [BASH] Partage script de changement de fond d'ecran

Message par xp-1000 »

Bonjour,
Désolé pour le temps de réponse, une fin de semaine bien arrosée.
Alors c'est parti pour pastbin si y a au moins un curieux.
http://pastebin.com/xb2K0Arz
Merci pour vos réponse
Avatar de l’utilisateur
tuxce
Maître du Kyudo
Messages : 6677
Inscription : mer. 12 sept. 2007, 16:03

Re: [BASH] Partage script de changement de fond d'ecran

Message par tuxce »

T'as appris au fur et à mesure que tu l'écrivais ? :)
Je vois que certaines fois, tu utilises la construction ${var:offset:longueur} et juste après tu sors un `echo $var | head -c <n>`, c'est dommage...
Sinon, pour avoir la fin d'une variable en bash (je l'ai pas vu dans ton script), c'est ${var: -n} (l'espace est important) :

Code : Tout sélectionner

var=654321
echo ${var: -2} # retournera 21
En vrac :
Tu devrais utiliser les tableaux, ça te permettrait qu'il soit compatible avec des noms de fichier avec espaces.
Les dossiers que tu peux donner en arguments ne sont pas triés, ce qui donne une base différente.
La fonction parse() peut être bien plus simple en utilisant un truc du genre : tmp_db_name=${tmp_db_name//[^a-zA-Z0-9]/-}
Tu utilises getopts, mais au final, tu as des if sur des argument et surtout tu passes "$@" à init()... tu peux te retrouver avec des dossiers mélangés avec des options
...

(sinon, tu aurais pu bien faire le copie coller sur le pastebin :p)
xp-1000
Hankyu
Messages : 29
Inscription : ven. 12 juil. 2013, 13:35

Re: [BASH] Partage script de changement de fond d'ecran

Message par xp-1000 »

Merci pour tous ces conseils largement appréciés :)

Oui j'ai appris au fur et à mesure. Et puis parfois ce qui me paraît logique sur le moment ne l'est pas forcément ^^
Alors je vais commencer par optimiser avec tous ces conseils en favorisant les bonnes structures comme "${var:offset:longueur}" et en simplifiant parse par un regex.
Ensuite j'améliorerai le script en utilisant des tableaux plutôt que des listes pour gérer les espaces.

En revanche, pour getopts ca me paraissait être une bonne idée pour avoir des vraies options mais j'ai vraiment galérer.
Par exemple, quand je veux envoyer "-cs" ou "-sc" pour purger sans confirmation, je ne vois pas comment faire sans passer par une variable temporaire.
Sinon, je teste mes options justement parce que je ne parviens pas à faire fonctionner getopts de manière satisfaisante:
-cs = 1 option
-c -s = 2 options
Comment gérer ca (sachant que je n'ai pas besoin de le gérer si je ne passe pas par des variables temporaires) ?

Sinon, certes, c'est peut être laid et étrange mais je pense que tu te trompes sur la possibilité que je me retrouves avec des dossiers en options ou même inversement.
Tous les if sur les options servent justement à gérer ces cas spécifiques : je l'ai testé dans tous les sens et à l'exception de l'utilisation de commande concurrentes (exemple -d avec -c) tout devrait fonctionner.
J'ai un test cases chez moi que je pourrais aussi envoyer.

Mais je te rejoins, je ne suis pas satisfait par mon utilisation de getOpts plein de rustines. Si tu as des conseils je suis preneur.

Sinon je dois le coller comment dans pastbin ?

Merci en tout cas
Avatar de l’utilisateur
tuxce
Maître du Kyudo
Messages : 6677
Inscription : mer. 12 sept. 2007, 16:03

Re: [BASH] Partage script de changement de fond d'ecran

Message par tuxce »

Autant pour moi, c'est moi qui ne fait pas bien le c/c :|

Pour les options mélangées avec les dossiers, si tu lances nom_script -s -n dossier, tu auras --n-dossier.db comme nom de base.

Pour ce qui est de getopts, si j'ai bien saisi le problème, c'est que tu ne sais pas comment obtenir les arguments qui ne sont pas des options.

Code : Tout sélectionner

while getopts "hrncsid:" OPTION; do
  # ton traitement des options
done
DIRECTORIES=("${@:$OPTIND}")
DIRECTORIES sera un tableau qui contiendra tous tes arguments non traités par getopts.
Avatar de l’utilisateur
LuX
yeomen
Messages : 216
Inscription : lun. 17 mai 2010, 13:56
Localisation : Angers (France)

Re: [BASH] Partage script de changement de fond d'ecran

Message par LuX »

Bonjour

Passant par là par hasard, je vous soumets une autre méthode que j'ai adoptée pour avoir le même résultat : je laisse pcmanfm gérer le fond d'écran, et pour en changer j'utilise la commande 'pcmanfm -w image_de_fond_d_ecran'. Pour que ça se produise toutes les deux minutes avec une image prise au hasard dans tous les sous-répertoires d'un répertoire dédié à ça, j'ai juste mis les lignes suivantes dans mon $HOME/.config/openbox/lxde-autostart :

Code : Tout sélectionner

#fond d'écran
while true; do
  sleep 2m
  bkgimg="$(find chemin_absolu_vers_repertoire_fond_ecran -type f -name '*jpg' |sort -R |tail -1)"
  pcmanfm -w "$bkgimg"
done
J'ai piqué la commande 'find ...' dans le live-CD de CTK-Arch. Je ne sais pas si ça répond vraiment à ce que cherchait initialement xp-1000, mais ça me semble plutôt simple comme méthode alors si ça peut servir...

Cordialement,
Dernière modification par LuX le jeu. 26 sept. 2013, 19:03, modifié 2 fois.
LuX
xp-1000
Hankyu
Messages : 29
Inscription : ven. 12 juil. 2013, 13:35

Re: [BASH] Partage script de changement de fond d'ecran

Message par xp-1000 »

Bonjour archer,

Merci pour ta réponse, C'est une bonne idée et son fonctionnement n'est pas à remettre en cause.
Cela dit, il y a plusieurs choses qui me pose problème :
- Cela me demande d'utiliser pcmanfm (pas envie)
- Il n'y a pas de base de données conservant les fond d'ecrans déjà utilisés pour éviter de les reprendre
- Sans ce script indépendant comme celui proposé, pas de flexibilité (exemple : j'utilise change-wallpaper.sh -n comme bouton dans le menu openbox pour changer de fond d'écran instantanément).

Merci pour ta réponse en tout cas
Avatar de l’utilisateur
LuX
yeomen
Messages : 216
Inscription : lun. 17 mai 2010, 13:56
Localisation : Angers (France)

Re: [BASH] Partage script de changement de fond d'ecran

Message par LuX »

Bonjour xp-1000

De rien ! :)

Je n'aurais jamais pensé à inclure des espaces dans des noms de fichiers de fond d'écrans, mais pour y parer j'ai ajouté une paire de guillemets où il en manquait.

Note qu'on peut aussi bien adapter cette méthode à nitrogen ou tout autre gestionnaire de fond d'écran plutôt que pcmanfm si on veut. Si je ne me trompe pas, il suffit de remplacer pcmanfm -w "$bkgimg" par nitrogen --set-scaled "$bkgimg". Et si on a des fonds d'écran non JPG il faudra aussi adapter un peu, mais ce n'est pas un souci.

Tu peux aussi en faire un bouton si tu veux. Au lieu d'y attacher la commande change-wallpaper -n tu mets nitrogen --set-scaled "$(find chemin_absolu_vers_repertoire_fond_ecran -type f -name '*jpg' |sort -R |tail -1)" et ça roule.

Par contre en effet il n'y a pas d'historique et un même fond d'écran peut être tiré plusieurs fois.

Mais je comprends avec ta réponse que tu visais autre chose qu'une simple commande : un script plus élaboré, avec options, messages d'erreurs, possibilité de préciser un chemin différent de celui par défaut, etc. C'est une autre démarche, je n'avais pas saisi ça au départ. Et je suis d'accord avec toi que "son fonctionnement n'est pas à remettre en cause".

Cordialement,
LuX
xp-1000
Hankyu
Messages : 29
Inscription : ven. 12 juil. 2013, 13:35

Re: [BASH] Partage script de changement de fond d'ecran

Message par xp-1000 »

Merci pour ces bons conseils, j'en prends bonne note.
Je vais pouvoir adapter la commande "-n".
Heureux que tu comprennes l'objectif, si ca ne tenait qu'à moi ta solution était parfaite mais j'implémente toute les propositions qui m'ont été suggérées ^^

A bientôt
Répondre