web-dev-qa-db-ja.com

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

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

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

23
ish

可能ですが、パッチを適用した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には、-p(または-print-id)と-rの2つの新しいスイッチが含まれます。 (または-replace-id)。 --helpは、それらを次のように説明します。

 -p、--print-id通知IDを出力します。
 -r、--replace-id = REPLACE_ID置き換える通知のID。
  • -pの場合、各notify-sendはIDN(数値/整数)を返します。
  • 別のnotify-send-r Nで発行すると、以前の通知が即座に置き換えられます
  • たとえば、bashの場合、次のようにnotify-send -p ...からIDを保存できます。

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

    そしてそれを次のものに置き換えます:

    notify-send -r $NID "MESSAGE-2"
    
  • スクリプトで-p-rの両方を再帰的に使用できます。 -r変数が最初に0に初期化される限り。

  • 以下は、0.5秒間隔で0から100までカウントする通知を表示する簡単なスクリプトです。

    #!/ bin/bash
    NID = 0
    for i for {0..100..10} do NID = $(notify-send -p -r $ NID $ i) sleep 0.5 完了
16
ish

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

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

「x-canonical-private-synchronous」ヒントは、 このドキュメント で指定されています。ヒントを指定するには、-h type:name:valueを使用します。ここでの型はstringで、名前はx-canonical-private-synchronousで、値はあなたが望むものなら何でもいいようです。

したがって、最初の通知がそのヒントandで作成された場合、2番目も同様に、2番目がすぐに1番目を置き換えます。 (「確認バブル」の列のドキュメントの Animations and Durations を参照してください。)

10
Mark L

外部参照:
以前の通知が終了するのを待たずに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
10
george rowell

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

notify-send.py

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

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

Libnotifyは、Linuxの世界の多くのスクリプトの一部です。 Desktop Notifications Specificationの指定された機能の多くを利用し、シェルスクリプトからアクセスできるようにします。 notは行いますが、既存の通知をreplaces-idに置き換えることはできます。これは、2008年以降の既知の bug であり、2012年以降の patch です。ただし、パッチはまだアップストリームではありません(2018)。

この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がブロックされる可能性があります。末尾の&で呼び出すのが最適です。

Installation

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

5
user3637541