回答:
notify-send
タイムアウトする(または消える)前に既存の通知を置き換える機能はありません。これは既知のバグです。ただし、バグレポートのコメント者が修正するパッチを投稿しました。
PPAの置換を可能にするlibnotify-binパッケージのパッチバージョンを作成しました。現在はUbuntu 12.04専用ですが、現在サポートされている他のリリースで必要な場合は、コメントを投稿してください。利用できるように最善を尽くします。
インストールするには、ターミナルを開き、次の操作を行います。
sudo apt-add-repository ppa:izx / askubuntu sudo apt-get update sudo apt-get install libnotify-bin
パッチにnotify-send
は、2つの新しいスイッチ-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.5秒間隔で0から100までカウントする通知を表示する簡単なスクリプトを示します。
#!/ bin / bash
NID = 0
{0..100..10}のi 行う NID = $(notify-send -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
、値はあなたが望むものなら何でもいいようです。
あなたの最初の通知はそのヒントを使用して作成されている場合と、第二は、同様に、2番目は、すぐに最初に置き換えられます。(ドキュメントの「確認バブル」の列のアニメーションと継続時間を参照してください。)
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-send」を使用して、既存の通知をすぐに置き換えるにはどうすればよいですか?
エラーnotify-osd(2592)を送信します:操作は許可されていません。どういう意味ですか?
特権が不十分なことを意味する場合があります:
sudo killall notify-osd
notify-osd(2592): Operation not permitted
。どういう意味ですか?
notify-sendとほぼ同じ動作をするシンプルなpythonスクリプトを作成しましたが、サポートしてい--replaces-id
ます。
web: https : //github.com/phuhl/notify-send.py
シェルからデスクトップ通知を送信するためのpythonスクリプト。
Libnotifyは、Linuxの世界の多くのスクリプトの一部です。Desktop Notifications Specificationの指定された機能の多くを利用し、シェルスクリプトからアクセスできるようにします。ただし、既存の通知をに置き換えることはできませんreplaces-id
。これは知られているバグ 2008年以降と持っていたパッチのパッチはまだ(2018)ものの、上流れていない2012年以降を。
このpythonスクリプトは、notify2パッケージを利用し、機能をシェルに公開します。
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
存在します。同じ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
これらの2つのスクリプトは、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 "$@" &
Dunstに触発された通知デーモンも見てください。ただし、透明な背景や通知を保存する通知センターの可能性など、いくつかの改善点があります。