需要图形界面的 systemd 服务出现错误“无法打开显示”

需要图形界面的 systemd 服务出现错误“无法打开显示”

我想用 zenify 在启动时发送一个弹出窗口:

zenity --info --text="`hostname -I`" --title="Rpi Local IP" --display=:0.0

这是我的服务文件:

[Unit]
Description=Display IP at boot
After=networking.service graphical.target
Wants=networking.service graphical.target

[Service]
User=pi
Environment=DISPLAY=:0.0
Environment=XAUTHORITY=/home/pi/.Xauthority
ExecStart=/bin/bash -c 'zenity --info --text="`hostname -I`" --title="Rpi Local IP" --display=:0.0'

[Install]
WantedBy=graphical.target

每次都出现错误:

raspberrypi bash[530]: Invalid MIT-MAGIC-COOKIE-1 keyUnable to init server: Could not connect: Connection refused
raspberrypi zenity[530]: cannot open display: :0.0

如果我在开始服务之前添加 10 秒的睡眠时间: ExecStartPre=/bin/sleep 10,一切正常

我的错误在哪里?

谢谢 :) !

答案1

终于成功了,感谢邮政。假设我的服务文件是“boot_ip.service”。首先,不要将该服务创建为系统服务,而是创建为 USER 服务。

这是服务文件~/.config/systemd/user/boot_ip.service

[Unit]
Description=bootIp
PartOf=graphical-session.target

[Service]
ExecStart=/bin/bash -c 'zenity --info --text="`hostname -I`" --title="Rpi Local IP" --display=:0.0'


[Install]
WantedBy=xsession.target

然后创建一个名为~/.config/systemd/user/xsession.target

[Unit]
Description=Xsession running
BindsTo=graphical-session.target

该文件将表明图形环境已准备就绪。

然后创建一个名为的文件.xsessionrc(如果我.xsession按照主题中提到的方式创建文件,我的图形环境就会被破坏,我什至无法进行简单的登录,所以要小心):

systemctl --user import-environment PATH DBUS_SESSION_BUS_ADDRESS
systemctl --no-block --user start xsession.target

一旦用户登录,这个文件就会被执行。正如你所看到的,这个文件将启动xsession.target,这将启动我们的服务boot_ip.service,问题解决了;)。

相关内容