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