Comment afficher une boîte de message GUI à partir d'un script bash sous Linux?

152

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 entrer 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 de présent dans une installation par défaut d'Ubuntu, mais cela ne me dérange pas d'installer un nouveau package si nécessaire.

Blorgbeard est sorti
la source
En relation: unix.stackexchange.com/questions/144924/…
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功

Réponses:

143

Je crois que Zenity fera ce que vous voulez. Il est spécialement conçu pour afficher les boîtes de dialogue GTK à partir de la ligne de commande et il est disponible sous forme de package Ubuntu .

Parc Derek
la source
4
zenity --helpn'est pas si utile. Pour rendre cela utile, vous devez vous assurer que vous êtes prêt --text=My text hereà le faire afficher quelque chose ...
Stephen
10
Par exemplezenity --info --text="Calculation complete"
Craig McQueen
3
@Stephen, pour une raison étrange, la commande correcte est zenity --help-all.
GKFX
3
Je n'aime pas les programmes qui ont besoin d'ouvrir l'affichage pour imprimer le message d'aide ...
thoni56
J'utilise cette méthode pour afficher des avertissements ou des erreurs dans mon .xinitrclors du démarrage de mon xorgserveur. Sinon, les erreurs seraient transparentes. Je préfère également cela zenityà ce kdialogque KDE n'a pas encore démarré et que les bibliothèques GTK sont plus légères.
cmevoli
153

Si vous utilisez Ubuntu de nombreuses distributions, la notify-sendcommande lancera l'une de ces belles notifications périssables dans le coin supérieur droit. Ainsi:

notify-send "My name is bash and I rock da house"

Belle!

chmac
la source
2
Cela fonctionne également avec Fedora. Je suis à peu près certain que n'importe quelle distribution Linux peut le faire.
kmatheny
4
Ne fonctionne pas sur Raspbian GNU / Linux 7. Y a-t-il un paquet qui doit être installé?
carl verbiest le
1
dans les dépôts debian: apt-cache search notify-osd @carlverbiest
santa
2
dans Ubuntu 14.04 au moins, si appelez notify-send avec timeout 0 comme "notifier-envoyer -t 0 'salut!'", vous obtiendrez une boîte de dialogue contextuelle qui n'expire pas.
vancan1ty
Dans Debian Jessie, le libnotify-binpaquet contient le notify-sendbinaire. Gnome3 ne semble pas nécessiter, notify-osdmais je suppose que d'autres environnements de bureau peuvent en avoir besoin en plus delibnotify-bin
Jasen
78

Tout le monde évoque la zénité, il y en a beaucoup d'autres. Une liste mélangée mais intéressante est à http://alternativeto.net/software/zenity/

Tout d'abord, un exemple de zenity avec balisage de mise en forme de texte, titre de fenêtre, étiquette de 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"

gxmessage

gxmessage "my text"

xmessage

xmessageest 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 assez 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

kdialog

(pas testé)

Dans un PPA

YAD: Zenity sur les stéroïdes [Afficher les boîtes de dialogue graphiques à partir de 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 plus grand exemple

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 sont pas dans les référentiels standard Ubuntu

  • shellgui
  • xdialog
  • gtkdialog

Hors sujet (pour terminal)

whiptail --msgbox "my text" 10 20
dialog --msgbox "my text" 10 20

N'hésitez pas à modifier.

Stéphane Gourichon
la source
@ThorSummoner merci pour le tuyau. Pour le lecteur intéressé, la différence est que whiptail --infobox(qui ne fonctionne pas correctement sur les terminaux prenant en charge l'écran alternatif) revient sans attendre l'entrée de l'utilisateur, tandis que whiptail --msgbox(ce qui fonctionne) attend la confirmation de l'utilisateur avant de quitter.
Stéphane Gourichon le
Je me souviens avoir été insatisfait de msgbox, pour mes besoins à l'époque, je pense que j'avais besoin que la sortie soit visible dans un journal ou quelque chose comme ça;
ThorSummoner
Beaucoup d'options! Pretty nice examples
artu-hnrq
49

L' application zenity semble être ce que vous recherchez.

Pour prendre des entrées de zenity , vous pouvez spécifier une variable et y enregistrer la sortie de zenity --entry . Cela ressemble à quelque chose comme ceci:

my_variable=$(zenity --entry)

Si vous regardez la valeur dans my_variable maintenant, ce sera ce qui a été tapé dans la boîte de dialogue de saisie de zenity.

Si vous voulez donner une sorte d'invite sur ce que l'utilisateur (ou vous) doit entrer dans la boîte de dialogue, ajoutez le commutateur --text avec l'étiquette que vous voulez. Cela ressemble à quelque chose comme ceci:

my_variable=$(zenity --entry --text="What's my variable:")

Zenity propose de nombreuses autres options intéressantes pour des tâches spécifiques, vous voudrez peut-être les vérifier également avec zenity --help . Un exemple est l' option --calendar qui vous permet de sélectionner une date dans un calendrier graphique.

my_date=$(zenity --calendar)

Ce qui donne une date joliment 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 curseurs, les erreurs, les listes, etc.

J'espère que cela t'aides.

Jim
la source
Je peux voir zentityça a l'air cool. Cependant, cela ne fait pas partie d'Ubuntu 12.04, alors j'y suis allé à la gxmessageplace.
Peter V.Mørch
19

J'ai trouvé la commande xmessage , qui est assez bonne.

Blorgbeard est sorti
la source
3
C'est le grand-père de tous.
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功
8

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 ça comme ça:

myanswer=`gui-prompt "type your answer and press enter"`
Mark Harrison
la source
8

alertet notify-sendsemblent être la même chose. J'utilise notify-sendpour les messages sans entrée car cela ne vole pas le focus et je ne peux pas trouver un moyen d'empêcher zenity etc. de faire cela.

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"
Dave Thebuskeruk
la source
6

Il existe également dialoget la version KDE kdialog. dialogest utilisé par slackware, il peut donc ne pas être immédiatement disponible sur d'autres distributions.

Steve Baker
la source
6

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);'
user6795571
la source
3

Que diriez-vous de l' alerte d'Ubuntu . Il peut être utilisé après n'importe quelle opération pour alerter qu'elle est terminée et même afficher une icône de croix rouge si l'opération s'est terminée avec des erreurs

ls -la; alert
Mulya
la source
3

Zenity est vraiment l'outil exact que je pense que vous recherchez.

ou

zenity --help
Lnux
la source
0

Kdialog et dialogue sont tous les deux bons, mais je recommanderais Zenity. Rapide, facile et bien meilleur pour le xmessage ou le dialogue.

Jarek
la source
0

Exemple de script bash pour l'utilisation des contrôles Gambas GTK / QT (objets GUI): l'EDI Gambas peut être utilisé pour concevoir même de grandes interfaces graphiques et agir comme un serveur GUI. Des exemples d'explications peuvent être téléchargés à partir de l'App Store Gambas.
https://gambas.one/gambasfarm/?id=823&action=search

entrez la description de l'image ici

Peter Bauer
la source