「notify-send」を使用して、既存の通知をすぐに置き換えるにはどうすればよいですか?


23

notify-sendデスクトップに通知を表示するために使用し、それを使用して別の通知を表示すると、2番目の通知は最初の通知が消えた後にのみ表示されることに気付きました。

notify-send既存の通知をすぐに別の通知に置き換える方法はありますか?

回答:


16

可能ですが、そうするにはパッチを適用したlibnotifyを使用する必要があります

notify-sendタイムアウトする(または消える)前に既存の通知を置き換える機能はありません。これは既知のバグです。ただし、バグレポートのコメント者が修正するパッチ投稿しました

PPAからパッチを適用したlibnotify-binをインストールする

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    やった

ppa.launchpad.net/izx/askubuntu/ubuntu/dists/trusty/main/…で 404を受け取ります。このリポジトリは古くなっていますか?
vp_arth

1
:あなたは作品が通知-送信好きというのが私のPythonスクリプトを使用することができますgithub.com/phuhl/notify-send.py
user3637541

11

「同期」ヒントを使用して、以前の確認通知を置き換える「確認」通知を作成できます。例えば:

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まさに私が必要としていたものでした。この答えをありがとう。ドキュメントへのリンクもあります
-avk

これは、GNOME ....では動作しません
ヨハネスLemonde

1
これはいくぶん明らかにubuntuでのみ動作します。
bschlueter

10

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。どういう意味ですか?
VedVals

5

notify-sendとほぼ同じ動作をするシンプルなpythonスクリプトを作成しましたが、サポートしてい--replaces-idます。

notify-send.py

web: https : //github.com/phuhl/notify-send.py

シェルからデスクトップ通知を送信するためのpythonスクリプト。

Libnotifyは、Linuxの世界の多くのスクリプトの一部です。Desktop Notifications Specificationの指定された機能の多くを利用し、シェルスクリプトからアクセスできるようにします。ただし、既存の通知をに置き換えることはできませreplaces-id。これは知られているバグ 2008年以降と持っていたパッチのパッチはまだ(2018)ものの、上流れていない2012年以降を。

このpythonスクリプトは、notify2パッケージを利用し、機能をシェルに公開します。

notify-send.pyとnotify-sendの違い

  • In 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.

rootユーザーとしてnotify-send [.py]

通知を表示するには、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に触発された通知デーモンも見てください。ただし、透明な背景や通知を保存する通知センターの可能性など、いくつかの改善点があります。


このソリューションは、ubuntu 18.10で機能しました。他のソリューションはどれもうまくいかないようです。
Dreamcat4
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.