Answers:
notify-send
无法在现有通知超时(或消失)之前替换现有通知。这是一个已知的错误。但是,有关错误报告的评论者已发布了补丁来对其进行修复。
我创建了libnotify-bin软件包的修补版本,该版本允许在我的PPA中进行替换。当前它仅适用于Ubuntu 12.04,但是如果您需要其他任何当前受支持的发行版,请发表评论,我会尽力使其可用。
要安装,请打开一个终端,然后:
须藤apt-add-repository ppa:izx / askubuntu sudo apt-get更新 须藤apt-get install libnotify-bin
该补丁notify-send
包括两个新的开关-p
(或--print-id)和-r
(或--replace-id)。将--help
它们描述为:
-p,--print-id打印通知ID。 -r,-replace-id = REPLACE_ID要替换的通知的ID。
-p
,每个notify-send
将返回ID N(数字/整数)。notify-send
与-r N
将取代之前的通知,立即。例如,对于bash,可以使用以下命令保存ID notify-send -p ...
:
NID=$(notify-send -p "MESSAGE-1")
然后将其替换为:
notify-send -r $NID "MESSAGE-2"
只要在开头将-r变量初始化为0,就可以在脚本中递归使用-p和-r。
这是一个简单的脚本,它以半秒为间隔显示从0到100的通知计数:
#!/ bin / bash
NID = 0
为{0..100..10}中的i 做 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:
如何强制在notify-osd中显示一个新的通知而无需等待较早的通知退出?
没有补丁,你可以简单地做
#!/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
。这意味着什么?
我创建了一个简单的python脚本,其功能几乎与notify-send相同,但是支持--replaces-id
。
网址: https ://github.com/phuhl/notify-send.py
用于从Shell发送桌面通知的python脚本。
Libnotify是Linux世界中许多脚本的一部分。它利用了桌面通知规范的许多指定功能,并使外壳脚本可以访问它们。它不但是允许替换与现有通知replaces-id
。自2008年以来这是一个已知的错误,自2012年以来具有一个补丁。尽管如此,该补丁仍不在上游(2018)。
该python脚本利用notify2包并将功能公开给shell。
notify-send.py -h
显示帮助中,而不是作为提示的参数。对于提示使用--hint
。notify-send.py -r ID
和notify-send.py --replaces-id ID
存在。为了用要替换的通知notify-send.py
返回的ID 替换通知呼叫。notify-send.py
返回新创建的通知的ID。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.
为了显示通知,即使libnotify或
notify-send.py
由root用户使用,这两个脚本很有用。
#!/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 "$@" &