GPGのホームディレクトリを変更する
GNUPGHOME環境変数の設定
Section titled “GNUPGHOME環境変数の設定”GPGが扱うファイルのディレクトリを変更したい場合は、GNUPGHOME を設定して ~/.local/share/gnupg に変更する。この環境変数が未設定の場合は ~/.gnupg にファイルが作られる。ディレクトリ以下の構造は公式のAgent Configurationに説明があった。
export GNUPGHOME="${XDG_DATA_HOME:-~/.local/share}/gnupg"mkdir -m 700 -p $GNUPGHOMEまた、systemdのユーザーユニットに環境変数を設定したい場合はEnvironパラメータまたはhomectlで設定することが必要なので、gpg-agent.service の Environment パラメータも設定する。
[Service]Environment=GNUPGHOME=%D/gnupgここまでをまとめて homectl で設定してもいい。
Unixドメインソケットの再設定
Section titled “Unixドメインソケットの再設定”XDG Base Directory - ArchWikiにも書いてあるが、鍵の作成等に gpg-agent が必要となるのだけど GNUPGHOME の変更に伴ってエージェントと通信するUNIXドメインソケットのパスが変わってしまう。
$ gpgconf --list-dirs | grep agent-socketagent-socket:/run/user/60331/gnupg/S.gpg-agent
$ export GNUPGHOME=~/.local/share}/gnupg$ gpgconf --list-dirs | grep agent-socketagent-socket:/run/user/60331/gnupg/d.i11o9nniqjp5zmemejdfxw8f/S.gpg-agentArch Linuxでは gnupg パッケージが /usr/lib/systemd/user/gpg-agent.socket を用意してくれているが、これは gnupg/S.gpg-agent を扱うので、変更後のパスで更新しなければならない。なのでsystemd editを使って一部の設定を更新するで行った手順に沿って gpg-agent.socket ユニットのパラメータを更新する。
[Socket]ListenStream=ListenStream=%t/gnupg/d.i11o9nniqjp5zmemejdfxw8f/S.gpg-agentgpg-agent.socket の他にも、用途ごとに ssh, extra, browser などがあるので必要に応じて設定するといい。
[Socket]ListenStream=ListenStream=%t/gnupg/d.i11o9nniqjp5zmemejdfxw8f/S.gpg-agent.ssh余談だが %t はsystemdのユニットで利用できる変数で、XDG_RUNTIME_ROOT 相当となる。