Como obter curses de pinagem para iniciar no tty correto?

7

Eu uso gpg-agent para gerenciar identidades PGP e SSH. O agente é iniciado com um script como este

gpg_agent_env="$XDG_CACHE_HOME/gpg-agent.env"

export GPG_TTY="$(tty)"

if ! ps -U "$USER" -o ucomm | grep -q gpg-agent; then
    eval "$({gpg-agent --daemon | tee $gpg_agent_env} 2> /dev/null)"
else
    source "$gpg_agent_env" 2> /dev/null
fi

, que é originado sempre que eu executar um shell interativo. Tudo funciona bem com essa configuração, mas há um problema. Vamos dizer que eu:

  1. abre um terminal (iniciando o agente em segundo plano) e começa a trabalhar
  2. depois de um tempo, abra um segundo terminal
  3. faça uma ação que requeira a inserção de uma frase secreta no segundo terminal

Neste ponto, gpg-agent iniciará pinentry-curses solicitando uma frase secreta, mas fará isso no primeiro terminal, o que resulta em sua saída misturada com o que estava em execução (geralmente um editor de texto) sem nenhuma maneira de retomar o programa ou pare o pinentry (ele começa a usar 100% cpu e eu tenho que matá-lo).

Eu devo estar fazendo algo errado aqui. Alguém já experimentou isso?

Atualização:

Eu descobri que isso acontece apenas para um aviso para desbloquear uma chave SSH, que parece esta , enquanto solicita chaves PGP sempre abrir no tty correto (ou seja, atual).

    
por Rnhmjoj 03.05.2016 / 20:57

1 resposta

7

A página de manual gpg-agent explica na opção --enable-ssh-support que o O protocolo do agente ssh não é capaz de fornecer o nome do tty ao agente, portanto, o padrão é usar o terminal original no qual ele foi iniciado. Antes de executar o comando ssh que requer uma frase secreta em um novo terminal, você precisa digitar

gpg-connect-agent updatestartuptty /bye

no novo terminal para atualizar a visão do agente de qual tty ou display usar.

    
por 04.05.2016 / 08:29