Notify-Send

防止“通知發送”堆疊

  • June 27, 2021

我寫了這個腳本,當按下增加音量按鈕以顯示帶有“通知發送”的桌面通知時。

按下按鈕時:

notify-send "Current volume 'pamixer --get-volume'"

問題是通知堆積如山,例如在此處輸入圖像描述

有沒有辦法防止通知堆疊並只顯示最新通知?

通知 api 有一種方法可以指定目前通知的 id,該通知應該更新而不是創建新的彈出視窗,但notify-send不提供此功能。如果你願意使用少量的python,你可以在製作通知時檢索它的id,然後再嘗試更新那個id。將以下 python2 程式碼放入 PATH 中的目錄中的文件中,say mynotify-sendand do chmod +x mynotify-send

#!/usr/bin/python
import argparse, gi
#gi.require_version('Notify', '0.7')
from gi.repository import Notify

def parse_args():
   parser = argparse.ArgumentParser()
   parser.add_argument('-m', '--message', default="body")
   parser.add_argument('-i', '--id', type=int)
   return parser.parse_args()

def run(myid,message):
   Notify.init("mynote")
   obj = Notify.Notification.new("my summary", message)
   obj.set_timeout(60*1000)
   if myid:
       obj.set_property('id', myid)
       obj.show()
       newid = obj.get_property('id')
       print newid
   else:
       obj.show()
       myid = obj.get_property('id')
       print myid

def main():
   options = parse_args()
   run(options.id, options.message)

main()

你也必須安裝python-gobject。當你跑

mynotify-send -m 'message 1'

它應該彈出通知,但也會在標準輸出上列印一個 id。通常這只是計算通知數量的一小部分,例如6. 然後,您可以通過添加此 id 來更改現有彈出視窗中的消息:

mynotify-send --id 6 -m 'message 2'

只要彈出視窗存在,您就可以執行此操作。彈出視窗消失後,下一條消息將獲得一個新的 id,例如7,程序列印的,您將不得不在以後的消息中使用它。因此,基本上在 shell 腳本中,您只需記住程序的輸出並每次都重用它。

引用自:https://unix.stackexchange.com/questions/376071