Kurztipp: Lösung für Gcr-Prompter-Absturz bei GnuPG
Marvin Gülker · 27.04.2019
Lösung eines Absturzproblems von GnuPG und Pinentry.
Kategorien: Software
GnuPG benötigt seit Version 2 zur Eingabe von Paßwörtern ein gesondertes Eingabeprogramm namens Pinentry. Pinentry gibt es in verschiedenen Varianten, darunter:
- pinentry-curses
- pinentry-gtk-2
- pinentry-gnome3
Bei mir war – aus welchen Gründen auch immer – pinentry-gnome3
installiert, obwohl ich gar kein GNOME3 nutze. Vermutlich habe ich es
einmal installiert, weil ich dachte, daß GNOME3 wohl Gtk3 meint. Das
hat bisher auch immer ganz gut funktioniert. Im Zuge des
Matrix.org-Hacks ist darauf hingewiesen worden, daß man die Nutzung
seiner SSH-Schlüssel besser ausdrücklich autorisieren sollte, wofür
ssh-add(1) die Option -c
zur Verfügung stellt.
Nun setze ich aber nicht den „normalen“ SSH-Agenten ein, sondern die
Ersatzimplementation von GnuPG. Wendet man die -c
-Option dabei an,
fragt auch GnuPG fortan nach der Autorisierung. Dabei gab es bei mir
aber ein Problem: GnuPG hat immer auf dem zuletzt aufgerufenen
Terminal-Fenster per ncurses gefragt. Wurde ein Terminal-Fenster
geöffnet und wieder geschlossen, hing sich das aufgerufene
pinentry-curses sogar ganz auf und verursachte 100% CPU-Auslastung,
bis man es mit kill(1) beendete.
Da ich eigentlich ein GUI-Pinentry benutze, hat mich die Terminalabfrage ohnehin überrascht. Schaut man im Systemlog nach, findet man dort solche Meldungen:
systemd[747]: Started D-Bus User Message Bus. dbus-daemon[3521]: Activating service name='org.gnome.keyring.SystemPrompter' org.gnome.keyring.SystemPrompter[3521]: Unable to init server: Verbindung ist gescheitert:Verbindungsaufbau abgelehnt gcr-prompter[3524]: cannot open display: dbus-daemon[3521]: Activated service 'org.gnome.keyring.SystemPrompter' failed: Process org.gnome.keyring.SystemPrompter exited with status 1 gpg-agent[767]: No Gcr System Prompter available, falling back to curses
pinentry-gnome3 benutzt eine Software namens Gcr-Prompter, und die stürzt mit der Fehlermeldung „cannot open display“ ab. Danach benutzt der GPG-Agent direkt pinentry-curses, das dann seinerseits Probleme mit unterschiedlichen Terminal-Windows hat.
Die Lösung ist einfach: pinentry-gnome3 deinstallieren und stattdessen pinentry-gtk-2 installieren. Dieses Pinentry kommt ohne Gcr-Prompter aus und stürzt bei der Benutzung auch nicht ab. Seitdem funktioniert auch die Nachfrage bei SSH-Schlüsseln wieder ordentlich, d.h. sie zeigt ein GUI-Fenster an.