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쉘이 환경을 올바르게 상속하므로 쉘을 사용하여 명령을 래핑했습니다 .

관련 정보