私はsystemdを使用して次の説明に従ってEmacsデーモンを起動しています。Emacs Wiki。
また、私の~/.profile
ファイルを使用してユーザーのTeX LiveインストールをPATH
変数に追加したため、次の行が含まれています。
PATH="$HOME/.local/texlive/2023/bin/x86_64-linux:$PATH"
明らかに、emacsデーモンはこの行を実行する前に始まります。[M-x] getenv [RET] PATH
texliveディレクトリを表示することは、PATH
emacsが知っているものの一部ではありません。
気づく
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は、シェルが通常得られるほど広くない可能性があるため、追加の構成行またはファイルが必要になる場合があります。
.profile
PATHは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"