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コマンドが問題なく端末で実行されるためです。

チェックインしてみると、Emacseshellにも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または他の環境変数をどのように設定しますか?ログインシェルと非ログインシェルの違いは何ですか?もっとあります。

おすすめ記事