Czy istnieje sposób na wyświetlanie powiadomienia ze skryptu bash w Ubuntu?

103

Większość aplikacji może wyświetlać ładnie sformatowane powiadomienia o zdarzeniach pojawiających się w prawym górnym rogu ekranu. Mam zamiar napisać skrypt bash, który wykona dość długie przetwarzanie w tle i naprawdę chcę wiedzieć, kiedy zostanie ukończony. Jak mogę pokazać to fajne powiadomienie ze skryptu bash?

vava
źródło

Odpowiedzi:

124

Jeśli używasz nowego systemu powiadamiania w Jaunty, chcesz powiadomić-wysłać polecenie

notify-send - a program to send desktop notifications

SYNOPSIS

With notify-send you can sends desktop notifications to the user via
a notification daemon from the command line.  These notifications can be
used to inform the user about an event or display some form of information
without getting in the user's way.

OPTIONS

-u, --urgency=LEVEL
Specifies the urgency level (low, normal, critical).

-t, --expire-time=TIME
    Specifies the timeout in milliseconds at which to expire the notification.
-i, --icon=ICON[,ICON...]
    Specifies an icon filename or stock icon to display.
-c, --category=TYPE[,TYPE...]
    Specifies the notification category.
nagul
źródło
4
Dzięki, właśnie go znalazłem :) apt-get install libnotify-bin należy uruchomić zanim go zdobędziesz.
vava
W jaki sposób użytkownik root wysyła wiadomość z crons, init.d itp.?
Lance Caraccioli
6
Np .: powiadom-wyślij Test „Hello World”
Thaha kp
3
Parametr --expire-time nie działa na Ubuntu dzięki tej „funkcji” (błąd). bugs.launchpad.net/ubuntu/+source/notify-osd/+bug/390508
axiopisty
Zauważyłem, że notify-sendjest wstrzymany podczas odtwarzania wideo / audio. Chociaż jest to prawidłowy przypadek użycia, jeśli nadal chcesz je zobaczyć, należy dodać opcję --urgency =rytyczny .
ccpizza
29

Znalazłem inny sposób poprzez Zenity

echo 'message:hi' | zenity --notification --listen

(Ma to również tę zaletę, że jest już zainstalowane na Ubuntu.)

vava
źródło
Lubię Zenity, ponieważ obsługuje interakcje użytkownika w oknach dialogowych (w przeciwieństwie do powiadomień-wysyłania)
Waffle's Crazy Peanut
12

Jest także xmessage , który wyskakuje okno, więc powinno działać na każdym systemie X11.

Pro: Pozwala również interaktywnie pytać użytkownika za pomocą przycisków.

Przeciw: Jak każdy wyskakujący alert, zazwyczaj otrzymuje fokus, więc jeśli jesteś w trakcie pisania, może zniknąć przed przeczytaniem wiadomości.

NVRAM
źródło
4
Przeciw: Wygląda brzydko jak diabli, a także jest bardzo małym oknem, które nie zawsze jest oczywiste dla użytkownika. W każdym razie jest to uniwersalne. :)
Nik Reiman
xmessage nie działa jednak w Fedorze. Nie jest domyślnie instalowany.
Abhay Mittal
Nie jest również dostępny w domyślnej instalacji Arch Linuxa Xorg.
friederbluemle
Możesz także wyświetlić wyskakujące okienko z przyciskami „OK” i „Anuluj” za pomocą notify-send --expire-time=0 "Hello World"lub notify-send -t 0 "Hello world". W przeciwnym razie jednak -topcja jest ignorowana z powodu pewnych głupich „decyzji projektowych”: askubuntu.com/questions/110969/notify-send-ignores-timeout
Gabriel Staples
Nie mogłem tego znieść; Musiałem napisać własną odpowiedź :) superuser.com/a/1310142/425838
Gabriel Staples
10

Dla użytkowników KDE:

$ kdialog --title "Long process completed!" --passivepopup "This popup will disappear in 5 seconds" 5 &
kolypto
źródło
Czy można ustawić ikonę powiadomienia?
Malabarba
4

Powiadomienie wyskakujące, które zamyka się automatycznie po 10 sekundach:

notify-send "Hello world"

Źródło: https://superuser.com/a/31919/425838

Wyskakujące okno z przyciskami do kliknięcia:

[okno nie otrzymuje automatycznego ustawiania ostrości]

notify-send -t 0 "Hello world"

Źródło: ja; uwaga: -t jest ignorowana dla wszystkich wartości oprócz 0 - jak głupio . :(


LUB
[okno automatycznie ustawia ostrość]

zenity --info --title "Hello" --text "World"

Źródło: https://askubuntu.com/a/804475/327339


LUB

[MOJE ULUBIONE, ponieważ okno zamyka się automatycznie po określonym --timeoutw sekundach]

zenity --info --title "Hello" --text "World" --timeout=2

Źródło: ja czytając strony podręcznika: man zenity


LUB
[super brzydko wyglądający]

xmessage 'hello world'

Źródło: http://www.linux-commands-examples.com/xmessage

Gabriel Staples
źródło
3

Istnieje międzyplatformowe rozwiązanie o nazwie Yfiton :

$ yfiton -n desktop -Pmessage="Lunch time!" -Pposition=TOP_RIGHT
Laurent
źródło
2

W skrypcie powłoki można także wywołać narzędzie osd_cat z libxosd.

maniak
źródło
1
Jest to trochę inne, ponieważ nie używa powiadomień na pulpicie ubuntu.
vava
Tak, jest to alternatywa, której można używać z dowolną dystrybucją Linuksa i dowolnym WM / DE.
maniakiem