我已经阅读了一些有关 systemd 的内容,但仍然不太清楚如何使用它来自动gpg-agent
在登录时启动。我猜我会使用systemctl --user
,但构建gpg-agent.service
让我不知所措。欢迎任何和所有指针。
答案1
Roland W 的回答在 2014 年可能是正确的,但对于当今版本的 gpg-agent,这种复杂的配置似乎不再必要。至少在 Arch Linux 上,使用 systemd 设置 gpg-agent 就像运行以下命令一样简单:
systemctl --user enable --now gpg-agent.socket
这将导致 gpg-agent 由 systemd 按需启动,并且它将在后台持续运行。
答案2
该gpg-agent
命令会启动守护进程,但使用该守护进程的程序需要设置某些环境变量(GPG_AGENT_INFO
和GPG_TTY
),以便它们知道如何与代理通信。您必须以某种方式将这些变量从服务脚本传播到您的 shell。MAN 页gpg-agent
包含一个代码片段,用于启动守护进程并将 shell 代码片段写入用户主目录中的文件中
gpg-agent --daemon --write-env-file "${HOME}/.gpg-agent-info"
您可以将此行放入 shell 脚本并从服务文件中调用它
[Service]
Type=forking
ExecStart=script-file.sh
<...>
该.gpg-agent-info
文件必须来自每个 shell。MAN 页面建议
if [ -f "${HOME}/.gpg-agent-info" ]; then
. "${HOME}/.gpg-agent-info"
export GPG_AGENT_INFO
fi
GPG_TTY=$(tty)
export GPG_TTY
在您的.profile
文件中执行此操作。有关如何编写 systemd 服务文件的信息可以在 systemd.service MAN 页中找到。