如何强制在notify-osd中显示新的通知而不等待之前的通知退出?

如何强制在notify-osd中显示新的通知而不等待之前的通知退出?

我已经编写了一个脚本(以及指向该脚本的 .desktop 快捷方式)用于启动和停止 xampp...

它检查 xampp 的状态并相应地启动或停止 xampp。

现在我已经分配了一个通知,一旦脚本启动就显示“正在启动 xampp...”或“正在停止 xampp...”,然后当 xampp 启动或停止时,它会显示“Xampp 已启动...”或“Xampp 已停止...”

我已使用通知发送来显示通知,如下面的脚本所示

现在的情况是,即使 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

男人页面通知发送我发现--紧急程度=级别或者-u其中水平为低、正常、临界。

这有什么用处吗?让它变得至关重要吗?

我也尝试使用命令 -notify-send -u=critical"Testing"但那不起作用...它给出了错误- 指定未知紧急程度关键测试。已知紧急程度:低、正常、关键。

或者如果我给出命令notify-send -u=LOW"Testing"它会给我错误缺少 -u 参数

有關嗎??

来自评论的信息,

由于某种原因,这工作的方式很奇怪!它显示了一个对话框,而不是“启动 xampp...”和“停止 xampp...”部分的通知,然后显示“xampp 已启动”或“xampp 已停止”的通知... :/ 对话框应对确定和取消按钮!

在此处输入图片描述

答案1

此漏洞有一个补丁,网址为 -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 更新
sudo apt-get 安装 libnotify-bin

现在您应该已经安装了补丁版的notify-send,现在可以替换和打印id号,因此您可以在shell脚本中只使用一个通知框。该程序现在有-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

编辑这就是它在我的上面显示的...... 在此处输入图片描述

答案2

您可以使用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()

答案3

交叉引用:
如何使用“notify-send”立即替换现有通知?

没有补丁你可以简单地做

#!/bin/bash

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

书签:
如何强制在notify-osd中显示新的通知而不等待之前的通知退出?
如何使用“notify-send”立即替换现有通知?

相关内容