사용자 서비스에서는 사용자 세션에서 환경 변수를 상속받을 수 있나요?

사용자 서비스에서는 사용자 세션에서 환경 변수를 상속받을 수 있나요?

일반적으로 Systemd를 사용하여 시작된 서비스에는 사용자 세션에서 상속되지 않은 "깨끗한" 환경이 제공됩니다. 이는 의도적으로 설계된 것이며 좋은 기본값입니다.

그러나 나는 나 자신을 위해 몇 가지 서비스를 작성 했습니다 (예 ~/.config/systemd/user/foo.service: .XDG_DATA_HOME

환경 변수의 값을 각 서비스에 하드코딩하고 싶지 않습니다.

내가 systemd에게 내가하다사용자 서비스가 시작되는 환경을 상속받고 싶으신가요?

아니면 적어도 (그리고 어쩌면 더 나은) 특정 환경 변수가 상속되도록 화이트리스트에 추가할 수 있습니까?

현재 내 환경 변수는 POSIX 쉘 스크립트로 구성되어 있으며 X와 쉘 ~/.xsessionrc(및 Debian 이외의 해당 스크립트) 모두에서 소스를 제공합니다.~/.profile

도움이 된다면 이 구성을 기꺼이 옮길 의향이 있지만 ~/.pam_environment약간의 취약한 해킹이 필요할 것입니다. 선택한 디스플레이 관리자(LightDM)에 대해 OS 제공(Debian) 구성을 설정 중이므로 시스템 전체 구성을 변경해야 하며 패키지가 완료된 후에도 동기화 및 수정을 유지하는 것에 대해 걱정해야 합니다 user_readenv=0. pam_env.so업데이트되었습니다.

물론 이 기본값을 변경하기 위해 데비안 패키지에 패치를 제출할 수 있지만 기본값이 존재할 가능성이 높으며 내 자신의 이기적인 사용 사례가 그러한 패치를 제외하도록 설득하기에 충분할지 의심됩니다.

ExecStart=foo -a -b또 다른 옵션은 에서 로 변경하는 것입니다 ExecStart=sh -c 'exec foo -a -b'. 과거에 Systemd가 프로세스 추적을 잃어 foo성공적으로 종료되었다고 생각했지만 실제로는 0이 아닌 종료 상태로 충돌한 문제가 있었기 때문에 이는 약간 짜증나는 일입니다. 어쩌면 내가 "잘못"해서 다시 시도할 수도 있습니다. 그러나 이는 PAM env를 사용하는 것보다 더 혼란스러운 느낌이 들며 가능하면 이를 피하고 싶습니다.

관련 정보