スクリプトにnotify-send
を使用して通知を設定しています。唯一の問題は、スクリプトが複数回呼び出されると、すべての通知が通知スタックに追加され、次々に呼び出されるだけであるということです。
画面上のすべての通知をクリアして新しい通知を表示する方法はありますか?
残念ながら、 notify-osd
通知をクリアまたは「却下」することはできません。代わりに Zenity を使用すると、運が良くなる可能性があります。 notify-send よりも より多くのオプション があります。
--timeout
オプションを使用して、数秒が経過した後に通知を閉じることができます。
zenity --info --timeout=5 --title="Test Notification" --text "$(date +%Y%m%d-%H%M%S): My notification"
以前の通知のプロセスIDのリスト(環境変数またはファイル内)を保持し、それらにHUP
シグナルを送信して、新しい通知を表示する前にそれらをクリアすることもできます。
i=0
pids=
for x in $(seq 1 5); do
i=$((i + 1))
zenity --info --title="Test Multiple Notifications" --text "$(date +%Y%m%d-%H%M%S): Notification number $i" &
pids+="$! "
done
sleep 5
for p in $pids; do kill -HUP $p >/dev/null 2>&1; done
i=$((i + 1))
zenity --info --timeout=2 --title="Test Multiple Notifications" --text "$(date +%Y%m%d-%H%M%S): Notification number $i" &
または、新しい通知を表示する前に、すべてのzenity
プロセスを強制終了します。
killall zenity
zenity --info --title="Test Notifications" --text "$(date +%Y%m%d-%H%M%S): My notification" &
または、新しい通知を表示する前に、特定のzenity
プロセスを強制終了します。
ps ho pid,args | grep -i 'zenity.\+--title=test notifications' | sed -e 's/^ *\([0-9]\+\).*$/\1/'
zenity --info --title="Test Notifications" --text "$(date +%Y%m%d-%H%M%S): My notification" &
これは、notify-sendを使用して実際に実行可能です。
notify-send --hint int:transient:1 "Title" "Body"
transient
ヒントを設定することにより、通知の有効期限が切れたり却下されたりしても、通知バーに残りません。
最善のオプションではないかもしれませんが、別の方法があります。notify-osd
プロセスを強制終了して再起動するだけです。次に、通知を公開します。
pkill notify-osd
/usr/lib/x86_64-linux-gnu/notify-osd &
notify-send "Hello!"
残念ながら、これはnotify-send
によって設定された通知では実行できないようです。 notify-send.cのソースコード -を見てください。通知を作成し、パラメータを設定しますが、それへの参照はどこにも保存しません。代わりに、g_object_unref
を呼び出します。これは、 ここ から理解できるように、メッセージとの外部相互作用の可能性を効果的に排除します。したがって、通知に対する高度な管理機能を使用するには、notify-send
(おそらくカスタムアプリケーション)とは異なるツールを使用する必要があります。
目標を達成するために考えられる大雑把なハックは、 xautomation ツールを使用するスクリプトです。 couldは、それらを使用して、すべての通知ポップアップの「閉じる」ボタンを見つけ、それぞれのマウスクリックをシミュレートします。しかし、それはそれほど簡単ではなく、確かにneatソリューションではありません。