GPG-Agent Autostart
Wer GPG zur Verschlüsselung und/oder Signierung von E-Mails nutzt, kennt die regelmäßige Passwortabfrage. Damit man das Passwort nicht bei jedem Aufruf von GPG erneut eingeben muss (sondern z.B. nur alle fünf Minuten), gibt es das Programm gpg-agent, welches das Passwort zwischenspeichert.
Damit gpg-agent genutzt werden kann, muss es jedoch im Hintergrund als Daemon laufen – und das ist in der Praxis leichter gesagt als getan.
Wer einfach nur die Lösung wissen möchte, kann direkt zum letzten Satz springen.
Voraussetzung
Damit gpg-agent überhaupt genutzt wird, muss dies in der ~/.gnupg/gpg.conf stehen:
use-agent
Dies ist in den meisten Standardkonfigurationen bereits der Fall, sodass man sich als Benutzer keine Gedanken darum machen muss.
Der klassische Weg
Bislang war es üblich, den gpg-agent manuell beim Einloggen zu starten (üblicherweise in der ~/.xinitrc):
eval $(gpg-agent --daemon)
Als ich das gesehen habe, war mein erster Gedanke: Warum das eval
? Dies ergibt Sinn, wenn man sich die Manpage von gpg-agent bzw. dessen Ausgabe anschaut:
GPG_AGENT_INFO=/home/sammyshp/.gnupg/S.gpg-agent:804:1; export GPG_AGENT_INFO;
Über diese Umgebungsvariable erfahren andere Programme, wie sie mit gpg-agent kommunizieren können. Das eval
führt die Ausgabe aus, sodass die Umgebungsvariable zur Verfügung steht.
Klingt einfach, aber es gibt ein kleines Problem: Loggt man sich aus, dann wird gpg-agent nicht beendet. Viel schlimmer: Loggt man sich wieder ein, wird eine zweite Instanz gestartet. Laut Manpage ist das nicht gut und man sollte es vermeiden. Also einfach Prüfen, ob bereits eine Instanz läuft? So einfach ist es leider nicht, denn man braucht ja auch die Umgebungsvariable. Deswegen wurden oftmals komplizierte Scripts geschrieben, welche die Ausgabe in einer Datei speichern und ggf. laden.
Der leichte Weg
Ich wollte es einfacher und zuverlässiger haben. An diversen Stellen im Internet habe ich gelesen, dass es die Möglichkeit gibt, gpg-agent on-demand zu starten, also dann, wenn es gebraucht wird. Nach einiger Suche habe ich dann die passende Option --use-standard-socket
gefunden. Die Manpage sagt dazu unter anderem:
Note, that --use-standard-socket is the default on all systems since GnuPG 2.1.
Da habe ich mich gleich gefreut, schließlich nutze ich Arch Linux und dort gibt es immer die aktuellsten Versionen. Aber es ging nicht. Also weiter gelesen:
The default may be changed at build time.
Oh. Aber nutzt Arch nicht soweit wie möglich die Standard-Parameter? Ein Blick in das PGKBUILD zu gnupg hat mir das bestätigt. Woran liegt es dann? Nach einiger Zeit habe ich die Version von gnupg überprüft: 2.0.22. Das ist die aktuelle Version? Ja. Also wurde die Manpage sehr vorausschauend geschrieben.
Die letztendliche Lösung war dann einfach: Einfach use-standard-socket
in die ~/.gnupg/gpg-agent.conf hinzufügen und es funktioniert.