systemdで環境変数を渡す

systemdで環境変数を渡す

EnvironmentFileオプションではありませんこの回答

環境変数を使用して渡す推奨方法を理解しようとしています。

私は以下を持っていますurxvtd.socket

[Unit]
Description=urxvt deamon (socket activation)
Documentation=man:urxvtd(1) man:urxvt(1)

[Socket]
ListenStream=%t/urxvt/urxvtd-%H

[Install]
WantedBy=sockets.target

これでurxvtd.socketによってurxvtd.socket異なります。Requires

[Unit]
Description=Urxvt Terminal Daemon
Requires=urxvtd.socket

[Service]
# Needs to know socket file location RXVT_SOCKET environment variable.
# Where will it come from?
ExecStart=/usr/bin/urxvtd -o -q

[Install]
WantedBy=default.target

RXVT_SOCKETi3には起動するキーバインディングurxvtc(urxvtクライアント)があるので、i3を起動する前にそれを設定する必要があります。

systemdなしで(例えばxinitrcを使用して)i3 / Xorgを起動し、次のように入力すると.zshenv(ユーザー固有の環境ファイルは常にロードされます。):

export RXVT_SOCKET=${XDG_RUNTIME_DIR}/urxvt/urxvtd-machinename

その後、i3ブートはurxvtcRXVT_SOCKET変数を正しく推測し、そのパスでソケットを見つけます。

ただし、起動(デーモンプロセス)urxvtd.serviceのため、RXVT_SOCKETも必要です。urxvtd

Archwikiでは、環境を次のように設定することをお勧めしますurxvtd.service

...
Environment=RXVT_SOCKET=%t/urxvtd-%H
...

しかし、そこには問題があります。urxvtd.service初期ユーザーが環境変数を設定する必要があるurxvtd.socketときに環境変数がリセットされるのはなぜですか?

.zshenvこれを行うには、i3をリセットする必要があります。これは、単純な環境変数に複数の情報源がある状況です。

urxvtd.service上記の例で設定されたRXVT_SOCKETパスが正しくないことがわかりましたか.zshenv?私のさまざまな事実の根拠の主張を繰り返します。

この問題を処理する最良の方法は何ですか?

urxvtd.socket私はRXVT_SOCKETを次のように設定できると思いました。

[Socket]
Environment=RXVT_SOCKET
ListenStream=%t/urxvt/urxvtd-%H

urxvtd.service依存関係なので、環境変数を取得する方法が必要です。しかし。したがって、urxvtdデーモンはRXVT_SOCKETが設定されていないかのように動作しますがurxvtd.socket

次に、より深く掘り下げてsystemctl --user import-environment RXVT_SOCKET変数をシステム単位で取得する必要があります。本当にこのようなことが起こりますか?その後、インポートが発生したことを確認する必要があります。今後urxvtd.serviceが実行中です。どのように動作しますか?

systemdでXorg / i3を使用している場合は、systemdデバイス間で環境変数を転送する方法が必要です。

この時点で、私は環境変数の伝播要件に対する純粋なシステムソリューションがないと思います。

ExecStartシェルは環境を正しく継承しているため、シェルを使用してコマンドをラップしました。

ベストアンサー1

おすすめ記事