Como posso usar a seguinte caixa de diálogo de solicitação de senha do shell? (GNOMO)

Como posso usar a seguinte caixa de diálogo de solicitação de senha do shell? (GNOMO)

insira a descrição da imagem aqui

Como posso acionar a caixa de diálogo acima a partir de um script de shell que precisa solicitar uma senha?

Já encontrei e uso zenitypara esse fim, embora goste mais do primeiro por razões estéticas (sim, isso às vezes importa ;-).

Alternativa Zenity:

insira a descrição da imagem aqui

zenity --password --title="Enter private passphrase"

Ubuntu 20.04, GTK, GNOME

Responder1

Eu sei que este post tem quase 6 meses, mas ninguém sugeriu usar a ferramenta yad (mais um diálogo). Isto é o que parece:

sim captura de tela

O comando completo é:

password="$(yad --center --width=300 --image=keys.png --entry --hide-text --button=gtk-ok:0 --button=gtk-cancel:1 --title="Authentication required" --text="Enter password:")"

A senha não é exibida na tela quando é digitada (o "--hide-text" faz isso). Os botões são os padrão do gtk "OK" e "Cancelar". Neste exemplo a senha digitada pode ser acessada a partir da variável $password, por exemplo

echo $password

Se o botão cancelar for pressionado, o código de retorno ($?) de yad é 1 (de --button=gtk-cancel:1) e o código de retorno é 0 quando o botão OK é pressionado (de --button=gtk-ok :0).

yad pode ser instalado em versões posteriores do Ubuntu no Software Center, 16.04 requer instalação usando:

sudo apt install yad

A página inicial do yad está aqui: https://sourceforge.net/projects/yad-dialog/

Outros exemplos mostrando como usar o yad podem ser encontrados aqui: https://sourceforge.net/p/yad-dialog/wiki/browse_pages/

Responder2

Acho que a solução correta seria usar pinentry-gnome3. IIRC, é uma dependência degpg

askpass() {
    prompt=$1
    echo -e "SETPROMPT $prompt\nGETPIN\nBYE" | pinentry-gnome3 | grep -E '^D ' | sed 's/D //'
}

password=$(askpass 'Enter your password:')

informação relacionada