Kubuntu 22.04中cronjob调用notify-send无法弹出通知问题求助
Kubuntu 22.04中cronjob调用notify-send无法弹出通知问题求助
我之前在Kubuntu 22.04里也踩过一模一样的坑!cron里跑notify-send要么报超时错误,要么啥反应都没有,后来才搞明白是cron的环境变量太精简,缺了通知服务必需的参数。给你几个亲测有效的解决办法:
手动指定环境变量
cron默认没有DISPLAY和DBUS_SESSION_BUS_ADDRESS这两个关键变量,notify-send需要它们才能连接到桌面的通知服务。- 先在你的终端里执行
echo $DBUS_SESSION_BUS_ADDRESS,会得到类似unix:path=/run/user/1000/bus的结果(其中1000是你的用户UID,每个人可能不同,用id -u可以查看自己的UID) - 把这两个变量加到cron命令里,修改后的cron任务应该是这样:
记得把0 * * * * env DISPLAY=:0 DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus notify-send --expire-time=0 --app-name="Test" 'Test text'1000换成你自己的UID哦。
- 先在你的终端里执行
写个自动适配的脚本(更灵活)
要是不想每次换用户或者重启后都要改变量,可以写个小脚本自动获取所需的环境变量:- 创建一个脚本文件,比如
notify-cron.sh,内容如下:#!/bin/bash # 获取当前用户的UID USER_UID=$(id -u) # 设置通知所需的环境变量 export DISPLAY=:0 export DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/${USER_UID}/bus # 执行通知命令 notify-send --expire-time=0 --app-name="Test" 'Test text' - 给脚本加执行权限:
chmod +x notify-cron.sh - 在cron里调用这个脚本(替换成你实际的脚本路径):
0 * * * * /home/your-username/notify-cron.sh
- 创建一个脚本文件,比如
确认cron的运行用户
一定要确保你是用自己的普通用户身份编辑的cron(用crontab -e),而不是用sudo crontab -e编辑root的cron。root用户的DBUS会话和普通用户的完全独立,就算设置了变量也没法弹出普通用户桌面的通知。
备注:内容来源于stack exchange,提问作者BowPark
相关产品推荐
相关产品推荐

