Pages : 1
#1 Le 09/06/2006, à 23:42
- mamourbizbiz
script?
Bonjour,
j'aimerai avoir quelques information sur les scripts: language utilisé et autre formalisme
je n'y connais pas grans chose en programmation et pourtant ça m'interesse
si quelqu'un avez une doc qui rassemble les fonctions utile (les bases quoi) dans un scrypt
j'ai pris ce script sur le forum il a etai redigé par thom que je remercie
il permet de changer de fond d'ecran toute les heures
mais j aimerais le comprendre pour pouvoir le modifier (j'aimerai ajouter une commande qui redemmarre adesklet apres chaque changement de fond d ercran et reduire le tps de changement genre passer a 15 min au lieu d'une heure)
Code:
#! /bin/bash
## dependances : randomize-lines
gconftool -t str -s /desktop/gnome/background/picture_filename "`find $HOME/media/images/ -name \*.jpg | rl | tail -n 1`"
si quelqu'un pouvai me docummenter ce serai sympa
Merci
ouai windows c'est pour les nuls...heu... comment ca marche ubuntu?
Hors ligne
#2 Le 10/06/2006, à 01:17
- snapshot
Re : script?
C'est pas encore un script, vu qu'il ne fait qu'une ligne
C'est plutot du shell, tu peux avoir plein d'info sur le shell ici :
http://www.bsdbooks.net/shells/scripting/fr/
Mais voila quand même comment ça marche :
La ligne que tu donnes est en 2 parties :
- la première, c'est gconftool, auquel tu ordonnes d'écrire une chaine "-t str" dans le paramètre "-s" nommé "/desktop/gnome/background/picture_filename" qui correspond au fond d'écran. /desktop/gnome/.../...filename ressemble à un fichier, mais ce n'en est pas un. C'est beaucoup plus proche d'une base de registre à la windows. L'écriture dans cette base de registre génère un événement qui sera capté par le gestionnaire de fenêtre : il s'en servira pour rafraichir l'écran automatiquement.
Pour le reste de la ligne, il faut avoir l'oeil car tu remarqueras qu'elle est encadrée par des "backticks" (les caractères `). Ils indiquent au shell qu'il doit exécuter la commande située en eux, et substituer le résultat aux bacticks de tel sorte que gconftool ne verra jamais que l'arguement qu'il a reçu vient d'une suite de commande complexe.
- la 2ème partie est donc cette suite de commande entre backticks. Elle commence par un find (trouver récursivement des fichiers) à partir du répertoire $HOMES/media/images ($HOMES est une variable qui sera elle-aussi substituée" dont le nom (-name) est *.jpg. Bref, on cherche tous les *.jpg. Ensuite, la liste (un fichier par ligne) est donnée par le tube (ou le pipe |) au programme "rl" qui va mélanger l'ordre des lignes (si tu lui donnes 1 2 3 en entrée, il peut te sortir en fonction du hasard 3 1 2 ou 2 1 3, etc...). Une fois les lignes mélangées, on les repasse par un autre pipe au programme tail, qui lui ne sortira que la dernière (-n 1) ligne qu'il aura eu en entrée. Comme rl ne fait jamais pareil et que tail ne prend que la dernière ligne, on a un fichier différent à chaque fois...
Voilà, ça peut paraitre compliqué, mais ça ne l'est pas. un système unix comme linux est bourré d'une multitude de petits utilitaires simples (comme tail, mais aussi sort, cut, cat...). La puissance vient du fait qu'on peut les assembler à l'infini et que l'on peut véritablement faire ce que l'on veut. Sous windows, au contraire, je dirai qu'il y a peu d'utilitaires mais que chacun est complexe... c'est à mon avis bien moins souple
Pour redémarrer adesklet (?) il suffit d'ajouter un truc du genre :
sleep 5 # on attend 5 secondes, car la mise à jour du fond peut prendre du temps
killall adesklet # on termine le adesklet actif
adesklet & # et on en relance un autre, en tache de fond (&)
Mais c'est la théorie. En pratique, ça peut être plus compliqué...
Pour augmenter la fréquence d'appel de ce script, il faut paramétrer autre chose que ce script, probablement "la crontab". Tu ne peux pas agir dedans car il est passif et conçu pour être réveillé à intervalle régulier.
Voilà, espérant que ça pourra t'aider
Pensez à mettre [Résolu] dans le titre une fois votre problème réglé !
Hors ligne
#3 Le 10/06/2006, à 10:25
- mamourbizbiz
Re : script?
merci pour tous snapshot
tu as exactement repondu a mais question je vais potasser un peut
ton shell fonctionne impec je poste le script de thom avec ces quelque modification pour relancer adesklets a chaque changement de fond d'ecran pour eviter les problemes de transparance
#! /bin/bash
## dependances : randomize-lines
gconftool -t str -s /desktop/gnome/background/picture_filename "`find /home/fondecran/ -name \*.jpg | rl | tail -n 1`"
sleep 1 # on attend 1 secondes, car la mise à jour du fond peut prendre du temps
killall adesklets # on termine l'affichage des desklets de adesklet
sleep 1
killall modubar.py #on termine les desklets actif
killall systemmonitor.py
killall weather.py
adesklets --nautilus & # et on en relance un autre, en tache de fond (&)
ce script fonctionne mais il est possible que ce soit pas tres propre donc s'il y a des sugjestion?
plus tot que de modifier le contrab est il possible de mettre a la fin du script
sleep 900 #attendre 15 min
et finir par une commande qui renvoi le programme au debut (je c pas si ça existe)
voila
et merci encore pour ta reponse rapide
PS: maintenant qu'il y a 4 lignes c'est un script (cool mon premier script)
Dernière modification par mamourbizbiz (Le 10/06/2006, à 11:13)
ouai windows c'est pour les nuls...heu... comment ca marche ubuntu?
Hors ligne
#4 Le 10/06/2006, à 11:17
- Zeo
Re : script?
Salut,
J'avais commencé un petit guide sur les différents langages de programmation qui existent et les plus pertinents pour mes camarades de Licence Pro Communication Electronique. Je voulais leur montrer qu'il n'y a pas que le HTML dans la vie ...
(ce guide doit comporter des erreurs et devra surement être amélioré ...)
Le guide en PDF >> http://damien.vidal1.free.fr/tutoriaux/tutoriaux/autres_veille_technologique.pdf
Dernière modification par Zeo (Le 10/06/2006, à 11:17)
Linux Ubuntu
---
Si un jour, on te reproche que ton travail n'est pas un travail de professionnel, dis-toi bien que :
Des amateurs ont construit l'arche de Noé, et des professionnels le Titanic.!
Hors ligne
#5 Le 10/06/2006, à 17:29
- snapshot
Re : script?
merci pour tous snapshot
ce script fonctionne mais il est possible que ce soit pas tres propre donc s'il y a des sugjestion?
Du moment qu'il fonctionne, c'est déjà pas mal
Mais c'est vrai que ce n'est pas très propre : si tu ajoutes un nouveau desklet, il ne sera pas pris en compte par ton script.
Perso, j'utilise gdesklet, et quand on le "kill", tous les desklets qu'il avait lancé se terminent également. Y'a pas de soucis.
plus tot que de modifier le contrab est il possible de mettre a la fin du script
sleep 900 #attendre 15 min
et finir par une commande qui renvoi le programme au debut (je c pas si ça existe)
Et bien oui, ça existe ! le shell est un vrai langage de programmation. Mais tu vas avoir des problèmes : en lançant ton script avec gnome-session, tu vas en lancer un nouveau à chaque fois que tu te connecteras. Si tu te déconnectes/reconnectes 4 fois, tu en lanceras 4 qui vont changer l'image de fond 4 fois en 15 minutes... il faut mettre un controle pour ne pas que ça se produise.
#! /bin/bash
DELAY=900 # delai avant prochaine mise à jour
LOCKFILE=/tmp/updbackgrnd-${USER}.lock # si ce fichier existe, un daemon est déjà lancé : ne rien faire
# on contrôle qu'on est seul avec la commande lockfile (voir sa page man). Attention, elle n'est pas
# installée par défaut. Elle se situe dans le package procmail
if lockfile -r 0 $LOCKFILE
then
# si on arrive ici, c'est qu'on est les seuls à s'exécuter... y'a plus qu'à faire le boulot !
# la commande suivante effacera le fichier de verrouillage à la sortie du script
trap "rm $LOCKFILE" EXIT
# on commence une boucle infinie...
# la seule façon d'en sortir, c'est de recevoir un signal de fin (par un kill). Dans ce cas, on exécutera le
# rm placé dans le "trap", ce qui autorisera le lancement d'un nouverau script.
while true
do
gconftool -t str -s /desktop/gnome/background/picture_filename "`find /home/fondecran/ -name \*.jpg | rl | tail -n 1`"
sleep 1 # on attend 1 secondes, car la mise à jour du fond peut prendre du temps
killall adesklets # on termine l'affichage des desklets de adesklet
sleep 1
killall modubar.py #on termine les desklets actif
killall systemmonitor.py
killall weather.py
adesklets --nautilus & # et on en relance un autre, en tache de fond (&)
sleep $DELAI
done # recommencer à partir du while, ad vitam eternam
else
# si on arrive ici, c'est que le fichier $LOCKFILE existe déjà.
# affichage du message d'erreur sur stderr (le ">&2", attention pas d'espace sinon autre signification)
echo "Un autre daemon tourne déjà, abandon de celui-ci >&2
# et on sort en indiquant un status d'erreur
exit 1
fi
voila
et merci encore pour ta reponse rapide
y'a pas de quoi
les shells, c'est mon passe-temps... il y en a qui font des sudokus, et bien moi je préfère écrire des shells !
PS: maintenant qu'il y a 4 lignes c'est un script (cool mon premier script)
C'est plus qu'un script, c'est carrément un daemon !
Pensez à mettre [Résolu] dans le titre une fois votre problème réglé !
Hors ligne
#6 Le 10/06/2006, à 22:27
- mamourbizbiz
Re : script?
Merci snapshot et bravo je suis vraimant impressioné par tout ce que l'on peut faire
tu ma ouvert les yeux sur un nouveau monde .
ça ma l'aire assez compliqué quand meme mais je crois que je vais essayer de m'y mettre
je teste tout ça et je tien au courrant
merci a zeo pour sont interré a mon poste
ha oui autre precision maintenant il n'y a plus besoin de crontab (enfin si j'ai bien compris )
maiss est ce que je peut lancer un deamon au demmarage de la session et si oui quelle comande je doi utiliser pour le lancer (genre si mon daemon s'appele random-wallpaper la commande sera random-wallpaper?)
Dernière modification par mamourbizbiz (Le 10/06/2006, à 22:55)
ouai windows c'est pour les nuls...heu... comment ca marche ubuntu?
Hors ligne
#7 Le 11/06/2006, à 09:45
- snapshot
Re : script?
Merci snapshot et bravo je suis vraimant impressioné par tout ce que l'on peut faire
ha oui autre precision maintenant il n'y a plus besoin de crontab (enfin si j'ai bien compris )
maiss est ce que je peut lancer un deamon au demmarage de la session et si oui quelle comande je doi utiliser pour le lancer (genre si mon daemon s'appele random-wallpaper la commande sera random-wallpaper?)
ah ben ça, c'est le plus facile !
Système / Préférences / Sessions
Programme au démarrage, puis ajouter... et enfin, Parcourir...
Pour appeler ta commande :
- soit elle est placée dans un répertoire inclu dans le $PATH (comme /usr/local/bin), auquel cas, il suffiit de taper son nom. La complétion avec la touche TAB la verra très bien.
- soit elle n'est pas dans le $PATH. Dans ce cas, il faut donner le chemin complet pour la lancer
Et bien sur, pour qu'elle soit exécutable, il ne faut pas oublier de donner au fichier l'attribut x (pour eXecuter) :
chmod a+x random-wallpaper
voilà, voilà !
Pensez à mettre [Résolu] dans le titre une fois votre problème réglé !
Hors ligne
#8 Le 13/06/2006, à 23:28
- mamourbizbiz
Re : script?
ok mais je crois que le daemon ne fonctionne pas et je pense que ça plante dans la phase de test
pourtant j ai bien suprimer l'entrer de mon crontab qui lancai l'ancien script
donc normalement il ny a rien qui devrai bloquer
et je n ai pas bien compris ce passage la enfaite c quoi ce lockfile?
apres j arrete de t embeter et jessaye de me debrouiller tous seul mais la je dois dire que je patoge un peut
LOCKFILE=/tmp/updbackgrnd-${USER}.lock # si ce fichier existe, un daemon est déjà lancé : ne rien faire
# on contrôle qu'on est seul avec la commande lockfile (voir sa page man). Attention, elle n'est pas
# installée par défaut. Elle se situe dans le package procmail
if lockfile -r 0 $LOCKFILE
then
ouai windows c'est pour les nuls...heu... comment ca marche ubuntu?
Hors ligne
#9 Le 14/06/2006, à 00:34
- snapshot
Re : script?
non non, y'a aucun soucis j'aime bien faire partager ce que j'ai moi même découvert .
le "if lockfile..." permet d'empecher de lancer plusieurs processus à la fois. Comment ça marche ?
et bien on se sert d'un fichier situé dans temp comme d'un feu de circulation : s'il est présent (rouge), c'est qu'il y a déjà un processus qui s'occupe de changer le fond d'écran, donc il ne sert à rien d'en lancer un autre : on ne passe pas.
S'il est inexistant (vert), et bien il faut s'occuper de changer le fond, et on empêche d'autres processus de se lancer en le créant (on passe et on allume le rouge derrière soi)
Si tu regardes bien le code, tu vois qu'il y a un "if lockfile..." qui teste l'état du fichier.
Après le "then", c'est la partie "verte", et après le "else", c'est la partie rouge.
Le shell s'attend à trouver une commande exécutable après un if, et si le code de retour de la commande est 0, il exécute le then, sinon, il exécute le else.
Comme commande, j'ai choisi lockfile car elle est faite pour ce cas de figure : en une seule opération, elle teste l'existence du fichier et le crée s'il n'existe pas. Dans ce cas, elle retourne 0, sinon une valeur non nulle. C'est exactement ce qu'il nous faut. Le paramètre "-r 0" indique de ne pas réessayer si le fichier existe déjà.
Mais cette commande n'est pas installé en standard. Si elle n'existe pas, linux retourne une code 127, ce qui fait que le if exécute la partie else... et rien ne se passe. C'est peut-être pour ça que ça ne marche pas... (tu as essayé un "sudo apt-get procmail" pour l'installer ?)
Sinon, tu peux essayer de remplacer la commande lockfile par ce moyen, un peu plus standard :
#! /bin/bash
DELAY=900 # delai avant prochaine mise à jour
LOCKFILE=/tmp/updbackgrnd-${USER}.lock # si ce fichier existe, un daemon est déjà lancé : ne rien faire# on contrôle qu'il n'y a pas d'autres processus en cours
if [ -f $LOCKFILE ] # si le fichier n'existe pas
then
# si on arrive ici, c'est qu'on est les seuls à s'exécuter... y'a plus qu'à faire le boulot !
echo $$ > $LOCKFILE # on crée le fichier, et accessoirement, on place notre n° de processus dedans# la commande suivante effacera le fichier de verrouillage à la sortie du script
trap "rm $LOCKFILE" EXIT
Voilà, ça fait quasiment pareil, mais c'est peut-être plus facile à comprendre...
Pensez à mettre [Résolu] dans le titre une fois votre problème réglé !
Hors ligne
#10 Le 14/06/2006, à 15:32
- mamourbizbiz
Re : script?
ok je comprend un peut mieux ce qu il se passe
je regarde tous ça et je te repond fin de semaine prochaine car je part m éxiler pour mais examen
merci
ouai windows c'est pour les nuls...heu... comment ca marche ubuntu?
Hors ligne
#11 Le 28/06/2006, à 18:12
- mamourbizbiz
Re : script?
me, revoila bon je comprend pas pourquoi ça ne fonctionne pas
je le lance dans un terminal le terminal s ouvre et ce referme instantanement sans rien afficher il ny a pas moyen de voir a quelle moment ça marche pas?
ouai windows c'est pour les nuls...heu... comment ca marche ubuntu?
Hors ligne
Pages : 1