Skip to content

GPGのホームディレクトリを変更する

GPGが扱うファイルのディレクトリを変更したい場合は、GNUPGHOME を設定して ~/.local/share/gnupg に変更する。この環境変数が未設定の場合は ~/.gnupg にファイルが作られる。ディレクトリ以下の構造は公式のAgent Configurationに説明があった。

Terminal window
export GNUPGHOME="${XDG_DATA_HOME:-~/.local/share}/gnupg"
mkdir -m 700 -p $GNUPGHOME

また、systemdのユーザーユニットに環境変数を設定したい場合はEnvironパラメータまたはhomectlで設定することが必要なので、gpg-agent.serviceEnvironment パラメータも設定する。

[Service]
Environment=GNUPGHOME=%D/gnupg

ここまでをまとめて homectl で設定してもいい。

XDG Base Directory - ArchWikiにも書いてあるが、鍵の作成等に gpg-agent が必要となるのだけど GNUPGHOME の変更に伴ってエージェントと通信するUNIXドメインソケットのパスが変わってしまう。

Terminal window
$ gpgconf --list-dirs | grep agent-socket
agent-socket:/run/user/60331/gnupg/S.gpg-agent
$ export GNUPGHOME=~/.local/share}/gnupg
$ gpgconf --list-dirs | grep agent-socket
agent-socket:/run/user/60331/gnupg/d.i11o9nniqjp5zmemejdfxw8f/S.gpg-agent

Arch 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-agent

gpg-agent.socket の他にも、用途ごとに ssh, extra, browser などがあるので必要に応じて設定するといい。

[Socket]
ListenStream=
ListenStream=%t/gnupg/d.i11o9nniqjp5zmemejdfxw8f/S.gpg-agent.ssh

余談だが %tsystemdのユニットで利用できる変数で、XDG_RUNTIME_ROOT 相当となる。