Wie zeige ich ein GUI-Meldungsfeld aus einem Bash-Skript unter Linux?


151

Ich schreibe ein paar kleine Bash-Skripte unter Ubuntu Linux. Ich möchte sie über die GUI ausführen können, ohne dass ein Terminalfenster erforderlich ist, um Eingaben einzugeben oder Ausgaben anzuzeigen.

Bisher ist nur ein Passwort für sudo erforderlich - und gksudo erledigt das in Ordnung. Ich habe jedoch noch keine einfache Möglichkeit gefunden, ein Meldungsfeld anzuzeigen. Gibt es eine Art 'gkmessage'-Befehl? Ich würde etwas bevorzugen, das in einer Standard-Ubuntu-Installation vorhanden ist, aber es macht mir nichts aus, wenn nötig ein neues Paket zu installieren.


Antworten:


143

Ich glaube, Zenity wird tun, was Sie wollen. Es wurde speziell für die Anzeige von GTK-Dialogen über die Befehlszeile entwickelt und ist als Ubuntu-Paket verfügbar .


4
zenity --helpist nicht so hilfreich. Um dies nützlich zu machen, müssen Sie sicherstellen, dass Sie festlegen --text=My text here, dass etwas angezeigt wird ...
Stephen

10
ZBzenity --info --text="Calculation complete"
Craig McQueen

3
@ Stephen, aus irgendeinem Grund ist der richtige Befehl zenity --help-all.
GKFX

3
Ich mag keine Programme, die das Display öffnen müssen, um die
Hilfemeldung

Ich verwende diese Methode, um .xinitrcbeim Starten meines xorgServers Warnungen oder Fehler in meinem anzuzeigen . Andernfalls wären die Fehler transparent. Ich ziehe dies auch zenityvor, kdialogda KDE noch nicht gestartet wurde und GTK-Bibliotheken leichter sind.
Cmevoli

152

Wenn Sie Ubuntu viele Distributionen verwenden, wirft der notify-sendBefehl eine dieser netten verderblichen Benachrichtigungen in die obere rechte Ecke. Wie so:

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

Wunderschönen!


2
Dies funktioniert auch mit Fedora. Ich bin mir ziemlich sicher, dass jede Linux-Distribution dies kann.
kmatheny

4
Funktioniert nicht unter Raspbian GNU / Linux 7. Gibt es ein Paket, das installiert werden muss?
Carl verbiest

1
in den Debian-Repos: Apt-Cache-Suche notify-osd @carlverbiest
Santa

2
Zumindest in Ubuntu 14.04 erhalten Sie einen Popup-Dialog, der nicht abläuft, wenn Sie notify-send mit Timeout 0 wie "notify-send -t 0 'hi there!'" aufrufen.
Vancan1ty

In Debian Jessie libnotify-binenthält das Paket die notify-sendBinärdatei. Gnome3 scheint nicht erforderlich zu sein, notify-osdaber ich denke, andere Desktop-Umgebungen erfordern dies möglicherweise zusätzlich zulibnotify-bin
Jasen

78

Jeder erwähnt Zenity, es scheint viele andere zu geben. Eine durcheinandergebrachte, aber interessante Liste finden Sie unter http://alternativeto.net/software/zenity/

Zunächst ein Beispiel für Zenity mit Textformatierungs-Markup, Fenstertitel und Schaltflächenbeschriftung.

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

xmessageist sehr alt, daher ist es stabil und wahrscheinlich in allen Distributionen verfügbar, die X verwenden (da es mit X verteilt wird). Es kann über X-Ressourcen angepasst werden, für diejenigen, die Linux oder Unix lange genug verwendet haben, um zu wissen, was es bedeutet ( .Xdefaultsjemand?).

xmessage -buttons Ok:0,"Not sure":1,Cancel:2 -default Ok -nearmouse "Is xmessage enough for the job ?" -timeout 10

kdialog

(nicht getestet)

In einem PPA

YAD: Zenity On Steroids [Grafische Dialoge aus Shell-Skripten anzeigen] ~ Web Upd8: Ubuntu / Linux-Blog . Scheint Dialoge nicht automatisch zu dimensionieren.

echo My text | yad \
--text-info \
--width=400 \
--height=200

Ein größeres Beispiel

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"

Andere nicht in Ubuntu-Standard-Repositorys

  • Shellgui
  • xdialog
  • gtkdialog

Off-Topic (für Terminal)

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

Fühlen Sie sich frei zu bearbeiten.



@ThorSummoner danke für den Tipp. Für den interessierten Leser besteht der Unterschied darin, dass whiptail --infobox(was auf Terminals, die einen alternativen Bildschirm unterstützen, nicht ordnungsgemäß funktioniert) zurückgegeben wird, ohne auf Benutzereingaben zu warten, während whiptail --msgbox(was funktioniert) vor dem Beenden auf die Bestätigung durch den Benutzer wartet.
Stéphane Gourichon

Ich erinnere mich, dass ich mit msgbox nicht zufrieden war. Für meine damaligen Zwecke musste die Ausgabe in einem Protokoll oder ähnlichem angezeigt werden.
ThorSummoner

Viele Möglichkeiten! Ziemlich schöne Beispiele
artu-hnrq

49

Die Zenity- Anwendung scheint genau das zu sein, wonach Sie suchen.

Um Eingaben von zenity zu übernehmen , können Sie eine Variable angeben und die Ausgabe von zenity --entry darin speichern. Es sieht ungefähr so ​​aus:

my_variable=$(zenity --entry)

Wenn Sie sich jetzt den Wert in my_variable ansehen , ist dies alles, was im Zenity-Popup-Eingabedialog eingegeben wurde.

Wenn Sie eine Aufforderung geben möchten, was der Benutzer (oder Sie) in das Dialogfeld eingeben soll, fügen Sie den Schalter --text mit der gewünschten Bezeichnung hinzu. Es sieht ungefähr so ​​aus:

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

Zenity bietet viele andere nützliche Optionen für bestimmte Aufgaben. Vielleicht möchten Sie diese auch mit zenity --help ausprobieren . Ein Beispiel ist die Option --calendar , mit der Sie ein Datum aus einem grafischen Kalender auswählen können.

my_date=$(zenity --calendar)

Welches gibt ein schön formatiertes Datum basierend auf dem, was der Benutzer angeklickt hat:

echo ${my_date}

gibt:

08/05/2009

Es gibt auch Optionen für Schieberegler, Fehler, Listen usw.

Hoffe das hilft.


Ich kann sehen, zentitysieht cool aus. Es ist jedoch nicht Teil von Ubuntu 12.04, also habe ich mich gxmessagestattdessen dafür entschieden.
Peter V. Mørch


8

Hier ist ein kleines Tcl-Skript, das macht, was Sie wollen. Der Wish-Interpreter sollte standardmäßig unter Ubuntu installiert sein.

#!/usr/bin/wish
pack [label .msg -text [lindex $argv 0]]
pack [entry .ent]
bind .ent <KeyPress-Return> { puts [.ent get]; destroy . }
focus .ent

Nennen Sie es so:

myanswer=`gui-prompt "type your answer and press enter"`

7

alertund notify-sendscheinen das gleiche zu sein. ich benutzenotify-send für nicht eingegebene Nachrichten, da es den Fokus nicht stiehlt und ich keinen Weg finde, Zenity usw. daran zu hindern.

z.B

# 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"

6

Es gibt auch dialogund die KDE-Version kdialog. dialogwird von Slackware verwendet, sodass es auf anderen Distributionen möglicherweise nicht sofort verfügbar ist.


5

wenn nichts anderes vorhanden ist. Sie können ein xterm starten und es wie folgt wiedergeben:

 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);'

3

Wie wäre es mit Ubuntus Alarm . Es kann nach jedem Vorgang verwendet werden, um den Abschluss zu warnen und sogar das Symbol des roten Kreuzes anzuzeigen, wenn der Vorgang mit Fehlern abgeschlossen wurde

ls -la; alert

3

Zenity ist wirklich genau das Werkzeug, nach dem Sie suchen.

oder

zenity --help

0

Kdialog und Dialog sind beide gut, aber ich würde Zenity empfehlen. Schnell, einfach und viel besser aussehend die xmessage oder den Dialog.


Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.