[BASH] Partage script de changement de fond d'ecran
[BASH] Partage script de changement de fond d'ecran
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.
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.
Re: [BASH] Partage script de changement de fond d'ecran
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.
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.
- 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
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.
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.»
Re: [BASH] Partage script de changement de fond d'ecran
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
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
Re: [BASH] Partage script de changement de fond d'ecran
T'as appris au fur et à mesure que tu l'écrivais ?
Je vois que certaines fois, tu utilises la construction
Sinon, pour avoir la fin d'une variable en bash (je l'ai pas vu dans ton script), c'est
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 :
Tu utilises
...
(sinon, tu aurais pu bien faire le copie coller sur le pastebin :p)
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
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)
Re: [BASH] Partage script de changement de fond d'ecran
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
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
Re: [BASH] Partage script de changement de fond d'ecran
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
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.
DIRECTORIES sera un tableau qui contiendra tous tes arguments non traités par getopts.
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}")
Re: [BASH] Partage script de changement de fond d'ecran
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 :
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,
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
Cordialement,
Dernière modification par LuX le jeu. 26 sept. 2013, 19:03, modifié 2 fois.
LuX
Re: [BASH] Partage script de changement de fond d'ecran
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
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
Re: [BASH] Partage script de changement de fond d'ecran
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,
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
Re: [BASH] Partage script de changement de fond d'ecran
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
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