Jak wyświetlić okno komunikatu GUI ze skryptu bash w systemie Linux?


152

Piszę kilka małych skryptów basha pod Linuksem Ubuntu. Chcę móc je uruchamiać z GUI bez potrzeby okna terminala, aby wprowadzić jakiekolwiek dane wejściowe lub wyświetlić dane wyjściowe.

Jak dotąd jedyne wymagane dane wejściowe to hasło do sudo - i gksudo radzi sobie z tym dobrze. Ale nie znalazłem jeszcze prostego sposobu na wyświetlenie okna komunikatu. Czy jest dostępne jakieś polecenie „gkmessage”? Wolałbym coś obecnego w domyślnej instalacji Ubuntu, ale nie mam nic przeciwko zainstalowaniu nowego pakietu, jeśli to konieczne.


Odpowiedzi:


143

Wierzę, że Zenity zrobi, co chcesz. Jest specjalnie zaprojektowany do wyświetlania okien dialogowych GTK z wiersza poleceń i jest dostępny jako pakiet Ubuntu .


4
zenity --helpnie jest tak pomocne. Aby było to przydatne, musisz upewnić się, że ustawiłeś, --text=My text hereaby coś wyświetlało ...
Stephen

10
Np.zenity --info --text="Calculation complete"
Craig McQueen,

3
@Stephen, z jakiegoś dziwnego powodu poprawne polecenie to zenity --help-all.
GKFX

3
Nie lubię programów, które muszą otwierać ekran, aby wydrukować komunikat pomocy ...
thoni56

Używam tej metody do wyświetlania ostrzeżeń lub błędów w moim .xinitrcpodczas uruchamiania xorgserwera. W przeciwnym razie błędy byłyby przejrzyste. Wolę też to od zenitynowa, kdialogponieważ KDE jeszcze się nie uruchomił, a biblioteki GTK są lżejsze.
cmevoli

153

Jeśli używasz wielu dystrybucji Ubuntu,notify-send polecenie wyrzuci jedno z tych ładnych, łatwo psujących się powiadomień w prawym górnym rogu. Tak jak to:

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

Piękny!


2
Działa to również z Fedorą. Jestem prawie pewien, że każda dystrybucja Linuksa może to zrobić.
kmatheny

4
Nie działa na Raspbian GNU / Linux 7. Czy jest pakiet, który należy zainstalować?
Carl Verbiest

1
w repozytoriach Debiana: apt-cache search notify-osd @carlverbiest
santa.

2
przynajmniej w Ubuntu 14.04, jeśli zadzwonisz powiadomienie-send z limitem czasu 0, np. „notify-send -t 0 'cześć!'”, otrzymasz wyskakujące okienko, które nie wygasa.
vancan1ty

W Debianie Jessie libnotify-binpakiet zawiera notify-sendplik binarny. Wydaje się, że Gnome3 nie wymaga, notify-osdale myślę, że inne środowiska graficzne mogą tego wymagaćlibnotify-bin
Jasen

78

Wszyscy wspominają o zenity, wydaje się, że jest wiele innych. Pomieszana, ale interesująca lista znajduje się pod adresem http://alternativeto.net/software/zenity/

Najpierw przykład zenity ze znacznikami formatowania tekstu, tytułem okna, etykietą przycisku.

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

xmessagejest bardzo stary, więc jest stabilny i prawdopodobnie dostępny we wszystkich dystrybucjach używających X (ponieważ jest dystrybuowany z X). Można go dostosować za pomocą zasobów X, dla tych, którzy używają Linuksa lub Uniksa wystarczająco długo, aby wiedzieć, co to znaczy ( .Xdefaultsktoś?).

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

kdialog

(nie testowany)

W umowie PPA

YAD: Zenity On Steroids [Wyświetlaj graficzne dialogi ze skryptów powłoki] ~ Aktualizacja sieciowa8: Blog Ubuntu / Linux . Nie wydaje się, aby okna dialogowe były automatycznie zmieniane.

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

Większy przykład

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"

Inne nie znajdują się w standardowych repozytoriach Ubuntu

  • shellgui
  • xdialog
  • gtkdialog

Nie na temat (dla terminala)

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

Zapraszam do edycji.



@ThorSummoner dzięki za wskazówkę. Dla zainteresowanego czytelnika różnica polega na tym, że whiptail --infobox(co nie działa poprawnie na terminalach obsługujących alternatywny ekran) wraca bez czekania na wejście użytkownika, podczas gdy whiptail --msgbox(co działa) czeka na potwierdzenie użytkownika przed wyjściem.
Stéphane Gourichon

Pamiętam, że byłem niezadowolony z msgbox, do moich celów w tamtym czasie, myślę, że potrzebowałem, aby wynik był widoczny w dzienniku lub czymś w tym rodzaju;
ThorSummoner

Wiele opcji! Całkiem fajne przykłady
artu-hnrq

49

W zenity pojawi się aplikacja, czego szukasz.

Aby pobrać dane wejściowe z zenity , możesz określić zmienną i zapisać do niej wynik zenity --entry . Wygląda mniej więcej tak:

my_variable=$(zenity --entry)

Jeśli spojrzysz na wartość w my_variable , będzie to wszystko, co zostało wpisane w wyskakującym oknie dialogowym zenity.

Jeśli chcesz podpowiedzieć, co użytkownik (lub Ty) powinien wprowadzić w oknie dialogowym, dodaj przełącznik --text z żądaną etykietą. Wygląda mniej więcej tak:

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

Zenity ma wiele innych fajnych opcji, które są przeznaczone do określonych zadań, więc możesz je również sprawdzić za pomocą zenity --help . Jednym z przykładów jest opcja --calendar , która pozwala wybrać datę z kalendarza graficznego.

my_date=$(zenity --calendar)

Co daje ładnie sformatowaną datę na podstawie tego, co kliknął użytkownik:

echo ${my_date}

daje:

08/05/2009

Istnieją również opcje selektorów suwaków, błędów, list i tak dalej.

Mam nadzieję że to pomoże.


Widzę, zentityże wygląda fajnie. Jednak nie jest to część Ubuntu 12.04, więc gxmessagezamiast tego wybrałem .
Peter V. Mørch


8

Oto mały skrypt Tcl, który zrobi, co chcesz. Interpreter Wish powinien być domyślnie zainstalowany w systemie Ubuntu.

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

Nazwij to tak:

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

8

alerti notify-sendwydaje się być tym samym. używamnotify-send do wiadomości bez wprowadzania danych, ponieważ nie kradną one uwagi i nie mogę znaleźć sposobu, aby powstrzymać zenity itp. Przed zrobieniem tego.

na przykład

# 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

Jest też dialogi wersja KDE kdialog. dialogjest używany przez slackware, więc może nie być natychmiast dostępny w innych dystrybucjach.


6

jeśli nic innego nie jest obecne. możesz uruchomić xterm i wywołać w nim echo, na przykład:

 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

A co z ostrzeżeniem Ubuntu . Może być używany po każdej operacji, aby ostrzec ją o zakończeniu, a nawet wyświetlić ikonę czerwonego krzyża, jeśli operacja została zakończona z błędami

ls -la; alert

3

Zenity to naprawdę dokładne narzędzie, którego myślę, że szukasz.

lub

zenity --help

0

Kdialog i dialog są dobre, ale polecam Zenity. Szybki, łatwy i znacznie lepiej wyglądający xmessage lub dialog.


Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.