그래픽 세션의 일부로만 실행되는 시스템 사용자 서비스를 작성하는 방법은 무엇입니까?

그래픽 세션의 일부로만 실행되는 시스템 사용자 서비스를 작성하는 방법은 무엇입니까?

성공적인 그래픽 데스크톱 로그인 후 일부 프로그램(예: Gnome 또는 Xmonad)을 자동으로 시작하고 로그아웃 시 자동으로 중지하고 싶습니다. ~/.config/systemd/user/synergys.service위의 작업을 올바르게 수행하도록 파일을 어떻게 변경할 수 있습니까 ?

이제 서비스를 활성화한 후 에 따르면 journalctl --user로그인할 때 서비스가 시작하려고 시도하지만 실패합니다.

Invalid MIT-MAGIC-COOKIE-1...

나는 이것이 기본적으로 표시될 수 없다는 것을 의미한다고 생각합니다. 로그인 후 수동으로 시작하면 괜찮습니다. WantedBy=default.targetGUI 로그인에만 국한되지 않고 텍스트 로그인에서도 서비스가 트리거되기 때문에 서비스가 표시되기 전에 너무 일찍 시작되는 것 같습니다.

나는 이것을 시도했지만 graphical-session.target소용이 없었습니다. 이것은 우분투 20.04에 있습니다.

[Unit]
Description=Synergy Server

[Service]
ExecStart=/usr/bin/synergys --no-daemon --no-tray --address :: --serial-key XXXX --enable-crypto
Restart=always
RestartSec=3

[Install]
WantedBy=default.target

프로그램을 데스크톱 세션 "시작" 프로그램으로 수동으로 실행할 수 있다는 것을 알고 있지만 이 방법은 실패 시 자동 재시도를 제공하지 않습니다.

답변1

내 사용자 서비스가 실행되기 전에 전체 X11 스택이 시작되는 그래픽 세션 후에 실행되는 X11 서비스를 등록하려는 비슷한 사용 사례가 있습니다.

X11 프로그램은 서비스 환경에 환경 변수를 설정해야 합니다 DISPLAY. 그렇지 않으면 시작에 실패합니다. XAUTHORITY불행하게도 어떤 systemd 대상이 이러한 환경 변수를 노출하는지 잘 설명되어 있지 않습니다.

내 GNOME 데스크탑에서 내 서비스가 다음으로 실행되도록 지정할 수 있습니다.graphical-session.target

[Install]
WantedBy=graphical-session.target

또한보십시오:https://superuser.com/q/759759/194998

답변2

다음 방법을 시도해 보셨나요?

[Unit]
Description=Synergy Server
After=graphical-session.target
BindsTo=graphical-session.target
PartOf=graphical-session.target
Requisite=graphical-session.target
ConditionEnvironment=DISPLAY
ConditionEnvironment=XAUTHORITY

[Service]
ExecStart=/usr/bin/synergys --no-daemon --no-tray --address :: --serial-key XXXX --enable-crypto
Restart=always
RestartSec=3

[Install]
WantedBy=graphical-session.target
  1. systemctl --user daemon-reload
  2. systemctl --user enable --now <the service unit>
  3. (2)가 유효한 경우 로그아웃한 다음 다시 로그인하면 GUI가 자동으로 시작됩니다.

@당김음

이는 Gnome 로그인 세션에서는 작동하지만 xmonad 로그인 세션에서는 서비스가 시작되지 않기 때문에 xmonad 로그인 세션에서는 작동하지 않습니다.

설정이 심볼릭 링크 xmonad와 제대로 통합되었는지 systemd, 특히 있는 그대로 확인해야 합니다 . 다음을 참조하세요.display-manager.serviceman systemd.special


첨부된:

  • 아래 줄 중 일부는 [Unit]필요하지 않을 수도 있지만 더 명확하게 하기 위해 해당 줄에 넣었습니다...
  • 이것이 작동하지 않으면 아이디어가 없습니다.

관련 정보