python - 系统服务不执行通知发送

标签 python linux systemd notify-send

我想在我的 python 脚本中为某些事件生成弹出窗口。为此,我正在使用“通知发送”。

subprocess.Popen(['notify-send', "Authentication", "True/False"])

上述命令在终端上执行良好,但当我从 systemd-service 运行它时,它不会生成任何弹出窗口。

当我看到日志时没有错误。

最佳答案

您需要先设置环境变量,以便root可以与当前登录的用户通信并在GUI中发送通知。

在我的例子中,我是这样做的:

[Unit]
Description=< write your description>
After=systemd-user-sessions.service,systemd-journald.service

[Service]
Type=simple
ExecStart=/bin/bash /<path to your script file>.sh
Restart=always
RestartSec=1
KillMode=process
IgnoreSIGPIPE=no
RemainAfterExit=yes
Environment="DISPLAY=:0" "XAUTHORITY=/home/<User name>/.Xauthority"

[Install]
WantedBy=multi-user.target

这里,

RemainAfterExit=yes

在服务文件中提及非常重要。

确保更改所有参数,如描述、用户名和脚本文件路径

另外,通过执行命令确保脚本文件具有可执行权限

sudo chmod +x <path to your script file>.sh

这里我的脚本文件是用 bash 编写的,它使用相同的“通知发送”命令显示通知。

现在 Environment 参数发挥了所有的作用。

您可以阅读有关此行为和所讨论问题的更多信息 overhere .

我当然不知道这些文件的完整工作原理或它是如何工作的,但对我来说,它工作得很好。

所以你可以试一试。

请告诉我这对您的情况是否有效。

关于python - 系统服务不执行通知发送,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49608573/

相关文章:

python - 数字求和练习 | n//= 10 是什么意思

linux - 为什么 time.h 中的 time() 没有对 sys_time 的系统调用?

linux - systemd:24 小时后自动重启服务?

deployment - Capistrano 和 systemd 集成

python - 带有 f 字符串的花括号 - ValueError : Sign not allowed in string format specifier

python - Scrapy:从相对路径构造绝对路径的非重复列表

python - 使用 LDAP 的 Flask 身份验证

linux - 将新的文件系统编译到 Linux 内核中

linux - 如何自动化 HTML 到 PDF 的转换?

python - 重新加载与重新启动 uWSGI 以激活代码更改