You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现点击notify-send通知后启动LibreOffice打开指定电子表格

如何实现点击notify-send通知后启动LibreOffice打开指定电子表格

我来帮你解决这个问题!你遇到的情况是因为notify-send的--action参数并不是直接让按钮执行命令的——它只是给按钮添加一个动作标识,真正的命令执行需要我们去监听通知的动作触发信号才行。下面给你两种可行的解决方案:

方法一:用gdbus监听通知动作(通用方案)

这个方法适用于大多数桌面环境,不需要额外安装特定的通知守护进程。我们可以写一个简单的bash脚本,先发送带动作按钮的通知,再监听动作触发事件来执行命令:

  1. 创建一个脚本文件(比如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
  1. 给脚本添加执行权限:
chmod +x notify-open-spreadsheet.sh
  1. 运行脚本就能看到通知,点击按钮就会打开指定的电子表格了。

方法二:用Dunst通知守护进程(更简洁)

如果你使用的是Dunst(一款轻量灵活的通知守护进程),可以直接通过配置文件让它处理动作按钮的命令:

  1. 打开Dunst的配置文件(通常是~/.config/dunst/dunstrc或/etc/dunst/dunstrc),添加一条规则:
[rule]
appname = "notify-send"
summary = "表格通知"
action = "OPEN_SPREADSHEET"
command = "libreoffice /blah/spreadsheet.ods"
  1. 重启Dunst生效:
killall dunst; dunst &
  1. 发送带动作的通知:
notify-send "表格通知" "点击下方按钮打开指定电子表格" --action="OPEN_SPREADSHEET:打开表格"

点击通知按钮后,Dunst会自动执行配置好的命令。

注意事项

  • 确保你填写的电子表格路径是绝对路径,避免LibreOffice找不到文件;
  • 不同桌面环境的通知守护进程对动作的支持略有差异,如果方法一没反应,可以检查gdbus monitor的输出,确认信号是否正常触发;
  • 如果用GNOME Shell,默认的通知守护进程也支持动作监听,方法一同样有效。

备注:内容来源于stack exchange,提问作者user171780

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.16 08:43:11