성공적인 그래픽 데스크톱 로그인 후 일부 프로그램(예: Gnome 또는 Xmonad)을 자동으로 시작하고 로그아웃 시 자동으로 중지하고 싶습니다. ~/.config/systemd/user/synergys.service
위의 작업을 올바르게 수행하도록 파일을 어떻게 변경할 수 있습니까 ?
이제 서비스를 활성화한 후 에 따르면 journalctl --user
로그인할 때 서비스가 시작하려고 시도하지만 실패합니다.
Invalid MIT-MAGIC-COOKIE-1...
나는 이것이 기본적으로 표시될 수 없다는 것을 의미한다고 생각합니다. 로그인 후 수동으로 시작하면 괜찮습니다. WantedBy=default.target
GUI 로그인에만 국한되지 않고 텍스트 로그인에서도 서비스가 트리거되기 때문에 서비스가 표시되기 전에 너무 일찍 시작되는 것 같습니다.
나는 이것을 시도했지만 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
답변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
systemctl --user daemon-reload
systemctl --user enable --now <the service unit>
- (2)가 유효한 경우 로그아웃한 다음 다시 로그인하면 GUI가 자동으로 시작됩니다.
이는 Gnome 로그인 세션에서는 작동하지만 xmonad 로그인 세션에서는 서비스가 시작되지 않기 때문에 xmonad 로그인 세션에서는 작동하지 않습니다.
설정이 심볼릭 링크 xmonad
와 제대로 통합되었는지 systemd
, 특히 있는 그대로 확인해야 합니다 . 다음을 참조하세요.display-manager.service
man systemd.special
첨부된:
- 아래 줄 중 일부는
[Unit]
필요하지 않을 수도 있지만 더 명확하게 하기 위해 해당 줄에 넣었습니다... - 이것이 작동하지 않으면 아이디어가 없습니다.