私は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)のいくつかの環境変数を公開することは非常に難しいとは信じられません。
すべての回答は大歓迎です。
おかげ フォーク
あなたはhttps://github.com/purcell/exec-path-from-shellパッケージを使用して環境変数をインポートしようとしたことがありますか? –