成功したグラフィックデスクトップログイン後、一部のプログラム(GnomeやXmonadなど)を自動的に起動し、ログアウト時に自動的に停止したいと思います。~/.config/systemd/user/synergys.service
上記のタスクを正しく実行するようにファイルを変更するにはどうすればよいですか?
これでサービスを有効にした後によれば、journalctl --user
ログイン時にサービスが開始しようとしましたが失敗します。
Invalid MIT-MAGIC-COOKIE-1...
私はこれが基本的に表示されないことを意味すると思います。ログイン後に手動で起動しても大丈夫です。WantedBy=default.target
GUIログインに限定されず、テキストログインでもサービスがトリガーされるため、サービスが表示される前に早すぎるようです。
私はこれを試しましたが、graphical-session.target
役に立ちませんでした。これはUbuntu 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]
必要ないかもしれませんが、より明確にするためにその行に入れました... - これがうまくいかないと、アイデアはありません。