我正在使用 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。