Как я могу использовать «уведомит-посыл» немедленно заменить существующее уведомление?


23

Когда я использую , notify-sendчтобы показать уведомление на рабочем столе, а затем использовать его снова , чтобы показать другое уведомление, я заметил , что второй показывает только после первой исчез.

Есть ли способ получить notify-sendнемедленную замену существующего уведомления другим?

Ответы:


16

Вы можете, но вы должны использовать исправленный libnotify, чтобы сделать это

notify-sendне имеет возможности заменить существующие уведомления , прежде чем они таймаут (или пропали без вести). Это известная ошибка . Тем не менее, комментатор на сообщении об ошибке отправил патч , чтобы исправить это.

Установка пропатченного libnotify-bin из PPA

Я создал исправленную версию libnotify-бен пакет , который позволяет замену в моем PPA. В настоящее время это только для Ubuntu 12.04, но если вам это нужно для какого - либо другого в настоящее время поддерживается релиза, пожалуйста , напишите комментарий и я буду стараться изо все силами , чтобы сделать его доступным.

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

Sudo APT-адд-репозиторий PPA: izx / askubuntu
sudo apt-get update
sudo apt-get установить libnotify-bin

Как использовать возможности замены

Патч notify-sendвключает в себя два новых ключа-p (или --print-id ) и -r(или --replace-id ). --helpОписывает их как:

  -p, --print-идентификатор Печать ID уведомления.
  -r, --replace-id = REPLACE_ID Идентификатор уведомления для замены.
  • При этом -pкаждый notify-sendвернет идентификатор N (число / целое число).
  • Вызов другого notify-sendс немедленно-r N заменит предыдущее уведомление .
  • Например, для Баша, вы можете сохранить идентификатор из notify-send -p ...с:

    NID=$(notify-send -p "MESSAGE-1")

    а затем заменить его:

    notify-send -r $NID "MESSAGE-2"
  • Вы можете рекурсивно использовать как -p и -r в сценарии, до тех пор , как -r переменная инициализируется в 0 в начале.

  • Вот простой сценарий, который показывает уведомления отсчета от 0 до 100 в половинных-вторых интервалах:

    #! / bin / Баш 
    NID = 0
    для я в {} 0..100..10    делать       NID = $ (уведомительный отправить -p -r $ НИДЫ $ I)       спать 0,5    сделанный

Я получаю 404 за ppa.launchpad.net/izx/askubuntu/ubuntu/dists/trusty/main/… . Устареет ли это хранилище?
vp_arth

1
Вы можете использовать мой скрипт на python, который работает как
notify

11

Вы можете использовать «синхронный» намек создать «подтверждение» уведомление, которое заменит предыдущие уведомления о подтверждении. Например:

notify-send "Message" -h string:x-canonical-private-synchronous:anything

Подсказка "x-canonical-private-synchronous" указана в этом документе . Чтобы указать подсказку, используйте -h type:name:value. Тип здесь string, имя x-canonical-private-synchronous, и кажется, что значение может быть любым, что вы хотите.

Таким образом, если ваше первое уведомление создано с этой подсказкой, а второе также, второе немедленно заменит первое. (См Анимация и длительности в документации, в колонке «пузыри подтверждения».)


string:x-canonical-private-synchronous:anythingбыло именно то, что мне было нужно. Спасибо за этот ответ. Также для подключения к документации
АВК

Она не работает с GNOME ....
Johannes Лемонда

1
Это работает несколько , очевидно , только на убунту.
bschlueter

10

X-исх:
Как заставить новое уведомление в уведомляют-экранном , чтобы показать , не дожидаясь ранее одного до выхода?

без патчей вы можете просто сделать

#!/bin/bash

for i in {0..100..10}
    do
          killall notify-osd
          notify-send "testing" $i
          sleep 1
    done

Закладка:
Как использовать «уведомит-посыл» немедленно заменить существующее уведомление?


Отправляет ошибку notify-osd (2592): операция не разрешена. Что это значит?

Это может означать, что привилегии неадекватны требующие:

sudo killall notify-osd

Посылает сообщение об ошибке notify-osd(2592): Operation not permitted. Что это значит?
VedVals

5

Я создал простой скрипт на python, который работает почти так же, как notify-send, но имеет поддержку --replaces-id.

notify-send.py

Интернет: https://github.com/phuhl/notify-send.py

Сценарий питон для отправки уведомлений рабочего стола из командной строки.

Около

Libnotify является частью многих сценариев в мире Linux. Она использует многие из указанных особенностей Desktop Notifications спецификации и делает их доступными для раковины-скриптов. Это не однако позволяет заменить существующее уведомление с replaces-id. Это известная ошибка с 2008 года и имеет участок с 2012 года Патч - прежнему не вверх по течению , хотя (2018 год).

Этот скрипт на python использует пакет notify2 и предоставляет функциональность оболочке.

Различия между notify-send.py и уведомляют-посыла

  • В notify-send.py -h шоу поможет вместо того , чтобы параметр для подсказок. Применяется намеки --hint.
  • В notify-send.py -r IDи notify-send.py --replaces-id ID существует. Для того , чтобы заменить вызов уведомления notify-send.py с идентификатором , который был возвращен в уведомлении должен быть заменен.
  • notify-send.py возвращается идентификатор вновь созданного уведомления.
  • notify-send.py --replaces-process NAMEсуществует. Каждое уведомление, созданное с тем же ИМЯ, заменит каждое уведомление перед тем же ИМЯ. При вызове с этим параметром notify-send.pyможет блок, лучше называть с завершающим &.

Установка

Требуется python3.

git clone https://github.com/phuhl/notify-send.py
cd notify-send.py
sudo pip install notify2
sudo python setup.py install

использование

$ notify-send.py -h
usage: notify-send.py [-h] [-u LEVEL] [-t TIME] [-a APP_NAME]
                  [-i ICON[,ICON...]] [-c TYPE[,TYPE...]]
                  [--hint TYPE:NAME:VALUE] [-r ID]
                  [--replaces-process NAME]
                  SUMMERY [BODY]

positional arguments:
      SUMMERY
      BODY

optional arguments:
      -h, --help        show this help message and exit
      -u LEVEL, --urgency LEVEL
                        Specifies the urgency level (low, normal, critical).
      -t TIME, --expire-time TIME
                        Specifies the timeout in milliseconds at which to
                        expire the notification.
      -a APP_NAME, --app-name APP_NAME
                        Specifies the app name for the icon
      -i ICON[,ICON...], --icon ICON[,ICON...]
                        Specifies an icon filename or stock icon to display.
      -c TYPE[,TYPE...], --category TYPE[,TYPE...]
                        Specifies the notification category.
      --hint TYPE:NAME:VALUE
                        Specifies basic extra data to pass. Valid typesare
                        int, double, string and byte.
      -r ID, --replaces-id ID
                        Specifies the id of the notification that should be
                        replaced.
     --replaces-process NAME
                        Specifies the name of a process that should take care
                        of replacing notifications for this process.

извещать-посыл [.py] как суперпользователь

Для отображения уведомлений, даже если libnotify или

notify-send.py

используется от пользователя корня эти два сценария являются полезными.

#!/bin/bash
username=<your username here>
if [ "$(id -u)" != "1000" ] ; then
    sudo -u $username DISPLAY=:0 DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus notify-send.sh "$@"
else
    notify-send.sh "$@"
fi

С notify-send.shследующим образом:

#!/bin/bash
notify-send.py "$@" &

Смотрите также

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


Это решение работает для меня на Ubuntu 18.10. Ни один из других решений , казалось, не работа , а также.
Dreamcat4
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.