Очистка / изменение предыдущих уведомлений libnotify?

Я написал сценарий, который генерирует такие уведомления:

notify-send -i audio-card "Transferring audio playback to speakers." \ "Audio playback has been transferred to the analog output speaker system." 

Есть ли способ очистить или заменить эти уведомления из командной строки или из Python? По сути, у меня есть сценарий, который переключает между двумя приемниками PulseAudio, и я хотел бы удалить предыдущие уведомления этого типа, чтобы заменить их обновленным текстом, если пользователь быстро переключится.

  • PyOpenCL на Linux Монетный двор: PLATFORM_NOT_FOUND_KHR
  • Используя OGG / Vorbis, есть ли способ продолжить запись в существующий аудиофайл?
  • Нет модуля с именем yum
  • Замените python, созданный с помощью UCS4 с UCS2
  • ViM и Python говорят, что кодировка ANSI_X3.4-1968
  • Использование Python и Scapy для обнюхивания ARP на Pi
  • Как я могу иметь более одной возможности в строке сценария скрипта?
  • Почему я получаю AttributeError, когда пытаюсь использовать рабочий стол Pajamas на Fedora 15?
  • Где установлены pithos?
  • связывание проблем при установке модуля python и зависимостей как не-root
  • Почему существует EOF в середине аргументов?
  • Установка trac - «Trac требует Python 2.5 или новее»
  • 2 Solutions collect form web for “Очистка / изменение предыдущих уведомлений libnotify?”

    Из CLI вы можете отображать и закрывать всплывающее уведомление через gdbus / qdbus .
    Вот как это сделать с gdbus :

     gdbus call --session --dest org.freedesktop.Notifications --object-path /org/freedesktop/Notifications --method org.freedesktop.Notifications.Notify my_app_name 42 audio-card "Message" "Body" [] {} 20 

    это выведет что-то вроде:

     (uint32 72,) 

    72ID уведомления. Теперь, когда вы знаете ID вы можете закрыть всплывающее окно с помощью:

     gdbus call --session --dest org.freedesktop.Notifications --object-path /org/freedesktop/Notifications --method org.freedesktop.Notifications.CloseNotification 72 

    Теперь, если вам нужен ID позже, просто напишите его в файл при вызове Notify :

     gdbus call --session --dest org.freedesktop.Notifications --object-path /org/freedesktop/Notifications --method org.freedesktop.Notifications.Notify my_app_name 42 audio-card "Message" "Body" [] {} 20 | sed 's/[^ ]* //; s/,.//' > /tmp/last_id 

    и получить его оттуда, когда вы хотите закрыть всплывающее окно:

     gdbus call --session --dest org.freedesktop.Notifications --object-path /org/freedesktop/Notifications --method org.freedesktop.Notifications.CloseNotification $(cat /tmp/last_id) 

    PS Я нахожусь в Gnome 3 и уведомления, отправленные через pynotify notify-send , pynotify , libnotify т. Д., Только последние 5 секунд, независимо от параметра time (это поведение по умолчанию в Gnome 3, не спрашивайте меня почему). Кроме того, они не складываются: Gnome отображает только одно уведомление за раз. Поэтому я не могу тестировать несколько всплывающих окон, но он должен работать.

    Используйте метод update метод show call снова:

     #!/usr/bin/python # -*- coding: utf-8 -*- import pynotify import time pynotify.init("Basic") n = pynotify.Notification("Title1", "body1", "dialog-warning") n.show() time.sleep(1) n.update("Title2", "body2", "dialog-warning") n.show() 

    Обновить:

    Существует close метод, но … он не работает вообще. Видимо, не только для меня:

    Я думал, что это может быть вызвано ошибкой в ​​привязках, поэтому я создал эту программу на C ++:

     #include <libnotify/notify.h> #include <unistd.h> int main(int argc, char **argv) { GError *error = NULL; notify_init("basic"); NotifyNotification *example; example = notify_notification_new("Ttile1", "Body1", NULL); notify_notification_show(example, &error); usleep(1000000); notify_notification_update(example, "Ttile2", "Body2", NULL); notify_notification_show(example, &error); usleep(1000000); notify_notification_close(example, &error); } 

    И скомпилировал его с помощью:

     g++ test.cpp -o test $(pkg-config --libs --cflags libnotify) 

    Это не сработало. Похоже, здесь что-то прослушивается.

    Затем я попытался использовать модуль pickle для сохранения ссылки – он тоже не работает. Вы не можете хранить ссылки на них.

    Поэтому единственное, что я могу придумать, – это разделить ваш скрипт на два: демон и клиент. После запуска клиент должен связаться с демоном, который все время работал в фоновом режиме со ссылкой на экземпляр уведомления.

    Linux и Unix - лучшая ОС в мире.