如何使用’notify-send’立即替换现有通知?

当我使用notify-send在桌面上显示通知,然后再次使用它来显示不同的通知时,我注意到第二个仅第一个消失显示。

有没有办法让notify-send立即用另一个通知替换现有通知?

你可以,但你必须使用修补的libnotify来做到这一点

notify-send无法在超时(或消失)之前替换现有通知。 这是一个已知的错误 。 但是,bug报告的评论者发布了一个修补程序来修复它。

从PPA安装修补的libnotify-bin

我已经创建了libnotify-bin包的修补版本,允许在我的PPA中进行替换。 目前仅适用于Ubuntu 12.04,但如果您需要任何其他当前支持的版本,请发表评论,我会尽力使其可用。

要安装,请打开终端并:

 sudo apt-add-repository ppa:izx / askubuntu
 sudo apt-get update
 sudo apt-get install libnotify-bin

如何使用替换function

修补的notify-send包括两个新的开关, -p (或–print-id )和-r (或–replace-id )。 --help将它们描述为:

   -p, -  print-id打印通知ID。
   -r, -  replace-id = REPLACE_ID要替换的通知的ID。
  • 使用-p ,每个notify-send将返回一个ID N (数字/整数)。
  • 使用-r N发出另一个notify-send立即替换先前的通知。
  • 例如,对于bash,您可以使用notify-send -p ...保存ID:

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

    然后将其替换为:

     notify-send -r $NID "MESSAGE-2" 
  • 您可以在脚本中递归使用-p-r ,只要-r变量在开头初始化为0即可。

  • 这是一个简单的脚本,显示以半秒为间隔从0到100计数的通知:

     #!/斌/庆典 
    NID = 0
    我在{0..100..10} 做 NID = $(notify-send -p -r $ NID $ i) 睡0.5 DONE

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

没有补丁,你可以简单地做

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

书签:
如何使用’notify-send’立即替换现有通知?


发送错误notify-osd(2592):不允许操作。 那是什么意思?

这可能意味着特权不足,需要:

 sudo killall notify-osd 

您可以使用“同步”提示创建“确认”通知,该通知将替换先前的确认通知。 例如:

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

本文档中指定了“x-canonical-private-synchronous”提示。 要指定提示,请使用-h type:name:value 。 这里的类型是string ,名称是x-canonical-private-synchronous ,似乎值可以是你想要的任何值。

因此,如果您的第一个通知是使用该提示创建的,第二个通知也是如此,第二个通知将立即替换第一个通知。 (请参阅文档中的动画和持续时间 ,在“确认气泡”栏中。)