我想用 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
,问题解决了;)。