如何在Ubuntu 22.04中让notify-send通知永久保留(重启后仍存在)?
如何在Ubuntu 22.04中让notify-send通知永久保留(重启后仍存在)?
嗨,我完全懂你的需求——默认的notify-send通知确实是临时的,系统重启后就会消失,因为GNOME的通知系统默认只把通知存在内存或临时存储里。不过有两种实用的方法可以实现你要的持久化效果:
方法一:用Dunst替代默认通知守护进程(推荐)
Dunst是一款轻量级的通知守护进程,原生支持持久化通知配置,操作步骤如下:
- 先安装Dunst:
sudo apt install dunst - 创建并编辑Dunst的配置文件(如果没有就新建):
在配置文件里添加或修改全局设置,开启持久化:mkdir -p ~/.config/dunst nano ~/.config/dunst/dunstrc[global] # 让通知永久保留,直到手动关闭 persist = yes - 替换GNOME的默认通知:
先关闭GNOME的横幅通知(避免和Dunst冲突):
然后把Dunst添加到开机启动项:打开GNOME的「启动应用程序」,添加一条命令gsettings set org.gnome.desktop.notifications show-banners falsedunst,这样每次登录都会自动启动Dunst。
之后用notify-send发的通知就会一直保留在通知列表里,哪怕重启系统,直到你手动点击关闭。
方法二:自定义脚本实现持久化(适合动手能力强的用户)
如果不想替换默认通知守护进程,可以自己写个脚本把通知内容存到文件里,每次登录时重新加载:
- 创建一个脚本文件
persistent-notify.sh:#!/bin/bash # 定义存储通知的目录和文件 NOTIFY_STORAGE="$HOME/.persistent_notifications" mkdir -p "$NOTIFY_STORAGE" # 发送通知并保存到文件 if [ $# -ge 2 ]; then HEADER="$1" BODY="$2" # 发送通知并获取通知ID NOTIFY_ID=$(notify-send -u critical -p "$HEADER" "$BODY") # 把通知信息写入存储文件 echo "$NOTIFY_ID|$HEADER|$BODY" >> "$NOTIFY_STORAGE/active.txt" fi # 重启后恢复未关闭的通知 if [ "$1" = "--restore" ]; then if [ -f "$NOTIFY_STORAGE/active.txt" ]; then while IFS='|' read -r ID HEADER BODY; do notify-send -u critical "$HEADER" "$BODY" done < "$NOTIFY_STORAGE/active.txt" fi fi # 手动清空所有持久化通知 if [ "$1" = "--clear" ]; then rm -f "$NOTIFY_STORAGE/active.txt" notify-send "提示" "所有持久化通知已清空" fi - 给脚本添加执行权限:
chmod +x persistent-notify.sh - 使用方法:
- 发送持久化通知:
./persistent-notify.sh "Header" "Body text" - 开机自动恢复通知:打开「启动应用程序」,添加命令
/path/to/persistent-notify.sh --restore(替换成你脚本的实际路径) - 手动清空通知:
./persistent-notify.sh --clear
- 发送持久化通知:
这个方法的小缺点是,默认通知列表里的“清除所有”按钮不会同步删除存储文件里的内容,需要用脚本的--clear命令来手动清空。
备注:内容来源于stack exchange,提问作者keldorn
相关产品推荐
相关产品推荐

