使用 systemd 启动 gpg-agent?

使用 systemd 启动 gpg-agent?

我已经阅读了一些有关 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_INFOGPG_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 页中找到。

相关内容