l0b*_*0b0 3 gnome-keyring linux-mint gnome-shell
当gnome-shellLinux Mint 12 崩溃时,它通常会在几秒钟内再次出现。当它没有时,它似乎需要密钥环守护进程,因为在重新启动后
while true; do DISPLAY=:0 gnome-shell --replace; done &
Run Code Online (Sandbox Code Playgroud)
每次我运行像git pull. 重新启动时如何重新启动密钥环守护程序(如果这就是问题所在)gnome-shell?
小智 12
这应该执行守护程序的干净重启:
gnome-keyring-daemon -r -d
Run Code Online (Sandbox Code Playgroud)
来源:ArchLinux
更新:这些说明可能已过时。它出现在最近的系统上,gnome-keyring 套接字从一个随机目录移动~/.cache/到/run/user/<ID>/keyring/(至少在 Debian Jessie 上),所以简单的重启就足够了。
这有点棘手,因为 gnome-keyring-daemon 在您的会话开始之前设置唯一的环境参数,并且此环境用于通过套接字访问守护程序。环境会复制到每个应用程序,因此无法重新设置所有环境变量。有一种方法涉及手动重新启动守护程序,将旧目录符号链接到新目录(因此旧环境仍然有效),然后启动各个服务。
确保没有 gnome-keyring-daemon 正在运行(此命令不应返回 pid,如果返回,则需要将其杀死)
pgrep -f gnome-keyring-daemon
Run Code Online (Sandbox Code Playgroud)清除旧钥匙圈插座
rm -rf ~/.cache/keyring-*
Run Code Online (Sandbox Code Playgroud)启动守护进程 - 我们使用 setid 并重定向 SDTIN、OUT 和 ERR,因此与我们的 shell/tty 没有关联。这将在 ~/.cache/ 中创建一个带有控制套接字的新目录。
setsid /usr/bin/gnome-keyring-daemon </dev/null >/dev/null 2>&1
Run Code Online (Sandbox Code Playgroud)将新的套接字目录符号链接到旧的目录(理想情况下用实际目录替换通配符,但由于我们之前将它们全部删除,因此应该只有一个):
ln -s ~/.cache/keyring-* $GNOME_KEYRING_CONTROL
Run Code Online (Sandbox Code Playgroud)
注意:我没有您的 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
Run Code Online (Sandbox Code Playgroud)
最后这些命令将打印环境变量...你可以忽略它们,只要确保没有套接字连接错误。
另外,如果你想清理旧的套接字,你可以添加一个@reboot执行清理的cron 条目:
find ~/.cache/ -maxdepth 1 -type l -name 'keyring-*' -delete
Run Code Online (Sandbox Code Playgroud)