systemd 서비스를 로드할 때 액세스 표시

systemd 서비스를 로드할 때 액세스 표시

저는 C와 D 언어로 부팅 가능한 서비스를 작성하고 있습니다.

씬 클라이언트가 설정된 사용자 데이터베이스가 있습니다. 다운로드 프로세스 중에 네트워크를 통해 이 데이터베이스에 액세스하고 거기에서 특정 사용자의 MAC 주소에 연결된 데이터를 얻습니다. 실제로 사용자는 두 개 이상의 모니터를 씬 클라이언트에 연결할 수 있습니다. 각 모니터에 대한 데이터도 데이터베이스에서 로드됩니다. xrandr모니터 ID를 알고 원하는 모니터를 한 위치 또는 다른 위치에 설정하는 소스 코드를 사용하여 프로그램을 작성했습니다 . 실제로 로딩 프로세스 중에는 사용할 수 없는 xrandr전역 변수를 사용합니다 .DISPLAY

● myservice-init.service - myservice
     Loaded: loaded (/etc/systemd/system/myservice-init.service; enabled; vendor preset: enabled)
     Active: failed (Result: exit-code) since Thu 2022-05-12 19:15:14 MSK; 55s ago
    Process: 1559 ExecStart=/etc/init.d/myservice-init (code=exited, status=1/FAILURE)
   Main PID: 1559 (code=exited, status=1/FAILURE)

мая 12 19:15:14 ts_d85ed3156a39 systemd[1]: Starting myservice...
мая 12 19:15:14 ts_d85ed3156a39 thinstation[1562]: Can't open display :0
мая 12 19:15:14 ts_d85ed3156a39 systemd[1]: myservice-init.service: Main process exited, code=exited, status=1/FAILURE
мая 12 19:15:14 ts_d85ed3156a39 systemd[1]: myservice-init.service: Failed with result 'exit-code'.
мая 12 19:15:14 ts_d85ed3156a39 systemd[1]: Failed to start myservice.

그러나 Xorg서비스를 살펴보십시오. 데이터가 바로 거기에 있습니다.

~# cat /etc/X11/xinit/xinitrc.d/50-systemd-user.sh

#!/bin/sh

systemctl --user import-environment DISPLAY XAUTHORITY

if command -v dbus-update-activation-environment >/dev/null 2>&1; then
    dbus-update-activation-environment DISPLAY XAUTHORITY
fi

다운로드 후 서비스를 시작했습니다 xorg.service. 하지만 서비스 시작에 이 코드를 추가한 후에도 여전히 오류가 발생합니다.

● myservice-init.service - myservice
     Loaded: loaded (/etc/systemd/system/myservice-init.service; enabled; vendor preset: enabled)
     Active: failed (Result: exit-code) since Thu 2022-05-12 19:08:52 MSK; 18s ago
    Process: 1560 ExecStart=/etc/init.d/myservice-init (code=exited, status=1/FAILURE)
   Main PID: 1560 (code=exited, status=1/FAILURE)

May 12 19:08:52 ts_d85ed3156a39 systemd[1]: Starting myservice...
May 12 19:08:52 ts_d85ed3156a39 thinstation[1564]: dbus-update-activation-environment: error: unable to connect to D-Bus: Unable to autolaun
May 12 19:08:52 ts_d85ed3156a39 thinstation[1570]: Can't open display :0
May 12 19:08:52 ts_d85ed3156a39 systemd[1]: myservice-init.service: Main process exited, code=exited, status=1/FAILURE
May 12 19:08:52 ts_d85ed3156a39 systemd[1]: myservice-init.service: Failed with result 'exit-code'.
May 12 19:08:52 ts_d85ed3156a39 systemd[1]: Failed to start myservice.

방금 응용 프로그램을 실행하면 정확히 올바르게 실행됩니다.

IFace("enp3s0", "e8:5b:d2:11:6a:39", "192.168.0.15")
[Monitor("VGA-1", true, 1280, 1024)]

UPD.

사용자가 로그인할 때 시작되지만 DISPLAY를 사용할 수 없는 사용자 서비스를 만들었습니다.

● myservice-init.service - myservice
     Loaded: loaded (/etc/systemd/user/myservice-init.service; enabled; vendor preset: enabled)
     Active: failed (Result: exit-code) since Thu 2022-05-12 22:31:30 MSK; 8min ago
    Process: 2550 ExecStart=/etc/init.d/myservice-init (code=exited, status=1/FAILURE)
   Main PID: 2550 (code=exited, status=1/FAILURE)

мая 12 22:31:30 ts_d85ed3156a39 systemd[2546]: Started myservice-init.
мая 12 22:31:30 ts_d85ed3156a39 myservice-init[2551]: Can't open display :0.0
мая 12 22:31:30 ts_d85ed3156a39 systemd[2546]: myservice-init.service: Main process exited, code=exited, status=1/FAILURE
мая 12 22:31:30 ts_d85ed3156a39 systemd[2546]: myservice-init.service: Failed with result 'exit-code'.

관련 정보