Systemd, 유닛 파일 시작 순서를 변경하시겠습니까?

Systemd, 유닛 파일 시작 순서를 변경하시겠습니까?

아래와 같이 샘플 테스트 서비스를 작성했습니다.

 [Unit]
 Description=Test service

 [Service]
 Type=dbus
 BusName=test.sample
 Restart=on-failure
 ExecStart=/usr/sbin/testbin -n
 StandardOutput=null

 [Install]
 WantedBy=multi-user.target

xorg.service이제 추가한 후에 이 서비스(또는 단위 파일)가 시작되기를 원합니다.

After=xorg.service
Requires=xorg.service

내 서비스 파일의 단위 섹션으로 이동하여 시스템을 재부팅하십시오. 하지만 내 서비스 파일에는 아무런 영향을 미치지 않습니다. 따라서 내 목표는 사용자 세션 이후(등장 이후를 의미함 X) 이 서비스를 시작하는 것입니다. 여기서 누락된 부분이 무엇인지 알려주세요. 아니면 지연할 수 있는 다른 대안이 있나요?

답변1

실제로가지다이라는 단위입니다 xorg.service. 내가 아는 한, 이런 방식으로 X를 실행하는 배포판은 없습니다. 따라서 직접 작성하지 않는 한 xorg.service,그런 유닛이 없어요.

또한 단순히 X 서버 이후(또는 디스플레이 관리자 이후) 서비스를 시작하는 것만으로는 X와 통신하기에 기본적으로 충분하지 않다는 점을 강조하겠습니다.

간단히 말해서, systemd 또는 기타 초기화 시스템은 사용자 GUI 응용 프로그램을 실행하기 위한 것이 아닙니다. 어느 정도 해킹이 가능하다면 확실히 가능하지만 권장하지는 않습니다. 그냥 xinitrc만 사용하세요.

답변2

먼저 @intelfx가 말했듯이 xorg.service가 존재하는지 확인해야 합니다. 내 생각에 더 나은 접근 방식은 그래픽 시스템이 시작될 때 트리거되는 graphic.target을 참조하는 것입니다.

서비스가 사용자 세션에 사용되는 경우 다음 사용을 고려해야 합니다.

systemctl --user enable test.service

이렇게 하면 다른 모든 요구 사항이 충족되면 서비스를 활성화한 사용자가 로그인할 때 서비스가 트리거됩니다. 초기 방법은 사용자가 인증되기 전에 발생할 수 있으므로 사용자 세션 외부에서 발생할 수 있습니다.

모든 사용자에 대해 --user 서비스를 활성화하려면 /etc/systemd/user/default.target.wants에 추가하여 사용자가 옵트아웃하지 않는 한 활성화되도록 할 수 있습니다.

관련 정보