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

在KDE Plasma 5中如何定期解析托盘通知并触发外部命令?

在KDE Plasma 5中如何定期解析托盘通知并触发外部命令?

我来帮你梳理一个可行的方案,刚好适配你需要的「定期扫描通知历史、匹配关键词后触发命令」的需求——毕竟系统自带的单事件绑定命令确实不够灵活,没法覆盖多来源的通知。

核心思路

KDE Plasma的通知历史是通过DBus接口对外暴露的,我们可以用命令行工具调用这个接口获取最近的通知,再用脚本解析内容、匹配关键词,最后通过cron定期运行这个脚本就行。

步骤1:编写解析通知的脚本

首先你需要安装两个工具:qdbus(KDE自带的DBus命令行工具,一般默认就有)和jq(用来解析JSON格式的通知数据,需要手动安装)。比如在Debian/Ubuntu系可以跑sudo apt install jq,openSUSE用sudo zypper install jq。

然后创建一个脚本(比如notification_parser.sh),内容如下:

#!/bin/bash

# 配置部分
KEYWORD="VERY_IMPORTANT_MSG!!!!!!"       # 要匹配的关键词
TRIGGER_COMMAND="echo '检测到重要通知,已触发命令' >> ~/notification_trigger.log"  # 触发的外部命令
HISTORY_COUNT=10                          # 每次扫描最近N条通知
PROCESSED_IDS_FILE=~/.processed_notification_ids  # 存储已处理过的通知ID,避免重复触发

# 初始化环境变量(确保脚本能访问KDE的DBus会话)
USER_UID=$(id -u)
export DBUS_SESSION_BUS_ADDRESS="unix:path=/run/user/$USER_UID/bus"
export DISPLAY=:0

# 初始化已处理ID文件
[ ! -f "$PROCESSED_IDS_FILE" ] && touch "$PROCESSED_IDS_FILE"

# 获取最近的通知历史
NOTIFICATIONS=$(qdbus org.kde.plasma.notifications /Notifications org.kde.plasma.notifications.GetHistory "$HISTORY_COUNT")

# 遍历每条通知,检查匹配情况
echo "$NOTIFICATIONS" | jq -r '.[] | "\(.id)|\(.summary)|\(.body)"' | while read LINE; do
    # 拆分通知ID、标题、内容
    NOTIFICATION_ID=$(echo "$LINE" | cut -d'|' -f1)
    NOTIFICATION_SUMMARY=$(echo "$LINE" | cut -d'|' -f2)
    NOTIFICATION_BODY=$(echo "$LINE" | cut -d'|' -f3)

    # 跳过已经处理过的通知
    if grep -q "^$NOTIFICATION_ID$" "$PROCESSED_IDS_FILE"; then
        continue
    fi

    # 检查标题或内容是否包含关键词
    if [[ "$NOTIFICATION_SUMMARY" == *"$KEYWORD"* || "$NOTIFICATION_BODY" == *"$KEYWORD"* ]]; then
        # 执行触发命令
        eval "$TRIGGER_COMMAND"
        # 标记该通知为已处理
        echo "$NOTIFICATION_ID" >> "$PROCESSED_IDS_FILE"
    fi
done

给脚本加上可执行权限:

chmod +x ~/notification_parser.sh

步骤2:测试脚本

先手动发一条测试通知:

notify-send "VERY_IMPORTANT_MSG!!!!!!"

然后运行脚本:

~/notification_parser.sh

之后查看日志文件~/notification_trigger.log,如果里面有新增的内容,说明脚本正常工作了。

步骤3:用cron定期运行脚本

现在配置cron让脚本定期执行,比如每5分钟跑一次:

  1. 打开cron编辑界面:
crontab -e
  1. 添加一行任务(注意替换成你的脚本路径):
*/5 * * * * /home/你的用户名/notification_parser.sh
  1. 保存退出即可。

额外说明

  • 如果你的KDE会话的DISPLAY不是:0(比如多显示器或远程桌面),可以在终端里跑echo $DISPLAY获取正确的值,然后修改脚本里的export DISPLAY=:0。
  • 如果你不需要避免重复触发,可以删掉脚本里关于PROCESSED_IDS_FILE的部分,简化逻辑。
  • qdbus获取的通知历史包含所有通知,不管是已读还是未读,完全符合你需要扫描「最近N条通知」的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.16 13:03:11