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_SOCKET
i3には起動するキーバインディングurxvtc
(urxvtクライアント)があるので、i3を起動する前にそれを設定する必要があります。
systemdなしで(例えばxinitrcを使用して)i3 / Xorgを起動し、次のように入力すると.zshenv
(ユーザー固有の環境ファイルは常にロードされます。):
export RXVT_SOCKET=${XDG_RUNTIME_DIR}/urxvt/urxvtd-machinename
その後、i3ブートはurxvtc
RXVT_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
シェルは環境を正しく継承しているため、シェルを使用してコマンドをラップしました。