Utiliser Seahorse à la place de ssh-agent et gnupg-agent sous Debian

Seahorse est un programme qui remplit trois rôles :

  • Gestionnaire de clés (à la fois clés ssh et clés de chiffrement GPG) 
  • Agent de cache pour les clés ssh ;
  • Agent de cache pour les clés gnupg-agent.

Si l’utilisation de Seahorse dans les deux premiers rôles ne pose aucun problème avec la distribution Debian (sid du 22 mai 2007), il faut faire un peu d’efforts pour la 3e utilisation.

En effet, plusieurs bugs actifs signalent une incompatibilité entre l’installation de gnupg-agent et l’installation de seahorse. Le symptôme est simple : si les deux programment sont exécutés simultanément (avec en particulier seahorse exécuté dans un environnement qui hérite de gnupg-agent, comme c’est le cas par défaut), seahorse meurt (bêtement).

La première solution est relativement simple : il s’agit de ne pas exécuter gnupg-agent alors qu’il est installé. Il suffit (pour ceux qui utilisent la session système, et pas un .xsession personnalisé) d’éditer /etc/X11/Xsession.d/90gnupg-agent, et de l’encadrer par un if [ "0" == "1" ]; then au début et fi à la fin.

La deuxième solution, qui est en fait la plus naturelle, est de ne pas installer du tout gnupg-agent. Bizarrement, c’est également le plus difficile si vous utilisez simultanément KDE et Gnome (ou si vous n’utilisez que l’un des deux), car un des paquets de KDE (à savoir kleopatra) déclare gnupg-agent comme dépendance.

Il serait tout à fait légitime de déclarer gnupg-agent si ce programme était vraiment nécessaire. Mais ce n’est pas le cas, puisque ce dont ce sert kleopatra (l’interface générale de KDE pour divers choses, dont la gestion des clés de kmail) c’est uniquement de la connexion en mode socket avec gnupg-agent, pour laquelle seahorse est parfaitement compatible. Et si ce n’est pas vrai (la compatibilité, j’entends), c’est un bug de seahorse qui pourrait immédiatement être déplacé vers ce paquet (et non pas un bug de kleopatra).

J’ai essayé de convaincre les mainteneurs de KDE de rajouter une alternative à gnupg-agent (il suffit de mettre dans le fichier de contrôle de kleopatra gnupg-agent|seahorse à la place de gnupg-agent dans la ligne des dépendances), mais ça s’est révélé infructueux:

<pusling> then there is no bug ?
<jcdubacq> yes there is ! I cannot install kleopatra without gnupg-agent
<jcdubacq> that is the only bug
<pusling> that's not a bug. that's a feature
<jcdubacq> ?!
<jcdubacq> gnupg-agent is not necessary !
I can prove it since I do not have it installed, and it works ?!
<jcdubacq> All I ask is to acknowledge that seahorse is a good
enough replacement for gnupg-agent
<pusling> I don't feel like I can acknowledge that.

Comme la coopération ne fonctionne pas, il est donc nécessaire d’utiliser des contournements (et une proposition d’inclure dans un fichier texte les contournements a été refusée aussi), d’où cet article. Il suffit de construire un paquet avec equivs, suivant le modèle ici présent :

machine# cd /tmp; cat > gnupg-agent-local.ctl << EOF
Package: gnupg-agent-local
Provides: gnupg-agent
Depends: seahorse
Conflicts: gnupg-agent
Description: Replaces gnupg-agent by seahorse
A package which allows to use seahorse instead of gnupg-agent.
EOF
machine# equivs-build gnupg-agent-local.ctl
machine# dpkg -i gnupg-agent-local_1.0_all.deb

C’est un peu dommage d’avoir à construire des rustines de ce genre, mais ça marche (c’est ce qu’on demande aux rustines). Ça m’évite d’avoir à fabrique à chaque nouvelle version de kleopatra un paquet strictement équivalent ou la manipulation du fichier control était faite (bien que ce ne soit pas si compliqué que ça, merci à dpkg-repack).

None
A comma-separated list of terms describing this content. Example: funny, bungee jumping, "Company, Inc.".