Linux Mint 12 崩溃时,gnome-shell
通常会在几秒钟内重新启动。如果没有,似乎会带走密钥环守护进程,因为在重新启动后
while true; do DISPLAY=:0 gnome-shell --replace; done &
每次我运行诸如 之类的命令时,它都会要求输入密钥密码git pull
。重新启动时如何重新启动密钥环守护程序(如果这就是问题所在)gnome-shell
?
答案1
答案2
更新:这些说明可能已过时。在最近的系统上,gnome-keyring 套接字似乎从随机目录移动到~/.cache/
(/run/user/<ID>/keyring/
至少在 Debian Jessie 上),因此简单的重新启动就足够了。
这有点棘手,因为 gnome-keyring-daemon 在会话启动之前设置唯一的环境参数,并且该环境用于通过套接字访问守护程序。环境被复制到每个应用程序,因此无法重新设置所有环境变量。有一种方法涉及手动重新启动守护进程,将旧目录符号链接到新目录(因此旧环境仍然有效),然后启动各个服务。
确保没有 gnome-keyring-daemon 正在运行(此命令不应返回 pid,如果返回,则需要终止它)
pgrep -f gnome-keyring-daemon
清除旧钥匙圈插座
rm -rf ~/.cache/keyring-*
启动守护进程 - 我们使用setsid并重定向SDTIN、OUT和ERR,因此与我们的shell/tty没有关联。这将在 ~/.cache/ 中创建一个带有控制套接字的新目录。
setsid /usr/bin/gnome-keyring-daemon </dev/null >/dev/null 2>&1
将新套接字目录符号链接到旧套接字目录(理想情况下将通配符替换为实际目录,但由于我们之前将它们全部删除,因此应该只有一个):
ln -s ~/.cache/keyring-* $GNOME_KEYRING_CONTROL
注意:我没有您的 gnome-shell 问题,但是如果您没有从启动 gnome-shell 的位置导出这些变量,您可能需要手动将以下环境变量传递给 gnome-shell:
GPG_AGENT_INFO GNOME_KEYRING_CONTROL SSH_AUTH_SOCK
。您应该能够从 #2 中删除的路径中获取该值(如果您有多个目录,则需要查找最新的目录)。启动其他 gnome-keyring 服务(如果到目前为止一切顺利,它们将使用套接字连接到守护进程并启用其上的服务):
/usr/bin/gnome-keyring-daemon --start --components=pkcs11 /usr/bin/gnome-keyring-daemon --start --components=gpg /usr/bin/gnome-keyring-daemon --start --components=ssh
最后这些命令将打印环境变量...您可以忽略它们,只需确保没有套接字连接错误即可。
另外,如果你想清理旧套接字,你可以添加一个@reboot
cron 条目来进行清理:
find ~/.cache/ -maxdepth 1 -type l -name 'keyring-*' -delete