我想在我的 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/