セッション範囲でサービス(またはターゲット)を開始するには?

セッション範囲でサービス(またはターゲット)を開始するには?

xmonad(ウィンドウマネージャ)、emacsデーモン、tmuxセッションなど、デスクトップセッションのほとんどのプロセスを開始するためにsystemdを使用します。

loginctl user-statusセッションの下にいくつかのプロセスしか表示されないように、私のユーザープロセスを一覧表示します。

  Unit: user-1000.slice
        ├─session-5.scope
        │ ├─4740 lightdm --session-child 13 16
        │ ├─5047 systemctl --user --wait start xmonad-systemd-session.target
        │ └─5497 /usr/bin/ssh-agent /usr/bin/im-launch xmonad-systemd-session
        └─[email protected]

ほとんどすべてのプロセスが以下のセッションの外で実行されています[email protected]。これはloginctl session-status、tmuxで実行すると、次のものが提供されることを意味します。

Could not get properties: Caller does not belong to any known session

特定のログインセッションで特定のサービスを開始するようにsystemdに指示したいと思います。理想的には、セッション起動スクリプトに次のように書きます。

exec systemctl --user --wait \
    --scope $MY_DESKTOP_SESSION start xmonad-systemd-session.target

しかし、オプションがなく、--scope範囲名を取得する方法がわかりません。

私はlibpam-systemdとdbus-user-sessionを使ってDebian-ish(社内)ディストリビューションでsystemd 240を実行しています。

答え1

systemdがすでに含まれているプロセスの範囲内でサービスを許可しているかどうかはわかりません。 ~によると制御グループインタフェース文書スコープまたはサービスは、プロセスと他のスコープ/サービスの両方を子として持つことはできません。 (または実際には、スライスにサービスとスコープのみが含まれており、サービスとスコープにはプロセスが含まれていることがわかりますが、私のシステムにサービスがあるため、システムはこの文書に従わないようです。[Eメール保護].)

すでにセッションにあるものから開始することで、セッションの範囲内でプロセスを実行できます。 Gnomeでは、Alt + F2またはxterm(セルフサービスとして実行されるgnome-termalではありません)で実行されるコマンドはセッション範囲内で実行されます。プロセス範囲を確保する他の方法はない。また見てくださいこれ

セッション内にサービスをしたい場合があることは明らかです(セッションが終了すると終了し、セッションが複数ある場合は複数のコピーを保持します)。存在しない場合は少し時間がかかると予想されます。作る。

関連情報