首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >systemd服务未执行通知发送

systemd服务未执行通知发送
EN

Stack Overflow用户
提问于 2018-04-02 17:21:30
回答 3查看 2.4K关注 0票数 3

我想在我的python脚本中为某些事件生成弹出窗口。为此,我使用了'notify-send‘。

代码语言:javascript
复制
subprocess.Popen(['notify-send', "Authentication", "True/False"])

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

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

EN

回答 3

Stack Overflow用户

发布于 2020-05-15 01:08:15

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

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

代码语言:javascript
复制
[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

在服务文件中提到是非常重要的。

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

此外,通过执行以下命令,确保该脚本文件具有可执行权限

代码语言:javascript
复制
sudo chmod +x <path to your script file>.sh

在这里,我的脚本文件是用bash编写的,它使用相同的'notify-send‘命令显示通知。

现在,Environment参数完成了所有的魔术。

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

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

所以你可以试一试。

请让我知道这在你的情况下是否有效。

票数 1
EN

Stack Overflow用户

发布于 2018-04-03 03:47:52

运行图形应用程序需要设置DISPLAY环境变量,该变量将在从命令行界面运行时设置,但在从systemd运行时不会设置(除非显式设置)。

有关此问题的详细信息,请参阅Writing a systemd service that depends on XOrg

我同意一般的建议,即systemd可能不是这项工作的最佳工具。你最好使用桌面环境的“自动启动”功能来运行你的应用程序,这将在你需要的环境中设置正确的设置。

票数 0
EN

Stack Overflow用户

发布于 2021-03-31 06:06:35

如果在cron中为桌面通知运行notify-send,则notify-send会将值发送到dbus。所以它需要告诉dbus连接到正确的总线。可以通过检查DBUS_SESSION_BUS_ADDRESS环境变量并将其设置为相同的值来找到该地址。

从您的运行环境中复制DISPLAY和DBUS_SESSION_BUS_ADDRESS的值,并在Service.Environment部分设置它们

更多关于拱门维基的信息:https://wiki.archlinux.org/index.php/Cron#Running_X.org_server-based_applications

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49608573

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档