Відповіді:
notify-send
не має можливості замінити існуючі сповіщення перед тим, як вони вичерпалися (або зникли). Це відома помилка . Однак коментатор звіту про помилку опублікував виправлення, щоб виправити його.
Я створив виправлену версію пакета libnotify-bin, який дозволяє замінити мій PPA. Наразі він призначений лише для Ubuntu 12.04, але якщо він вам потрібен для будь-якого іншого поточного випуску, будь ласка, опублікуйте коментар, і я постараюся зробити все можливе.
Щоб встановити, відкрийте термінал і:
sudo apt-add-repository ppa: izx / askubuntu sudo apt-get update sudo apt-get install libnotify-bin
Патч notify-send
включає два нові комутатори, -p
(або - print-id ) та -r
(або - замінити ідентифікатор ). --help
Описує їх як:
-p, --print-id Друк ідентифікатора сповіщення. -r, --replace-id = REPLACE_ID Ідентифікатор повідомлення, яке потрібно замінити.
-p
, кожен notify-send
поверне ідентифікатор N (число / ціле число).notify-send
з -r N
замінить попередню повідомлення негайно .Наприклад, для bash ви можете зберегти ідентифікатор з notify-send -p ...
допомогою:
NID=$(notify-send -p "MESSAGE-1")
а потім замініть його на:
notify-send -r $NID "MESSAGE-2"
Ви можете рекурсивно використовувати в скрипті і -p і -r , якщо змінна -r ініціалізується на 0 на початку.
Ось простий скрипт, який показує сповіщення, що рахують від 0 до 100 через інтервали на півсекунди:
#! / bin / bash
NID = 0
для i в {0..100..10} робити NID = $ (сповістити-надіслати -p -r $ NID $ i) сон 0,5 зроблено
Ви можете використовувати підказку "синхронний", щоб створити повідомлення "підтвердження", яке замінить попередні повідомлення про підтвердження. Наприклад:
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
було саме те, що мені було потрібно. Дякую за цю відповідь. Також для посилання на документацію
X-ref:
Як змусити нове Повідомлення в noti-osd з'являтися, не чекаючи, поки вийде попереднє?
без патчів можна просто обійтися
#!/bin/bash
for i in {0..100..10}
do
killall notify-osd
notify-send "testing" $i
sleep 1
done
Закладка:
Як використовувати "сповіщення-відправлення", щоб негайно замінити наявне сповіщення?
Надсилає повідомлення про помилку-osd (2592): Операція не дозволена. Що це означає?
Це може означати, що привілеї недостатньо вимагають:
sudo killall notify-osd
notify-osd(2592): Operation not permitted
. Що це означає?
Я створив простий скрипт python, який працює майже так само, як notify-send, але має підтримку --replaces-id
.
веб: https://github.com/phuhl/notify-send.py
Сценарій python для надсилання сповіщень на робочому столі з оболонки.
Libnotify є частиною багатьох сценаріїв у світі Linux. Він використовує багато визначених функцій специфікації Настільних повідомлень і робить їх доступними для скриптів оболонок. Однак це не дозволяє замінити існуюче повідомлення на replaces-id
. Це відома помилка з 2008 року та має виправлення з 2012 року. Патч все ще не знаходиться за течією (2018).
Цей скрипт python використовує пакунок notify2 і відкриває функціональність оболонці.
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
існує. Кожне сповіщення, створене тим самим NAME, замінить усі сповіщення перед ним тим самим 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.
Для відображення сповіщень, навіть якщо 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 "$@" &
Також погляньте на мій демон-сповіщення натхненний Данстом , але з кількома вдосконаленнями, включаючи можливість прозорого фону та центру сповіщень, який зберігає сповіщення.