グラフィカルインターフェイスが必要なシステムサービスに「ディスプレイを開けません」というエラーがあります。

グラフィカルインターフェイスが必要なシステムサービスに「ディスプレイを開けません」というエラーがあります。

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問題が解決します。)

関連情報