데스크탑 환경을 로드해야 하는 Systemd 사용자 서비스에 대한 적절한 대상을 선택하기로 한 결정

데스크탑 환경을 로드해야 하는 Systemd 사용자 서비스에 대한 적절한 대상을 선택하기로 한 결정

이 질문은 반복되지 않습니다Systemd는 시작 후 스크립트를 실행합니다. GUI가 준비되었나요? - Unix 및 Linux 스택 교환이는 올바른 대상을 현명하게 선택하는 것과 관련이 있지만 Url은 최종 결과에 불과하기 때문입니다. 이 질문은 대상 선택 시 의사 결정을 강조하기 위해 고안되었습니다.

GUI 애플리케이션 실행 경험

Ubuntu 20.04에서 환경 변수를 정의하지 않고 이러한 GUI 서비스를 성공적으로 실행했습니다. Linux Mint 20.3에 문제가 있습니다. 그 이유는 마땅한 타겟이 없기 때문인 것 같아요. 예를 들어 다음 명령은 Ubuntu에서 성공적으로 실행됩니다.

[Unit]
Description=Browser Service

[Service]
ExecStart=firefox
Type=simple
Restart=on-failure
RestartSec=10
SyslogIdentifier=BrowserService
# Refer: [Adjust or silence a systemd service’s logging levels](https://www.ctrl.blog/entry/systemd-log-levels.html)
StandardOutput=null
StandardError=null

[Install]
WantedBy=graphical-session.target # Ubuntu

  • 시스템 정보: 커널: 5.4.0-94-generic x86_64-bit: 64 컴파일러: gcc v: 9.3.0 데스크톱: Cinnamon 5.2.7 Distro: Linux Mint 20.3 Una 기본: Ubuntu 20.04 Focus

  • 왜냐하면 사용자 단위는 시스템 단위나 다른 사용자의 단위를 참조하거나 의존할 수 없기 때문입니다. 모든 사용자 대상 단위 파일을 나열합니다.

$ find   /usr/lib/systemd/user   ~/.local/share/systemd/user   /etc/systemd/user   ~/.config/systemd/user   -type f -name '*.target' | sort
find: ‘/home/nikhil/.local/share/systemd/user’: No such file or directory
/home/nikhil/.config/systemd/user/default.target
/usr/lib/systemd/user/basic.target
/usr/lib/systemd/user/bluetooth.target
/usr/lib/systemd/user/default.target
/usr/lib/systemd/user/exit.target
/usr/lib/systemd/user/gnome-session-failed.target
/usr/lib/systemd/user/gnome-session-initialized.target
/usr/lib/systemd/user/gnome-session-manager.target
/usr/lib/systemd/user/gnome-session-pre.target
/usr/lib/systemd/user/gnome-session-shutdown.target
/usr/lib/systemd/user/gnome-session.target
/usr/lib/systemd/user/[email protected]
/usr/lib/systemd/user/gnome-session-wayland.target
/usr/lib/systemd/user/[email protected]
/usr/lib/systemd/user/gnome-session-x11-services.target
/usr/lib/systemd/user/gnome-session-x11.target
/usr/lib/systemd/user/[email protected]
/usr/lib/systemd/user/graphical-session-pre.target
/usr/lib/systemd/user/graphical-session.target
/usr/lib/systemd/user/gsd-a11y-settings.target
/usr/lib/systemd/user/gsd-color.target
/usr/lib/systemd/user/gsd-datetime.target
/usr/lib/systemd/user/gsd-housekeeping.target
/usr/lib/systemd/user/gsd-keyboard.target
/usr/lib/systemd/user/gsd-media-keys.target
/usr/lib/systemd/user/gsd-power.target
/usr/lib/systemd/user/gsd-print-notifications.target
/usr/lib/systemd/user/gsd-rfkill.target
/usr/lib/systemd/user/gsd-screensaver-proxy.target
/usr/lib/systemd/user/gsd-sharing.target
/usr/lib/systemd/user/gsd-smartcard.target
/usr/lib/systemd/user/gsd-sound.target
/usr/lib/systemd/user/gsd-usb-protection.target
/usr/lib/systemd/user/gsd-wacom.target
/usr/lib/systemd/user/gsd-wwan.target
/usr/lib/systemd/user/gsd-xsettings.target
/usr/lib/systemd/user/paths.target
/usr/lib/systemd/user/printer.target
/usr/lib/systemd/user/shutdown.target
/usr/lib/systemd/user/smartcard.target
/usr/lib/systemd/user/sockets.target
/usr/lib/systemd/user/sound.target
/usr/lib/systemd/user/timers.target
  • 활동 단위 파일은 다음과 같습니다.
$ systemctl --user list-units --type target --state active
  UNIT           LOAD   ACTIVE SUB    DESCRIPTION     
  basic.target   loaded active active Basic System    
  default.target loaded active active Main User Target
  paths.target   loaded active active Paths           
  sockets.target loaded active active Sockets         
  timers.target  loaded active active Timers          

LOAD   = Reflects whether the unit definition was properly loaded.
ACTIVE = The high-level unit activation state, i.e. generalization of SUB.
SUB    = The low-level unit activation state, values depend on unit type.

5 loaded units listed.

Systemd User Service Unit을 사용하여 Firefox를 시작하고 싶습니다. target 을 사용할 수 있다고 가정합니다 /usr/lib/systemd/user/graphical-session.target.

cat /usr/lib/systemd/user/graphical-session.target

[Unit]
Description=Current graphical user session
Documentation=man:systemd.special(7)
Requires=basic.target
RefuseManualStart=yes
StopWhenUnneeded=yes

그러나 이것이 올바른 목표인지는 확실하지 않습니다.

$ cat /home/nikhil/.config/systemd/user/Browser.service

[Unit]
Description=Browser Service

[Service]
ExecStart=firefox
Type=simple
Restart=on-failure
RestartSec=10
SyslogIdentifier=BrowserService
# Refer: [Adjust or silence a systemd service’s logging levels](https://www.ctrl.blog/entry/systemd-log-levels.html)
StandardOutput=null
StandardError=null

[Install]
WantedBy=graphical-session.target

서비스 파일을 활성화하고 systemd user-demon을 다시 로드했습니다.

$ ls -lA /home/nikhil/.config/systemd/user/graphical-session.target.wants/
total 0
lrwxrwxrwx 1 nikhil 49 Jan 14 13:30 Browser.service -> /home/nikhil/.config/systemd/user/Browser.service

$ systemctl --user daemon-reload

질문

  1. 하지만 로그아웃했다가 다시 로그인하면 Firefox가 시작되지 않습니다. 어떤 제안이 있으십니까?
  2. 나는 올바른 목표를 선택했는가? 그렇지 않다면 무엇을 선택해야 합니까?

관련 정보