How can I get gpg-agent to work with ssh keys? The following script that I’ve put in /etc/profile.d sets it up, but I’d like to move my user daemons (such as gpg-agent) over to systemd --user. $ cat gpg-agent.sh #!/bin/sh envfile="${HOME}/.gnupg/gpg-agent.env" if test -f "$envfile" && kill -0 $(grep GPG_AGENT_INFO "$envfile" | cut -d: -f 2) 2>/dev/null; then eval "$(cat "$envfile")" else eval "$(gpg-agent --daemon --enable-ssh-support --write-env-file "$envfile")" fi export GPG_AGENT_INFO I’ve written the following user service, and it should do the same thing, but it doesn’t seem to work: $ cat ~/.config/systemd/user/gpg-agent.service [Unit] Description=GnuPG private key agent Wants=environment.target Before=environment.target IgnoreOnIsolate=true [Service] Type=forking Environment=GPG_ENVFILE=%t/gpg-agent.info ExecStart=/usr/bin/gpg-agent --daemon --enable-ssh-support --use-standard-socket --write-env-file ${GPG_ENVFILE} ExecStartPost=/bin/sh -c "xargs systemctl --user set-environment < ${GPG_ENVFILE}" ExecStopPost=/bim/rm %t/gpg-agent.info Restart=on-abort [Install] WantedBy=default.target Both the script and the service file start gpg, create an environment file, and export the variables. But for some reason, gpg-agent doesn’t store keys or anything if run as a service. I don’t know why. Can anyone help?