ユーザーサービスでは、ユーザーセッションから環境変数を継承できますか?

ユーザーサービスでは、ユーザーセッションから環境変数を継承できますか?

通常、Systemdを使用して開始されたサービスは、ユーザーセッションから継承されていない「クリーン」環境を提供します。これは意図的に設計されており、良いデフォルトです。

しかし、私は自分自身のためにいくつかのサービスを書いています(例えば~/.config/systemd/user/foo.serviceXDG_DATA_HOME

環境変数の値を各サービスにハードコードしたくありません。

私はsystemdに私はするユーザーサービスが開始される環境を継承したいですか?

それとも、少なくとも(そしておそらくより良い)特定の環境変数が継承するようにホワイトリストに追加できますか?

現在、私の環境変数はPOSIXシェルスクリプトで構成されており、Xとシェル~/.xsessionrc(およびDebian以外の対応するスクリプト)の両方からソースを提供しています。~/.profile

役に立つ場合は、この構成を喜んで移すことになりますが、少し脆弱な~/.pam_environmentハッキングが必要になるでしょう。選択したディスプレイマネージャ(LightDM)に対してOS提供(Debian)設定を設定しているため、システム全体の設定を変更する必要があり、パッケージが完了した後も同期と変更を維持することを心配する必要がありますuser_readenv=0pam_env.so更新されました。

もちろん、このデフォルトを変更するためにDebianパッケージにパッチを送信することはできますが、デフォルトが存在する可能性が高く、自分の利己的なユースケースがそのようなパッチを除外するように説得するのに十分かどうか疑問に思います。

ExecStart=foo -a -b別のオプションはからに変更することですExecStart=sh -c 'exec foo -a -b'。過去にSystemdがプロセストレースを失って正常にシャットダウンしたと思ってfooいましたが、実際にはゼロ以外のシャットダウン状態でクラッシュした問題があったため、これは少し迷惑です。たぶん私は「間違って」、もう一度やり直すことができます。しかし、これはPAM envを使用するよりも混乱しているように感じ、可能であればそれを避けたいと思います。

ベストアンサー1

おすすめ記事