`.profile`을 로드한 후 시스템에서 사용자 서비스를 시작할 수 있습니까?

`.profile`을 로드한 후 시스템에서 사용자 서비스를 시작할 수 있습니까?

나는 systemd를 사용하여 다음에 설명된 대로 Emacs 데몬을 시작하고 있습니다.이맥스 위키.

또한 내 ~/.profile파일을 사용하여 사용자의 TeX Live 설치를 PATH변수에 추가했기 때문에 다음 줄이 포함되었습니다.

PATH="$HOME/.local/texlive/2023/bin/x86_64-linux:$PATH"

분명히 emacs 데몬은 이 줄을 실행하기 전에 시작됩니다. [M-x] getenv [RET] PATHtexlive 디렉토리를 표시하는 것은 PATHemacs가 아는 것의 일부가 아닙니다.

알아채다

systemctl --user show-environment

실행할 올바른 경로를 제공하십시오.

systemctl restart --user emacs

현재 회의 상황을 설명합니다.

.profile사용자 서비스를 시작하기 전에 파일이 실행될 때까지 systemd를 기다리게 하는 방법이 있습니까 ?

답변1

사용자 서비스 환경을 설정하는 표준 방법은 다음과 같습니다.인간 환경.d. 일반적 ~/.config/environment.d/90texlive.conf으로 다음 줄을 포함하는 파일을 만듭니다.

PATH="$HOME/.local/texlive/2023/bin/x86_64-linux:$PATH"

파일은 systemd에 의해 구문 분석되므로 구문이 제한되어 있지만 일반적으로 쉘 호환으로 만들 수 있으므로 해당 줄을 반복하지 않으려면 source파일에서 가져올 수 있습니다. 테스트할 때 .profile하나 만드는 것을 잊지 마십시오 .systemctl --user daemon-reload

systemd의 초기화된 PATH는 쉘이 일반적으로 얻는 것만큼 넓지 않을 수 있으므로 추가 구성 라인이나 파일이 필요할 수 있습니다.

.profilePATH는 systemd 환경에서 어떻게 끝나나요 ? 데스크톱 시작의 일부 부분은 다음과 같은 작업을 수행할 수 있습니다.

systemctl --user import-environment

또는

dbus-update-activation-environment --systemd --all 

답변2

실행을 기다리는 것은 .profile사용자 서비스가 실행 쉘의 하위 프로세스가 아니기 때문에 문제 해결에 도움이 되지 않습니다 ~/.profile.환경 변수 설정은 다음에서 상속될 수 없습니다..

$PATH이를 사용자 정의 하려면 emacs.service서비스 파일에서 수행해야 합니다(또는 파일 대체). 가능하면 섹션 Environment=의 옵션을 사용하십시오 [Service]. 이 옵션은 환경 변수 확장을 수행하지 않으므로 또는 를 Environment=사용할 수 없지만 다음을 사용하여 사용자의 홈 디렉터리를 참조 할 수 있습니다 .$HOME$PATH%h

따라서 Environment=필요한 줄은 다음과 같습니다.

Environment="PATH=%h/.local/texlive/2023/bin/x86_64-linux:%h/bin:/usr/local/bin:/usr/bin:/bin"

관련 정보