如何在 gnome-shell 崩溃后启动密钥环守护程序?

如何在 gnome-shell 崩溃后启动密钥环守护程序?

Linux Mint 12 崩溃时,gnome-shell通常会在几秒钟内重新启动。如果没有,似乎会带走密钥环守护进程,因为在重新启动后

while true; do DISPLAY=:0 gnome-shell --replace; done &

每次我运行诸如 之类的命令时,它都会要求输入密钥密码git pull。重新启动时如何重新启动密钥环守护程序(如果这就是问题所在)gnome-shell

答案1

这应该执行守护进程的干净重启:

gnome-keyring-daemon -r -d

来源:ArchLinux

答案2

更新:这些说明可能已过时。在最近的系统上,gnome-keyring 套接字似乎从随机目录移动到~/.cache//run/user/<ID>/keyring/至少在 Debian Jessie 上),因此简单的重新启动就足够了。

这有点棘手,因为 gnome-keyring-daemon 在会话启动之前设置唯一的环境参数,并且该环境用于通过套接字访问守护程序。环境被复制到每个应用程序,因此无法重新设置所有环境变量。有一种方法涉及手动重新启动守护进程,将旧目录符号链接到新目录(因此旧环境仍然有效),然后启动各个服务。

  1. 确保没有 gnome-keyring-daemon 正在运行(此命令不应返回 pid,如果返回,则需要终止它)

    pgrep -f gnome-keyring-daemon
    
  2. 清除旧钥匙圈插座

    rm -rf ~/.cache/keyring-*
    
  3. 启动守护进程 - 我们使用setsid并重定向SDTIN、OUT和ERR,因此与我们的shell/tty没有关联。这将在 ~/.cache/ 中创建一个带有控制套接字的新目录。

    setsid /usr/bin/gnome-keyring-daemon </dev/null >/dev/null 2>&1
    
  4. 将新套接字目录符号链接到旧套接字目录(理想情况下将通配符替换为实际目录,但由于我们之前将它们全部删除,因此应该只有一个):

    ln -s ~/.cache/keyring-* $GNOME_KEYRING_CONTROL
    

    注意:我没有您的 gnome-shell 问题,但是如果您没有从启动 gnome-shell 的位置导出这些变量,您可能需要手动将以下环境变量传递给 gnome-shell: GPG_AGENT_INFO GNOME_KEYRING_CONTROL SSH_AUTH_SOCK。您应该能够从 #2 中删除的路径中获取该值(如果您有多个目录,则需要查找最新的目录)。

  5. 启动其他 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
    

    最后这些命令将打印环境变量...您可以忽略它们,只需确保没有套接字连接错误即可。

另外,如果你想清理旧套接字,你可以添加一个@rebootcron 条目来进行清理:

find ~/.cache/ -maxdepth 1 -type l -name 'keyring-*' -delete

相关内容