그래픽 인터페이스가 필요한 시스템 서비스에 "디스플레이를 열 수 없습니다"라는 오류가 있습니다.

그래픽 인터페이스가 필요한 시스템 서비스에 "디스플레이를 열 수 없습니다"라는 오류가 있습니다.

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문제가 해결됩니다.)

관련 정보