デスクトップ環境をロードする必要がある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. 私は正しい目的を選んだか。そうでなければ何を選ぶべきですか?

ベストアンサー1

おすすめ記事