Есть ли способ показать уведомление от bash-скрипта в Ubuntu?


103

Большинство приложений могут отображать красиво отформатированные уведомления о событиях, которые появляются в верхнем правом углу экрана. Я собираюсь написать сценарий bash, который будет долго обрабатывать фон, и я действительно хочу знать, когда он закончится. Как я могу показать это приятное уведомление от bash-скрипта?


Ответы:


124

Если вы используете новую систему уведомлений в бойком, вы хотите известить-отправить команду

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.

4
Спасибо, только что нашел это сам :) apt-get install libnotify-bin нужно запустить, прежде чем получить его.
Вава

Как пользователь root отправляет сообщение из crons, init.d и т. Д.?
Ланс Караччоли

6
Например: уведомить-отправить тест "Hello World"
Thaha kp

3
Параметр --expire-time не работает в Ubuntu благодаря этой «функции» (ошибка). bugs.launchpad.net/ubuntu/+source/notify-osd/+bug/390508
axiopisty

Я обнаружил, что notify-sendэто запрещено во время воспроизведения видео / аудио. Несмотря на то, что это допустимый вариант использования, если вы все еще хотите его увидеть, необходимо добавить --urgency = критический .
ccpizza

29

Нашел другой путь, через Zenity

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

(Это также имеет то преимущество, что уже установлено в Ubuntu.)


Мне нравится Zenity в том, что он поддерживает взаимодействие с пользователем для диалогов (в отличие от уведомления-отправки)
Crazy Peanut от Waffle

12

Также есть xmessage, которое будет всплывать в окне, поэтому оно должно работать на любой системе X11.

Pro: также позволяет интерактивно подсказывать пользователю кнопки.

Con: Как и любое всплывающее предупреждение, оно обычно получает фокус, поэтому, если вы набираете текст, оно может исчезнуть, прежде чем прочитать сообщение.


4
Против: Это выглядит ужасно чертовски, а также является очень маленьким окном, которое не всегда очевидно для пользователя. В любом случае, это универсально, хотя. :)
Ник Рейман

xmessage не работает в Fedora, хотя. По умолчанию он не установлен.
Абхай Миттал

Он также недоступен в стандартной установке Xorg Arch Linux.
Friederbluemle

Вы также можете получить всплывающее окно с кнопками «ОК» и «Отмена» с помощью notify-send --expire-time=0 "Hello World"или notify-send -t 0 "Hello world". В противном случае, однако, этот -tвариант игнорируется из-за некоторых глупых «дизайнерских решений»: askubuntu.com/questions/110969/notify-send-ignores-timeout
Габриэль Стейплс

Я не мог принять это; Я должен был написать свой собственный ответ :) superuser.com/a/1310142/425838
Габриэль Стейплс

11

Для пользователей KDE:

$ kdialog --title "Long process completed!" --passivepopup "This popup will disappear in 5 seconds" 5 &

Можно ли установить значок для уведомления?
Малабарба

5

Всплывающее уведомление, которое автоматически закрывается через 10 секунд:

notify-send "Hello world"

Источник: https://superuser.com/a/31919/425838

Всплывающее окно с кнопками для нажатия:

[окно не получает автофокус]

notify-send -t 0 "Hello world"

Источник: я; примечание: -t игнорируется для всех значений, кроме 0 - как глупо . :(


ИЛИ
[окно получает автофокус]

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

Источник: https://askubuntu.com/a/804475/327339


ИЛИ ЖЕ

[МОЙ ЛЮБИМЫЙ, так как окно автоматически закрывается после указанного --timeoutв секундах]

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

Источник: я читаю справочные страницы: man zenity


ИЛИ
[супер уродливый вид]

xmessage 'hello world'

Источник: http://www.linux-commands-examples.com/xmessage


3

Существует кроссплатформенное решение под названием Yfiton :

$ yfiton -n desktop -Pmessage="Lunch time!" -Pposition=TOP_RIGHT

2

В сценарии оболочки вы также можете вызвать утилиту osd_cat из libxosd.


1
Это немного отличается, так как он не использует уведомления рабочего стола Ubuntu.
Вава

Да, это альтернатива, которую вы можете использовать с любым дистрибутивом Linux и любым WM / DE.
Компьютерщик
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.