在 awesome 中,GPG 不使用 gnome 密钥环询问密码

在 awesome 中,GPG 不使用 gnome 密钥环询问密码

我正在使用 Ubuntu 16.04.2 LTS,目前正在尝试超棒的窗口管理器(我还没有自定义超棒的配置文件,而是使用默认的配置文件)。

对我来说不起作用的事情之一是密码短语当前未被 gpg-agent 缓存。

我在 .xsessionrc 文件中完成了以下操作,

# GnuPG agent (avoid repeatedly putting passphrase)
gnupglog="${HOME}/.gnupg/gpg-agent.info"
if (pgrep -u "${USER}" gpg-agent); then
  eval `cat ${gnupglog}`
  eval `cut -d= -f1 ${gnupglog} | xargs echo export`
else
  eval `gpg-agent --enable-ssh-support --daemon`
fi

我看到代理已启动。但是,gpg --decrypt FILE通过终端运行命令后,并没有弹出 UI 对话框,而是通过终端询问我密码。而且它没有被缓存。

如果我使用默认的 Unity dash,gnome 密钥环可以完美运行。您能否建议一些步骤,让 gpg-agent 在 awesome 中运行?

答案1

我找到了问题的根本原因。gpg-agent 应该在调用期间自动设置 $GPG_AGENT_INFO,但它没有设置环境变量。同样,如上文所述,文件 gpg-agent.info 不存在,因此上述代码不起作用。根据 gpg 文档,GPG_AGENT_INFO 应该指向 gpg-agent 套接字文件,后跟 gpg-agent 的 pid,然后是协议(默认值为 1)。这三个字段应该用冒号分隔。

于是我将下面的代码放到我的~/.profile中来解决这个问题(S.gpg-agent文件是gpg-agent启动后创建的socket文件),代码:

if (pgrep -u "${USER}" gpg-agent); then
  export GPG_AGENT_PID=`pgrep -u ${USER} gpg-agent`
  export GPG_AGENT_INFO=${HOME}/.gnupg/S.gpg-agent:${GPG_AGENT_PID}:1
else
  eval `gpg-agent --enable-ssh-support --daemon`
  export GPG_AGENT_PID=`pgrep -u ${USER} gpg-agent`
  export GPG_AGENT_INFO=${HOME}/.gnupg/S.gpg-agent:${GPG_AGENT_PID}:1
fi

我仍然不确定为什么 gpg-agent 无法设置 GPG_AGENT_INFO。

相关内容