#1 Le 12/07/2012, à 12:49
- arnaud_d
[Résolu] Script bash lancement de Gimp
Bonjour,
J'ai créé un script afin de paramétrer ma tablette graphique au moment du lancement de GIMP.
J'ai renommé le binaire original de gimp en /usr/bin/gimp-2.8_original et je l'appelle depuis mon script /usr/bin/gimp [edit : non, mon script se situe à /usr/local/bin/gimp, voir messages ci-dessous]. Ceci afin de leurrer tous les programmes qui appellent gimp (genre Shotwell).
Il faut que le programme s'assure que gimp (/usr/bin/gimp-2.8_original) n'est pas déjà lancé, sinon il ne faut pas essayer de reconfigurer la tablette (sinon ça engendre d'autres problème que je ne vais pas détailler).
A la fermeture de Gimp, il faut reconfigurer la tablette en mode "normal".
Voici mes problèmes :
Je trouver mon script super moche, je me demande si je ne peux pas l'améliorer
Je ne comprend pas pourquoi il me faut définir le cas où aucun nom de fichier n'est donné en paramètre. Si je ne différencie pas ce cas, gimp se lance en me disant que mon home n'est pas une image.
Je ne sais pas comment faire pour pourvoir ouvrir N fichier en même temps (sélection multiple par exemple)
#!/bin/sh
if pgrep -f /usr/bin/gimp-2.8_original > /dev/null
then
# si gimp est déjà lancé, il n'y a pas besoin de reconfigurer la tablette
if [ $# -gt 0 ]
then
# si un fichier a été donné en argument, il faut le l'ouvrir
/usr/bin/gimp-2.8_original "$1"
else
# si aucun fichier n'a été donné, il ne faut pas donner d'argument sinon gimp essaie
# d'ouvrir le dossier home
/usr/bin/gimp-2.8_original
fi
else
# si gimp n'est pas déjà lancé, il faut configurer la tablette
notify-send -i /usr/share/pixmaps/wacomgimp.png -t 2000 "Configuration Bamboo : GIMP"
xsetwacom set "Wacom Bamboo Pen Pen stylus" Button 2 "key x"
xsetwacom set "Wacom Bamboo Pen Pen stylus" Button 3 "key d"
if [ $# -gt 0 ]
then
# si un fichier a été donné en argument, il faut le l'ouvrir
/usr/bin/gimp-2.8_original "$1"
else
# si aucun fichier n'a été donné, il ne faut pas donner d'argument sinon gimp essaie
# d'ouvrir le dossier home
/usr/bin/gimp-2.8_original
fi
notify-send -i /usr/share/pixmaps/120pxinputtablet.png -t 2000 "Configuration Bamboo : DEFAUT"
xsetwacom set "Wacom Bamboo Pen Pen stylus" Button 2 2
xsetwacom set "Wacom Bamboo Pen Pen stylus" Button 3 " "
fi
Pour transmettre tous les arguments (ouverture de N fichiers), j'avais pensé à remplacer
/usr/bin/gimp-2.8_original "$1"
par
for i in $*
do
/usr/bin/gimp-2.8_original "$i"
done
mais si un de mes fichiers a un nom contenant un espace ça ne marche plus. Et en plus il ne m'ouvre le deuxième fichier que si je ferme le premier.
Auriez-vous des conseils, idées, remarques à me faire ?
Merci beaucoup !
Dernière modification par arnaud_d (Le 12/07/2012, à 14:08)
Hors ligne
#2 Le 12/07/2012, à 13:43
- darunia_goron
Re : [Résolu] Script bash lancement de Gimp
Une remarque : pour ma part, je n'aurai pas renommé le binaire original. Je te conseille de placer ton script dans /usr/local/bin. Comme ça, si ton PATH est correctement configuré (ce qui devrait être le cas si tu ne l'as pas modifié), la commande gimp lancera ton script et non le binaire original. Tu peux vérifier facilement avec quel exécutable est utilisé avec :
which gimp
L'avantage est que lors d'une mise à jour, par exemple, ton script ne sera pas écrasé par la nouvelle version.
Hors ligne
#3 Le 12/07/2012, à 13:47
- arnaud_d
Re : [Résolu] Script bash lancement de Gimp
Une remarque : pour ma part, je n'aurai pas renommé le binaire original. Je te conseille de placer ton script dans /usr/local/bin. Comme ça, si ton PATH est correctement configuré (ce qui devrait être le cas si tu ne l'as pas modifié), la commande gimp lancera ton script et non le binaire original. Tu peux vérifier facilement avec quel exécutable est utilisé avec :
which gimp
L'avantage est que lors d'une mise à jour, par exemple, ton script ne sera pas écrasé par la nouvelle version.
Bonjour,
En fait tu as raison, c'est ce que j'ai fait, d'ailleurs which gimp me retourne /usr/local/bin/gimp.
/usr/bin/gimp est un lien symbolique vers mon script /usr/local/bin/gimp qui appelle /usr/bin/gimp-2.8_original.
Par contre shotwell appelle /usr/bin/gimp et non /usr/local/bin/gimp, je ne sais pas pourquoi. D'où la nécessite de créé un lien symbolique.
Sinon pour passer tous les arguments au binaire d'origine, tu as une idée ?
Dernière modification par arnaud_d (Le 12/07/2012, à 13:52)
Hors ligne
#4 Le 12/07/2012, à 13:54
- pingouinux
Re : [Résolu] Script bash lancement de Gimp
Bonjour,
Essayer :
for i in "$@"
Hors ligne
#5 Le 12/07/2012, à 13:57
- arnaud_d
Re : [Résolu] Script bash lancement de Gimp
Bonjour,
Essayer :for i in "$@"
Bonjour,
Alors mon script donne ceci :
#!/bin/sh
if pgrep -f /usr/bin/gimp-2.8_original > /dev/null
then
# si gimp est déjà lancé, il n'y a pas besoin de reconfigurer la tablette
if [ $# -gt 0 ]
then
# si un fichier a été donné en argument, il faut le l'ouvrir
for i in "$@"
do
/usr/bin/gimp-2.8_original "$i"
done
else
# si aucun fichier n'a été donné, il ne faut pas donner d'argument sinon gimp essaie
# d'ouvrir le dossier home
/usr/bin/gimp-2.8_original
fi
else
# si gimp n'est pas déjà lancé, il faut configurer la tablette
notify-send -i /usr/share/pixmaps/wacomgimp.png -t 2000 "Configuration Bamboo : GIMP"
xsetwacom set "Wacom Bamboo Pen Pen stylus" Button 2 "key x"
xsetwacom set "Wacom Bamboo Pen Pen stylus" Button 3 "key d"
if [ $# -gt 0 ]
then
# si un fichier a été donné en argument, il faut le l'ouvrir
for i in "$@"
do
/usr/bin/gimp-2.8_original "$i"
done
else
# si aucun fichier n'a été donné, il ne faut pas donner d'argument sinon gimp essaie
# d'ouvrir le dossier home
/usr/bin/gimp-2.8_original
fi
notify-send -i /usr/share/pixmaps/120pxinputtablet.png -t 2000 "Configuration Bamboo : DEFAUT"
xsetwacom set "Wacom Bamboo Pen Pen stylus" Button 2 2
xsetwacom set "Wacom Bamboo Pen Pen stylus" Button 3 " "
fi
Par contre, il ne m'ouvre la deuxième image que lorsque j'ai fermé gimp, ouvert pour la première...
Hors ligne
#6 Le 12/07/2012, à 14:05
- arnaud_d
Re : [Résolu] Script bash lancement de Gimp
J'ai enlevé la boucle et ai remplacé
/usr/bin/gimp-2.8_original "$i"
par
/usr/bin/gimp-2.8_original "$@"
et ça marche, merci pingouinux !
#!/bin/sh
if pgrep -f /usr/bin/gimp-2.8_original > /dev/null
then
# si gimp est déjà lancé, il n'y a pas besoin de reconfigurer la tablette
if [ $# -gt 0 ]
then
# si un fichier a été donné en argument, il faut le l'ouvrir
/usr/bin/gimp-2.8_original "$@"
else
# si aucun fichier n'a été donné, il ne faut pas donner d'argument sinon gimp essaie
# d'ouvrir le dossier home
/usr/bin/gimp-2.8_original
fi
else
# si gimp n'est pas déjà lancé, il faut configurer la tablette
notify-send -i /usr/share/pixmaps/wacomgimp.png -t 2000 "Configuration Bamboo : GIMP"
xsetwacom set "Wacom Bamboo Pen Pen stylus" Button 2 "key x"
xsetwacom set "Wacom Bamboo Pen Pen stylus" Button 3 "key d"
if [ $# -gt 0 ]
then
# si un fichier a été donné en argument, il faut l'ouvrir
/usr/bin/gimp-2.8_original "$@"
else
# si aucun fichier n'a été donné, il ne faut pas donner d'argument sinon gimp essaie
# d'ouvrir le dossier home
/usr/bin/gimp-2.8_original
fi
notify-send -i /usr/share/pixmaps/120pxinputtablet.png -t 2000 "Configuration Bamboo : DEFAUT"
xsetwacom set "Wacom Bamboo Pen Pen stylus" Button 2 2
xsetwacom set "Wacom Bamboo Pen Pen stylus" Button 3 " "
fi
Et sinon vous savez comment je peux améliorer mon script ?
Hors ligne
#7 Le 12/07/2012, à 14:07
- louis94
Re : [Résolu] Script bash lancement de Gimp
Bonjour,
Avec "$@", tu peux faire (même si aucun argument n'est donné) :
for i in "$@"; do
ARGS="$ARGS \"$i\""
done
/usr/bin/gimp-2.8_original $ARGS
Louis
edit: Mais puisque ça marche autrement...
Dernière modification par louis94 (Le 12/07/2012, à 14:08)
Hors ligne
#8 Le 12/07/2012, à 14:08
- arnaud_d
Re : [Résolu] Script bash lancement de Gimp
En fait, ta solution résout même mon problème de gimp qui essaie d'ouvrir le home !!
Du coup j'ai pu simplifier en :
#!/bin/sh
if pgrep -f /usr/bin/gimp-2.8_original > /dev/null
then
# si gimp est déjà lancé, il n'y a pas besoin de reconfigurer la tablette
/usr/bin/gimp-2.8_original "$@"
else
# si gimp n'est pas déjà lancé, il faut configurer la tablette
notify-send -i /usr/share/pixmaps/wacomgimp.png -t 2000 "Configuration Bamboo : GIMP"
xsetwacom set "Wacom Bamboo Pen Pen stylus" Button 2 "key x"
xsetwacom set "Wacom Bamboo Pen Pen stylus" Button 3 "key d"
/usr/bin/gimp-2.8_original "$@"
notify-send -i /usr/share/pixmaps/120pxinputtablet.png -t 2000 "Configuration Bamboo : DEFAUT"
xsetwacom set "Wacom Bamboo Pen Pen stylus" Button 2 2
xsetwacom set "Wacom Bamboo Pen Pen stylus" Button 3 " "
fi
Ce qui me convient nettement plus !
MERCI !
Hors ligne
#9 Le 12/07/2012, à 14:28
- Postmortem
Re : [Résolu] Script bash lancement de Gimp
Bonjour,
Avec "$@", tu peux faire (même si aucun argument n'est donné) :
for i in "$@"; do ARGS="$ARGS \"$i\"" done /usr/bin/gimp-2.8_original $ARGS
Louis
edit: Mais puisque ça marche autrement...
Salut,
Je ne suis pas certain, mais avec ta méthode, gimp risque de chercher des noms de fichiers ayant le caractère " au début et à la fin du nom.
Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »
Hors ligne
#10 Le 12/07/2012, à 14:38
- louis94
Re : [Résolu] Script bash lancement de Gimp
Je ne suis pas certain, mais avec ta méthode, gimp risque de chercher des noms de fichiers ayant le caractère " au début et à la fin du nom.
Bien vu !
Il faudrait alors remplacer la dernière ligne par :
eval /usr/bin/gimp-2.8_original $ARGS
Ça devient très sale, comme code
Hors ligne
#11 Le 12/07/2012, à 14:58
- Postmortem
Re : [Résolu] Script bash lancement de Gimp
Postmortem a écrit :Je ne suis pas certain, mais avec ta méthode, gimp risque de chercher des noms de fichiers ayant le caractère " au début et à la fin du nom.
Bien vu !
Il faudrait alors remplacer la dernière ligne par :eval /usr/bin/gimp-2.8_original $ARGS
Ça devient très sale, comme code
Comme l'a fait arnaud_d, c'est comme ça le mieux :
/usr/bin/gimp-2.8_original "$@"
Ça gère tout bien les espaces comme il faut.
Dernière modification par Postmortem (Le 12/07/2012, à 15:02)
Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »
Hors ligne