`.profile`をロードした後、システムでユーザーサービスを起動できますか?

`.profile`をロードした後、システムでユーザーサービスを起動できますか?

私はsystemdを使用して次の説明に従ってEmacsデーモンを起動しています。Emacs Wiki

また、私の~/.profileファイルを使用してユーザーのTeX LiveインストールをPATH変数に追加したため、次の行が含まれています。

PATH="$HOME/.local/texlive/2023/bin/x86_64-linux:$PATH"

明らかに、emacsデーモンはこの行を実行する前に始まります。[M-x] getenv [RET] PATHtexliveディレクトリを表示することは、PATHemacsが知っているものの一部ではありません。

気づく

systemctl --user show-environment

実行する正しいパスを指定してください。

systemctl restart --user emacs

現在の会議状況を説明します。

.profileユーザーサービスを開始する前にファイルが実行されるまでsystemdを待つ方法はありますか?

答え1

ユーザーサービス環境を設定する標準的な方法は次のとおりです。人間環境.d。通常~/.config/environment.d/90texlive.conf、次の行を含むファイルを作成します。

PATH="$HOME/.local/texlive/2023/bin/x86_64-linux:$PATH"

ファイルはsystemdによって解析されるため、構文は制限されていますが、通常はシェル互換にすることができるため、その行を繰り返さない場合はsourceファイルからインポートできます。テストするときに.profile作成することを忘れないでください。systemctl --user daemon-reload

systemdの初期化されたPATHは、シェルが通常得られるほど広くない可能性があるため、追加の構成行またはファイルが必要になる場合があります。

.profilePATHはsystemd環境でどのように終了しますか?デスクトップの起動の一部では、次のことができます。

systemctl --user import-environment

または

dbus-update-activation-environment --systemd --all 

答え2

実行を待つことは、.profileユーザーサービスが実行シェルの子プロセスではないため、トラブルシューティングには役立ちません~/.profile環境変数の設定は以下から継承できません。

$PATHこれをカスタマイズするには、emacs.serviceサービスファイルで実行する必要があります(またはファイルの置き換え)。可能であれば、セクションEnvironment=のオプションを使用してください[Service]。このオプションは環境変数の拡張を実行しないため、またははEnvironment=使用できませんが、次の方法でユーザーのホームディレクトリを参照できます。$HOME$PATH%h

したがって、Environment=必要な行は次のようになります。

Environment="PATH=%h/.local/texlive/2023/bin/x86_64-linux:%h/bin:/usr/local/bin:/usr/bin:/bin"

関連情報