Quando não iniciado a partir de um terminal, o Emacs NÃO seleciona a variável de ambiente SSH_AUTH_SOCK

3

Quando eu não inicio a partir de um terminal, o Emacs 24.5.1 (compilado da fonte) não pega minhas variáveis de ambiente. Em particular, para "importar" as variáveis de ambiente do shell, eu tenho no meu .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)

e para fornecer minha chave privada desbloqueada para ssh usando o " ssh-agent " do Keyring do GNOME (também conhecido como gnome-keyring-daemon ) que tenho em meu .bashrc (meu shell de usuário é bash )

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

Mas ao fazer qualquer tarefa relacionada ao controle remoto (por exemplo, push ou pull ) no Magit, recebo o erro

fatal: Could not read from remote repository.

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

no buffer *magit-process* , o que significa que o Emacs não vê minha chave privada destravada e, portanto, que o Emacs não está usando o soquete fornecido por SSH_AUTH_SOCK , porque os mesmos comandos git relacionados ao remoto são executados sem quaisquer problemas em um terminal.

Eu fiz o check-in eshell e SSH_AUTH_SOCK tem o mesmo valor no Emacs que em um terminal externo com bash . Além disso, quando eu inicio o Emacs a partir de um terminal (em X ou TTY), todas as variáveis de ambiente são selecionadas e não há problemas. Eu sei que quando executado em um terminal, o Emacs herda as variáveis de ambiente do shell. Minha pergunta é por que minhas variáveis de ambiente (que aparentemente são "importadas" corretamente para o Emacs em exec-path-from-shell-variables ) usadas pelo Emacs quando eu não as inicio de um terminal? A mesma configuração está trabalhando na minha outra máquina há vários anos com o Emacs 24.3, mas duvido que o culpado seja a versão mais recente do Emacs.

Edit: Meu sistema operacional é o Trisquel 7.0, que é baseado no Ubuntu 14.04 GNU / Linux. Eu costumo usar o LXDE, mas o problema está lá com outros ambientes de desktop também. Fora do terminal, inicio o Emacs pressionando Alt+F2 (Executar) e inserindo emacs . Em um terminal, inicio o Emacs inserindo emacs . Minhas variáveis de ambiente estão definidas em ~/.bashrc . Estou ciente das complexidades de shells de login e não-login (interativas ou não) e verifiquei que meu ~/.bashrc é executado independentemente de como eu efetuo login (por exemplo, em X para um ambiente de desktop ou gerenciador de janelas, um TTY, ou através de ssh ).

    
por Omid 10.05.2015 / 09:46

1 resposta

4

My environment variables are set in ~/.bashrc.

Existe o seu problema. Então suas variáveis de ambiente são definidas apenas em aplicativos que você inicia a partir de um terminal, eles não são configurados em aplicativos iniciados a partir de um menu da GUI.

I am aware of the intricacies of login and non-login shells (interactive or not) and I've checked that my ~/.bashrc is run regardless of how I log in (e.g., in X to a desktop environment or window manager, in a TTY, or through ssh).

Evidentemente, você não está ciente das complexidades dos shells de login e não-login. Seu .bashrc não é executado quando você efetua login. Ele é executado quando você inicia um shell interativo.

A solução é definir suas variáveis onde elas devem ser definidas, ou seja, em ~/.pam_environment ou ~/.profile (que é lido por sessões chamadas por alguns gerenciadores de exibição como o GDM) ou ~/.xsessionrc (que é lido por sessões chamado por alguns gerenciadores de exibição, como o Lightdm).

Veja Alternativa para .bashrc , Como configurar o ambiente , Qual é a melhor maneira de distribuir as variáveis de ambiente? , Como configuro o PATH ou outras variáveis de ambiente para que X apps podem acessá-lo? , Diferença entre o login Shell e Non-Login Shell? e muito mais.

    
por 10.05.2015 / 19:34