aws-vault で gpg のパスフレーズプロンプトが表示されるのがめちゃめちゃ遅い

aws-vault でバックエンドに pass を使っているので aws-vault の実行時に gpg の秘密鍵のパスフレーズの入力プロンプトが表示されるのですが、最近になってからプロンプトが表示されるまで異様に時間がかかるようになりました。

なお、WSL2 環境で systemd は無効、かつ、homebrew(linuxbrew) で色々インストールしています。


この状況が再現した後に ps でプロセスのリストを見てみると↓のプロセスが複数立ち上がっています・・怪しい。

/home/linuxbrew/.linuxbrew/Cellar/dbus/1.14.10/bin/dbus-daemon --syslog --fork --print-pid 4 --print-address 6 --session

試しに pkill dbus-daemon してから aws-vault を実行するとプロンプトがサクッと表示されます。が、そのとき同時に↑のプロセスも作成され、次に aws-vault がプロンプトを表示するときにはめちゃくちゃ時間かかるようになります。

要するに、次の状況です。

  • aws-vault の実行時に dbus-daemon のプロセスが存在するとプロンプトの表示までめちゃめちゃ時間がかかる
  • aws-vault を実行すると dbus-daemon のプロセスが自動で開始する(ゾンビ?)

探せばすぐに原因っぽいものが見つかりました。

https://github.com/99designs/keyring/issues/103

ずいぶん前から存在してた問題のようですが・・わたしのところで発生したのはつい最近です。

そもそも以前は dbus-daemon コマンドが存在しなかったために問題が発生しなかっただけのようです。つい先日 starship をインストールしたのですが、そのとき依存で dbus が入ったことで問題が発生したようです。

which dbus-daemon
#=> /home/linuxbrew/.linuxbrew/Cellar/dbus/1.14.10/bin/dbus-daemon

brew uses dbus --installed
#=> starship

starship はおそらく cmd_duration モジュールのデスクトップ通知のために dbus を使用しています。

https://starship.rs/ja-JP/config/#command-duration

ただ、WSL 環境だとデスクトップ通知が機能しないし、そもそも cmd_duration モジュールは無効にしています。

よってこれで解決です。

brew uninstall --ignore-dependencies dbus

また別の何かを入れたときに依存で dbus が入ると再発しますが、その時は改めて考えます。

なお、環境変数 DBUS_SESSION_BUS_ADDRESS=/dev/null とかでも回避できるようです。

さいごに

dbus とかよくわからない。systemd の文脈でよく見る気がするけど、元々はデスクトップ環境におけるプロセス間通信のためのモノだったのが Linux において非デスクトップ環境でも広く利用されるようになったということなの?