Как заставить новое Уведомление в notify-osd появляться, не дожидаясь выхода предыдущего?

Я сделал скрипт (и ярлык.desktop, ведущий к этому скрипту) для запуска и остановки xampp...

Он проверяет состояние xampp и, соответственно, запускает или останавливает xampp.

Теперь я назначил уведомление, как только скрипт запускается, чтобы отобразить "Запуск xampp..." или "Остановка xampp...", а затем, когда xampp запущен или остановлен, он отображает "Xampp начался..." или " Xampp остановился... "

Я использовал notify-send, чтобы показать уведомление, как показано в скрипте ниже

Теперь дело в том, что здесь второе уведомление ожидает исчезновения первого уведомления, а затем всплывает, даже если xampp запустился / остановился.

Я хочу, чтобы новое уведомление появлялось немедленно, заставляя предыдущее выйти до завершения его жизненного цикла.

Видно, что это происходит при немедленной активации / деактивации беспроводной сети / сети...

Например, "Беспроводная связь включена" появляется при выборе "Включить беспроводную связь", и если вы сразу же выбираете отключить беспроводную связь, появляется уведомление "Беспроводная связь отключена", не дожидаясь, пока уведомление "Беспроводная связь включена" завершит свой жизненный цикл.

Так как мне этого добиться?

#!/bin/sh

SERVICE='proftpd'

if ps ax | grep -v grep | grep $SERVICE > /dev/null

then

notify-send -i /opt/lampp/htdocs/xampp/img/logo-small.gif "Stopping XAMPP..." && 
gksudo /opt/lampp/lampp stop && notify-send -i /opt/lampp/htdocs/xampp/img/logo-
small.gif "XAMPP Stoped."

else

notify-send -i /opt/lampp/htdocs/xampp/img/logo-small.gif "Starting XAMPP..." && gksudo /opt/lampp/lampp start && notify-send -i /opt/lampp/htdocs/xampp/img/logo-small.gif "XAMPP Started."

fi

На странице справки для уведомления-отправки я нашел --urgency=LEVEL или -u, где уровни низкие, нормальные, критические.

Это какая-то польза? сделать это критично?

Также я попробовал это с командой notify-send -u=critical"Testing" но это не работает... это дает ошибку - Неизвестная срочность критического тестирования указан. Известные уровни срочности: низкий, нормальный, критический.

или если я дам команду notify-send -u=LOW"Testing" это дает мне ошибку пропущенного аргумента для -u

Любое отношение??

Информация из комментариев,

по какой-то причине это работает странным образом! вместо диалогового окна "Запуск xampp.." и "Остановка xampp.." отображается диалоговое окно, а затем выводится уведомление "xampp начат" или "xampp остановлен"...:/ диалоговое окно справляется с кнопками ОК и Отмена!

введите описание здесь

3 ответа

Патч для этой ошибки можно найти по адресу: https://bugs.launchpad.net/ubuntu/+source/libnotify/+bug/257135?comments=all

@izx сделал ppa-версию для патча, поэтому установка теперь проста (спасибо izx!)- Как мне использовать "notify-send" для немедленной замены существующего уведомления?

Для установки откройте терминал и:

sudo apt-add-repository ppa: izx / askubuntu
sudo apt-get update
sudo apt-get установить libnotify-bin

Теперь вы должны были установить исправленную версию notify-send, которая теперь может заменять и распечатывать номера идентификаторов, чтобы вы могли использовать только один блок уведомлений для своего сценария оболочки. Программа теперь имеет -p а также -r варианты, или длинный синтаксис --print-id а также --replace-id


Я написал сценарий на основе вашего оригинала, который будет использовать его, отображение уведомлений о запуске и остановке до отображения остановлено и запущено, и он использует то же окно уведомлений, если вы установили исправленную версию, создайте файл с именем config.txt и поместите число 0 внутрь, затем поместите этот файл в ту же папку, что и ваш файл lampp.sh.

#!/bin/sh

SERVICE='proftpd'

if ps ax | grep -v grep | grep $SERVICE > /dev/null

then
notify-send -t 0 -p -r `cat config.txt` -i /opt/lampp/htdocs/xampp/img/logo-small.gif "Stopping XAMPP ..." >config.txt && gksudo /opt/lampp/lampp stop && notify-send -r `cat config.txt` -t 5000 -i /opt/lampp/htdocs/xampp/img/logo-small.gif "XAMPP Stoped."  
else
notify-send -t 0 -p -r `cat config.txt` -i /opt/lampp/htdocs/xampp/img/logo-small.gif "Starting XAMPP ..." >config.txt && gksudo /opt/lampp/lampp start && notify-send -r `cat config.txt` -t 5000 -i /opt/lampp/htdocs/xampp/img/logo-small.gif "XAMPP Started."

fi

Редактировать Вот как это выглядит на моем...введите описание здесь

Вы можете использовать notify_notification_update, а затем notify_notification_show, чтобы обновить существующее уведомление.

Вот пример с Python и PyGObject:

from time import sleep
from gi.repository import Notify

Notify.init(app_name = 'notification-update-example')
notification = Notify.Notification.new("Notification", "Original message", None)
notification.show()
sleep(3)
notification.update("More notification", "Updated message", None)
notification.show()
Другие вопросы по тегам