Comment afficher une boîte de message GUI à partir d’un script bash sous Linux ?
Question
J'écris quelques petits scripts bash sous Ubuntu Linux.Je veux pouvoir les exécuter à partir de l'interface graphique sans avoir besoin d'une fenêtre de terminal pour saisir une entrée ou afficher une sortie.
Jusqu'à présent, la seule entrée requise est un mot de passe pour sudo - et gksudo gère cela très bien.Mais je n'ai pas encore trouvé de moyen simple d'afficher une boîte de message.Existe-t-il une sorte de commande « gkmessage » disponible ?Je préférerais quelque chose présent dans une installation Ubuntu par défaut, mais cela ne me dérange pas d'installer un nouveau package si nécessaire.
La solution
Je crois Zénité tu feras ce que tu veux.Il est spécialement conçu pour afficher les boîtes de dialogue GTK à partir de la ligne de commande et est disponible sous forme de Paquet Ubuntu.
Autres conseils
Si vous utilisez Ubuntu de nombreuses distributions notify-send
La commande lancera une de ces jolies notifications périssables dans le coin supérieur droit.Ainsi:
notify-send "My name is bash and I rock da house"
Beau!
Tout le monde évoque la zénité, il semble y en avoir bien d’autres.Une liste confuse mais intéressante se trouve à http://alternativeto.net/software/zenity/
Tout d’abord, un exemple de zenity comprenant le balisage de formatage du texte, le titre de la fenêtre et l’étiquette du bouton.
zenity \
--info \
--text="<span size=\"xx-large\">Time is $(date +%Hh%M).</span>\n\nGet your <b>coffee</b>." \
--title="Coffee time" \
--ok-label="Sip"
message gx
gxmessage "my text"
message x
xmessage
est très ancien donc il est stable et probablement disponible dans toutes les distributions qui utilisent X (puisqu'il est distribué avec X).Il est personnalisable via les ressources X, pour ceux qui utilisent Linux ou Unix depuis suffisamment longtemps pour savoir ce que cela signifie (.Xdefaults
, n'importe qui ?).
xmessage -buttons Ok:0,"Not sure":1,Cancel:2 -default Ok -nearmouse "Is xmessage enough for the job ?" -timeout 10
kdialogue
(pas testé)
Dans un PPA
YAD :Zenity On Steroids [Afficher les boîtes de dialogue graphiques à partir des scripts Shell] ~ Web Upd8 :Blog Ubuntu/Linux.Ne semble pas dimensionner automatiquement les boîtes de dialogue.
echo My text | yad \
--text-info \
--width=400 \
--height=200
Un exemple plus grand
yad \
--title="Desktop entry editor" \
--text="Simple desktop entry editor" \
--form \
--field="Type:CB" \
--field="Name" \
--field="Generic name" \
--field="Comment" \
--field="Command:FL" \
--field="Icon" \
--field="In terminal:CHK" \
--field="Startup notify:CHK" "Application" "Name" "Generic name" "This is the comment" "/usr/bin/yad" "yad" FALSE TRUE \
--button="WebUpd8:2" \
--button="gtk-ok:0" \
--button="gtk-cancel:1"
D'autres ne figurent pas dans les référentiels standard Ubuntu
- Shellgui
- xdialogue
- boîte de dialogue GTK
Hors sujet (pour terminal)
whiptail --msgbox "my text" 10 20
dialog --msgbox "my text" 10 20
N'hésitez pas à modifier.
Le zénité l'application semble être ce que vous recherchez.
Pour recueillir les commentaires de zénité, vous pouvez spécifier une variable et avoir la sortie de zenity --entrée enregistré dessus.Cela ressemble à ceci :
my_variable=$(zenity --entry)
Si vous regardez la valeur dans ma_variable maintenant, ce sera ce qui a été tapé dans la boîte de dialogue d'entrée contextuelle Zenity.
Si vous souhaitez donner une sorte d'invite quant à ce que l'utilisateur (ou vous) devez saisir dans la boîte de dialogue, ajoutez le --texte changez avec l’étiquette que vous voulez.Cela ressemble à ceci :
my_variable=$(zenity --entry --text="What's my variable:")
Zenity propose de nombreuses autres options intéressantes destinées à des tâches spécifiques, vous voudrez peut-être également les consulter avec zenity --aide.Un exemple est le --calendrier option qui vous permet de sélectionner une date dans un calendrier graphique.
my_date=$(zenity --calendar)
Ce qui donne une date bien formatée en fonction de ce sur quoi l'utilisateur a cliqué :
echo ${my_date}
donne :
08/05/2009
Il existe également des options pour les sélecteurs de curseur, les erreurs, les listes, etc.
J'espère que cela t'aides.
J'ai trouvé le message x commande, ce qui est en quelque sorte suffisant.
Voici un petit script Tcl qui fera ce que vous voulez.L'interpréteur Wish doit être installé par défaut sur Ubuntu.
#!/usr/bin/wish
pack [label .msg -text [lindex $argv 0]]
pack [entry .ent]
bind .ent <KeyPress-Return> { puts [.ent get]; destroy . }
focus .ent
Appelez-le comme ceci :
myanswer=`gui-prompt "type your answer and press enter"`
alert
et notify-send
ça semble être la même chose.j'utilise notify-send
pour les messages sans saisie car cela ne vole pas le focus et je ne trouve pas de moyen d'arrêter la zenité, etc.de faire ça.
par exemple.
# This will display message and then disappear after a delay:
notify-send "job complete"
# This will display message and stay on-screen until clicked:
notify-send -u critical "job complete"
Il y a aussi dialog
et la version KDE kdialog
. dialog
est utilisé par Slackware, il se peut donc qu'il ne soit pas immédiatement disponible sur d'autres distributions.
Qu'en est-il d'Ubuntu alerte.Il peut être utilisé après toute opération pour l'avertir de la fin et même afficher l'icône de la croix rouge si l'opération s'est terminée avec des erreurs.
ls -la; alert
si rien d'autre n'est présent.vous pouvez lancer un xterm et y faire écho, comme ceci :
xterm -e bash -c 'echo "this is the message";echo;echo -n "press enter to continue "; stty sane -echo;answer=$( while ! head -c 1;do true ;done);'
Kdialog et dialog sont tous deux bons, mais je recommanderais Zenity.Rapide, facile et bien meilleur pour le xmessage ou la boîte de dialogue.