나는 systemd를 사용하여 다음에 설명된 대로 Emacs 데몬을 시작하고 있습니다.이맥스 위키.
또한 내 ~/.profile
파일을 사용하여 사용자의 TeX Live 설치를 PATH
변수에 추가했기 때문에 다음 줄이 포함되었습니다.
PATH="$HOME/.local/texlive/2023/bin/x86_64-linux:$PATH"
분명히 emacs 데몬은 이 줄을 실행하기 전에 시작됩니다. [M-x] getenv [RET] PATH
texlive 디렉토리를 표시하는 것은 PATH
emacs가 아는 것의 일부가 아닙니다.
알아채다
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는 쉘이 일반적으로 얻는 것만큼 넓지 않을 수 있으므로 추가 구성 라인이나 파일이 필요할 수 있습니다.
.profile
PATH는 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"