전역적으로 변수를 정의하는 방법

전역적으로 변수를 정의하는 방법

내 Manjaro에서 시스템 서비스로 설정했습니다 ssh-agent(다음의 지침에 따라).여기). 서비스 자체 외에도 SSH_AUTH_SOCK환경 변수를 로 설정해야 합니다 ${XDG_RUNTIME_DIR}/ssh-agent.socket. 위에서 언급한 지침에는 이를 넣거나 .zshrc이에 상응하는 내용이 나와 있습니다. ssh-agent를 사용해야 할 때 주로 명령줄을 사용하기 때문에 이는 대부분의 애플리케이션에 적합합니다.

그러나 VSCode가 dmenu에서 시작되면 실행되지 않으므로 환경 변수를 .zshrc상속하지 않습니다 . $SSH_AUTH_SOCK따라서 이것이 작동하려면 이 변수를 전역적으로 설정해야 합니다. 보고 있다아치스 위키, (내가 볼 수 있는) 유일한 방법은 을 통해서입니다 pam_env. 그러나 이것은 나에게는 작동하지 않습니다.

SSH_AUTH_SOCK         DEFAULT=${XDG_RUNTIME_DIR}/ssh-agent.socket

, /etc/environment그러나 VSCode는 process.env여전히 변수를 정의하지 않습니다. 나도 시도했다

SSH_AUTH_SOCK           DEFAULT=/run/user/1000/ssh-agent.socket 

하지만 아직 설정되지 않았습니다.

이는 분명히 환경 문제입니다. 마치 .zshrc셸에서 VSCode(런타임) 를 실행하는 것처럼 $SSH_AUTH_SOCK매우 유사한 문제는 다음과 같습니다.여기에 신고하세요하지만 실제로는 해결책이 없습니다.

답변1

해결책:

다음에 추가 /etc/security/pam_env.conf:

SSH_AUTH_SOCK  DEFAULT=${XDG_RUNTIME_DIR}/ssh-agent.socket

기타 유용한 정보:

왜 처음에는 작동하지 않았습니까 /etc/environment?:

/etc/environment~/.pam_environment또는 와 다른 형식을 따릅니다 /etc/security/pam_env.conf.여기에 문서화된 대로:

/etc/environment:

VARIABLE=value

~/.pam_environment그리고 /etc/security/pam_env.conf:

VARIABLE [DEFAULT=value] [OVERRIDE=value]

그래서 형식이 잘못되었습니다.

/etc/security/pam_env.conf다른 두 개 대신에 그것을 사용합니까?:

왜냐하면 그것이 현재와 미래에도 완전히 유효한 유일한 선택이기 때문입니다.

/etc/environment환경 변수를 읽지 않으므로 ${XDG_RUNTIME_DIR}아무런 효과가 없습니다. 의 내용을 하드코딩할 수 있지만 $XDG_RUNTIME_DIR변수(및 해당 디렉터리)는 다음과 같이 표시됩니다.pam_systemd사용자별로 동적으로. 따라서 신뢰할 수 있는 옵션이 아닙니다.

~/.pam_environment동일한 작업을 성공적으로 수행 /etc/security/pam_env.conf하지만 "더 이상 사용되지 않으며 향후 어느 시점에 제거될 예정입니다"(범죄). 따라서 미래에도 사용할 수 있도록 사용해서는 안 됩니다.

방금 떠났다 /etc/security/pam_env.conf. 현재 작동 ${XDG_RUNTIME_DIR}하며 더 이상 사용되지 않습니다.

답변2

내 시스템에서는 /usr/bin/code쉘 스크립트에 지나지 않습니다. 추가 내보내기 문을 추가하여 수정하거나 다른 스크립트에서 호출하여 먼저 필요한 환경 변수를 내보낼 수 있습니다. 예를 들어:

#!/bin/zsh

export SSH_AUTH_SOCK="$XDG_RUNTIME_DIR/ssh-agent.socket"

/usr/bin/code #path to your executable for VSCode

/etc/X11/XsessionLinux 환경의 X11에 대해 이야기하는 경우 X11 세션의 전역 환경 설정은 디렉터리에 있는 파일에서 설정할 수 있으며 더 좋습니다 /etc/X11/Xsession.d.

사용자 설정의 경우 를 사용하거나 $HOME/.xsession재정의합니다 $HOME/.Xsession.$HOME/.xsessionrc

이 파일의 사용은 main /etc/X11/Xsession(적어도 내 Debian 시스템에서는)에 포함됩니다.

관련 정보