QVINTVS · SCRIBET

Kurztipp: Lösung für Gcr-Prompter-Absturz bei GnuPG

Lösung eines Absturzproblems von GnuPG und Pinentry.

GnuPG benötigt seit Version 2 zur Eingabe von Paßwörtern ein gesondertes Eingabeprogramm namens Pinentry. Pinentry gibt es in verschiedenen Varianten, darunter:

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.