2017-07-30 13 views
0

私はemacsデーモンを起動するためにsystemdのユーザスペースにサービスファイルを書きました。これはかなりうまくいく。しかし、emacsclientの起動時に私は日記ファイルを復号化しました。そのために私はgpg-agentを実行しています。通常、emacsが起動すると、pineentry-gtkがポップアップし、自分の秘密鍵のパスワードを入力するよう促します。しかし、システム変数$ SSH_AUTH_SOCKET、$ GPG_AGENT_INFO、SSH_AGENT_PIDは知られていません。したがって、pineentry-gtkはポップアップしません。システムarroundからsystemdをフィードするためのいくつかのアプローチが固執しました。私は、絶対パスを入れないダイナミックなアプローチを使いたいです。

は私がsystemdにEnvironmentFileを定義し、そこに

SSH_AUTH_SOCKET=${SSH_AUTH_SOCKET} 

を入れて、emacs.sevice内のファイルが含まれています。ここで調査すると、 thisというリンクが見つかりました。これが真実であるとは想像できません。つまり、サービス/ユニットファイルの環境設定は、環境ファイルに設定することとは別の話です。彼らはお互いを見ることはできません。どのような意味がe環境ファイルになりますか?

次のステップでは、ログイン時のソース変数〜/ .bash_profileをこのようにインポートします。

systemctl --user import-environment GPG_AGENT_INFO 
systemctl --user import-environment SSH_AUTH_SOCKET 
systemctl --user import-environment SSH_AGENT_PID 

ログイン後、私はsystemdが環境変数を持っているかどうかを調べました。

systemctl --user show-environmet 

DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus 
GPG_AGENT_INFO=${GPG_AGENT_INFO} 
HOME=/home/xxxx 
LANG=de_DE.UTF-8 
LOGNAME=xxxx 
PATH=/home/xxxx/bin:~/.emacs.d/shell-scripts: ......... 
AUTH_SOCK=${SSH_AUTH_SOCKET} 
USER=xxxx 
XDG_RUNTIME_DIR=/run/user/1000 

しかし、systemd環境内でemacsデーモンを起動すると、同じ症状が表示されます。

次のステップでは、このようにunit/serviceファイルに直接変数をインポートします。

[Unit] 
Description=Emacs: the extensible, self-documenting text editor 

[Service] 
# loading default environment for systemd in user space 
EnvironmentFile=%h/.config/systemd/xxxx-default-evironment.env 

Type=forking 
ExecStartPre=/bin/systemctl --user import-environment SSH_AUTH_SOCKET 
ExecStart=/usr/bin/emacs --daemon 
ExecStartPost=/bin/systemctl --user set-environment SSH_AUTH_SOCK=${SSH_AUTH_SOCK} 
ExecStop=/usr/bin/emacsclient --eval "(kill-emacs)" 

Restart=always 

[Install] 
WantedBy=non-graphical.target 

このアプローチでも成功しません。ところで、システムシステム(D)のいくつかの環境変数を公開することは非常に難しいとは信じられません。

すべての回答は大歓迎です。

おかげ フォーク

+0

あなたはhttps://github.com/purcell/exec-path-from-shellパッケージを使用して環境変数をインポートしようとしたことがありますか? –

答えて

0

のssh-agent/GPG-agentを起動し、ファイルへのenv VARSをダンプしますキーチェーンと呼ばれる素敵なユーティリティがあります。シェルは、ファイルを取得するためにファイルを取得するだけでよく、Emacsのような他のプログラムは、ファイルを解析してヴァルスを取得することができます。 Emacsの場合、Melpaにはキーチェーン環境パッケージがあります。

# .bash_profile 
type keychain >&/dev/null \ 
    && keychain --agents ssh 

# .bashrc 
[ -f $HOME/.keychain/$HOSTNAME-sh ] \ 
    && . $HOME/.keychain/$HOSTNAME-sh 

;; init.el 
(when (require 'keychain-environment nil 'noerror) 
    (keychain-refresh-environment)) 
関連する問題