この質問は繰り返されません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
質問
- ただし、ログアウトして再度ログインすると、Firefoxは起動しません。どんな提案がありますか?
- 私は正しい目的を選んだか。そうでなければ何を選ぶべきですか?