如何实现点击notify-send通知后启动LibreOffice打开指定电子表格
如何实现点击notify-send通知后启动LibreOffice打开指定电子表格
我来帮你解决这个问题!你遇到的情况是因为notify-send的--action参数并不是直接让按钮执行命令的——它只是给按钮添加一个动作标识,真正的命令执行需要我们去监听通知的动作触发信号才行。下面给你两种可行的解决方案:
方法一:用gdbus监听通知动作(通用方案)
这个方法适用于大多数桌面环境,不需要额外安装特定的通知守护进程。我们可以写一个简单的bash脚本,先发送带动作按钮的通知,再监听动作触发事件来执行命令:
- 创建一个脚本文件(比如
notify-open-spreadsheet.sh),内容如下:
#!/bin/bash # 发送通知并获取通知ID,动作标识设为OPEN_SPREADSHEET,按钮显示文本为"打开表格" NOTIFICATION_ID=$(notify-send "表格通知" "点击下方按钮打开指定电子表格" --action="OPEN_SPREADSHEET:打开表格" --print-id) # 监听通知服务的ActionInvoked信号 gdbus monitor --session --dest org.freedesktop.Notifications --object-path /org/freedesktop/Notifications | while read -r line; do # 检查是否是目标通知的OPEN_SPREADSHEET动作被触发 if [[ "$line" =~ "ActionInvoked" && "$line" =~ "$NOTIFICATION_ID" && "$line" =~ "OPEN_SPREADSHEET" ]]; then # 执行打开表格的命令 libreoffice /blah/spreadsheet.ods # 触发后退出监听 exit 0 fi done
- 给脚本添加执行权限:
chmod +x notify-open-spreadsheet.sh
- 运行脚本就能看到通知,点击按钮就会打开指定的电子表格了。
方法二:用Dunst通知守护进程(更简洁)
如果你使用的是Dunst(一款轻量灵活的通知守护进程),可以直接通过配置文件让它处理动作按钮的命令:
- 打开Dunst的配置文件(通常是
~/.config/dunst/dunstrc或/etc/dunst/dunstrc),添加一条规则:
[rule] appname = "notify-send" summary = "表格通知" action = "OPEN_SPREADSHEET" command = "libreoffice /blah/spreadsheet.ods"
- 重启Dunst生效:
killall dunst; dunst &
- 发送带动作的通知:
notify-send "表格通知" "点击下方按钮打开指定电子表格" --action="OPEN_SPREADSHEET:打开表格"
点击通知按钮后,Dunst会自动执行配置好的命令。
注意事项
- 确保你填写的电子表格路径是绝对路径,避免LibreOffice找不到文件;
- 不同桌面环境的通知守护进程对动作的支持略有差异,如果方法一没反应,可以检查
gdbus monitor的输出,确认信号是否正常触发; - 如果用GNOME Shell,默认的通知守护进程也支持动作监听,方法一同样有效。
备注:内容来源于stack exchange,提问作者user171780
相关产品推荐
相关产品推荐

