Emacs는 터미널에서 시작되지 않은 경우 SSH_AUTH_SOCK 환경 변수를 선택하지 않습니다.

Emacs는 터미널에서 시작되지 않은 경우 SSH_AUTH_SOCK 환경 변수를 선택하지 않습니다.

Emacs 24.5.1(소스에서 컴파일됨)은 터미널에서 실행하지 않으면 환경 변수를 선택하지 않습니다. 특히, 셸에서 환경 변수를 "가져오기" 위해 내 프로그램에서 이 작업을 수행합니다..emacs

(setq exec-path-from-shell-variables
      (quote ("PATH" "MANPATH" "INFOPATH" "C_INCLUDE_PATH" "CPLUS_INCLUDE_PATH"
              "LIBRARY_PATH" "LD_LIBRARY_PATH" "SSH_AUTH_SOCK")))
(exec-path-from-shell-initialize)

sshGNOME Keyring의 " ssh-agent"(일명 gnome-keyring-daemon) my .bashrc(내 사용자 쉘은 bash) 를 사용 하려면 잠금 해제된 개인 키를 제공하세요.

if [ -n "$DESKTOP_SESSION" ];then
    eval $(gnome-keyring-daemon --start --components=ssh)
    export SSH_AUTH_SOCK
fi

하지만 Magit에서 원격 관련 작업(예: push또는 pull)을 수행하는 동안 오류가 발생합니다.

fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

*magit-process*버퍼 에서 이는 Emacs가 내 잠금 해제된 개인 키를 볼 수 없다는 것을 의미합니다. 따라서 Emacs는 제공된 소켓을 사용하지 않습니다 SSH_AUTH_SOCK. 동일한 원격 관련 git명령이 아무 문제 없이 터미널에서 실행되기 때문입니다.

체크인을 해보니 Emacs eshell에도 SSH_AUTH_SOCK외부 터미널과 동일한 값이 있습니다 bash. 또한 터미널(X 또는 TTY)에서 Emacs를 시작하면 모든 환경 변수가 문제 없이 선택됩니다. 나는 Emacs가 터미널에서 실행될 때 쉘로부터 환경 변수를 상속받는다는 것을 알고 있습니다. 내 질문은 exec-path-from-shell-variables터미널에서 시작하지 않을 때 내 환경 변수(Emacs로 올바르게 "가져온" 것으로 보이는)가 Emacs에서 사용되지 않는 이유는 무엇입니까? 몇 년 동안 Emacs 24.3이 설치된 다른 컴퓨터에서 동일한 설정이 실행되어 왔지만 범인은 최신 Emacs 버전일 수 있다고 생각됩니다.

편집: 내 OS는 Ubuntu 14.04 GNU/Linux를 기반으로 하는 Trisquel 7.0입니다. 저는 주로 LXDE를 사용하는데, 다른 데스크탑 환경에서도 이런 문제가 발생합니다. 터미널 밖에서 Alt+F2(run)을 누르고 를 입력하여 Emacs를 시작합니다 emacs. 터미널에서 를 입력하여 Emacs를 시작합니다 emacs. 내 환경 변수는 ~/.bashrc. ~/.bashrc관리자, TTY 또는 )를 통해 ssh.

답변1

내 환경 변수는 ~/.bashrc.

그게 당신의 문제입니다. 그러면 환경 변수는 GUI 메뉴에서 시작된 응용 프로그램이 아닌 터미널에서 시작된 응용 프로그램에만 설정됩니다.

나는 로그인 쉘과 비로그인 쉘(대화형 또는 비대화형)의 복잡성을 알고 있으며 ~/.bashrc로그인 방법(예: X, TTY에서 데스크탑 환경 또는 창 관리자에 로그인)에 관계없이 쉘이 실행되고 있는지 확인했습니다. 또는 SSH를 통해).

분명히 당신은아니요로그인 쉘과 비로그인 쉘의 복잡성을 이해합니다. 로그인하면 .bashrc프로그램이 전혀 실행되지 않습니다. 대화형 셸을 시작할 때 실행됩니다.

해결책은 변수를 설정해야 하는 위치, 즉 (일부 디스플레이 관리자(예: GDM)에 의해 호출된 세션 읽기) 또는 (일부 디스플레이 관리자(예: Lightdm)에 의해 호출된 세션 읽기)에서 설정하는 ~/.pam_environment~/.profile입니다 ~/.xsessionrc.

바라보다.bashrc의 대안,환경을 올바르게 설정하세요.,환경 변수를 설정하는 가장 좋은 distro/shell 독립적 방법은 무엇입니까?,X 응용 프로그램이 액세스할 수 있도록 PATH 또는 기타 환경 변수를 어떻게 설정합니까?,로그인 쉘과 비로그인 쉘의 차이점은 무엇입니까?더 많은 것이 있습니다.

관련 정보