Como iniciar o daemon de chaveiro após uma falha no shell do gnome?

2

Quando o gnome-shell falha no Linux Mint 12, ele geralmente volta a aparecer dentro de alguns segundos. Quando isso não acontece, parece que leva o daemon de chaveiro com ele, porque depois de reiniciar com

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

ele pede a senha chave toda vez que eu executo comandos como git pull . Como reiniciar o daemon de chaveiro (se esse é o problema aqui) ao reiniciar o gnome-shell ?

    
por l0b0 25.02.2012 / 13:22

2 respostas

7

UPDATE: Estas instruções podem ser obsoletas. Aparece em sistemas recentes os sockets do gnome-keyring movidos de um diretório aleatório em ~/.cache/ to /run/user/<ID>/keyring/ (pelo menos no Debian Jessie), então uma simples reinicialização deve ser suficiente.

É um pouco complicado, já que o gnome-keyring-daemon define parâmetros de ambiente exclusivos antes que sua sessão inicie e esse ambiente é usado para acessar o daemon através de um soquete. O ambiente é copiado para cada aplicativo, portanto, não há como redefinir todas as variáveis de ambiente. Existe uma maneira que envolve reiniciar manualmente o daemon, ligar simbolicamente o diretório antigo ao novo (assim o ambiente antigo ainda funciona) e então iniciar os serviços individuais.

  1. Assegure-se de que não exista nenhum daemon do gnome-keyring em execução (este comando deve retornar nenhum pid, se precisar, é necessário matá-lo)

    pgrep -f gnome-keyring-daemon
    
  2. Limpar soquetes antigos de chaveiro

    rm -rf ~/.cache/keyring-*
    
  3. Iniciar o processo do daemon - usamos o setsid e redirecionamos SDTIN, OUT & ERR, portanto, não há associação com nosso shell / tty. Isto irá criar um novo diretório com socket de controle em ~ / .cache /.

    setsid /usr/bin/gnome-keyring-daemon </dev/null >/dev/null 2>&1
    
  4. Faça um link simbólico do novo diretório de soquete para o antigo (de preferência substitua o caractere curinga pelo diretório atual, mas, como os removemos anteriormente, deve haver apenas um):

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

    NB: Eu não tenho seu problema com o gnome-shell, mas se você não tiver essas variáveis exportadas de onde você inicia o gnome-shell, você precisará passar manualmente as seguintes variáveis de ambiente para o shell do gnome: GPG_AGENT_INFO GNOME_KEYRING_CONTROL SSH_AUTH_SOCK . Você deve ser capaz de derivar o valor do caminho excluído em # 2 (se você tiver vários diretórios, precisará procurar o mais recente).

  5. Inicie os outros serviços do gnome-keyring (eles se conectarão ao daemon usando o soquete e ativarão os serviços nele, se tudo correu bem até agora):

    /usr/bin/gnome-keyring-daemon --start --components=pkcs11
    /usr/bin/gnome-keyring-daemon --start --components=gpg
    /usr/bin/gnome-keyring-daemon --start --components=ssh
    

    Estes últimos comandos imprimirão variáveis de ambiente ... você pode ignorá-los, apenas certifique-se de que não haja erros de conexão de soquete.

Além disso, se você quiser limpar sockets antigos, pode adicionar uma entrada @reboot cron que faz uma limpeza:

find ~/.cache/ -maxdepth 1 -type l -name 'keyring-*' -delete
    
por 04.01.2014 / 04:51
7

Isso deve executar uma reinicialização limpa do daemon:

gnome-keyring-daemon -r -d

Fonte: ArchLinux

    
por 29.10.2015 / 20:22