web-dev-qa-db-ja.com

pinentryがtmuxに表示されない

gpg(実際にはバックグラウンドでpassを使用するgpg)をtmuxとYubikeyNeoの内部で動作させるのに問題があります。 gpgを使用してファイルを復号化するか、何かに署名しようとすると、次のようになります。

$ gpg -d test.gpg            
gpg: sending command `SCD PKDECRYPT' to agent failed: ec=5.99
gpg: public key decryption failed: general error
gpg: decryption failed: secret key not available

これはtmuxの内部にのみあり、通常のzshセッションでgnome-terminalで直接同じコマンドを実行しようとすると機能します。

gpg -d test.gpg 
helloworld

pinentryがポップアップし、Yubikeyのロックを解除してファイルの復号化に進むためにPINを要求します。

問題をpinentryがスポーンできないことに絞り込んだと思います。 gpg-agentのログレベルを設定すると、次のようになります。

gpg-agent[906]: DBG: chan_6 <- INQUIRE NEEDPIN ||Please enter the PIN
gpg-agent[906]: starting a new PIN Entry
gpg-agent[906]: DBG: chan_7 <- OK Pleased to meet you, process 906
gpg-agent[906]: DBG: connection to PIN entry established
... options removed ...
gpg-agent[906]: DBG: chan_7 -> GETINFO pid
gpg-agent[906]: DBG: chan_7 <- D 13381
gpg-agent[906]: DBG: chan_7 <- OK
gpg-agent[906]: DBG: chan_7 -> SETKEYINFO --clear
gpg-agent[906]: DBG: chan_7 <- OK
gpg-agent[906]: DBG: chan_7 -> SETDESC Please enter the PIN
gpg-agent[906]: DBG: chan_7 <- OK
gpg-agent[906]: DBG: chan_7 -> SETPROMPT PIN
gpg-agent[906]: DBG: chan_7 <- OK
gpg-agent[906]: DBG: chan_7 -> [[Confidential data not shown]]
gpg-agent[906]: DBG: chan_7 <- [[Confidential data not shown]]
gpg-agent[906]: DBG: error calling pinentry: Operation cancelled <Pinentry>
gpg-agent[906]: DBG: chan_7 -> BYE
gpg-agent[906]: DBG: chan_6 -> CAN
gpg-agent[906]: DBG: chan_6 <- ERR 100663573 IPC call has been cancelled <SCD>
gpg-agent[906]: DBG: chan_5 -> ERR 83886179 Operation cancelled <Pinentry>

明らかにOPTIONによって処理されないいくつかのpinentryステートメントを除いて、疑わしいものは何も私に飛び出しませんが、gnome-terminalから呼び出すと同じようになります。

$DISPLAY変数を設定しても役に立ちません。エラーは同じです。

私は何かが足りないのですか?設定する必要のある他の変数はありますか?そして、グラフィカルなものを開くことができないのに、なぜこれはpinentry-ncursesにフォールバックしないのですか?

2
cdecker

問題は、(何らかの理由で)gpgがdbusを使用しようとしましたが、tmux内で環境変数DBUS_SESSION_BUS_ADDRESSは時代遅れでした。

これはで修正できます

set-option -g update-environment 'DBUS_SESSION_BUS_ADDRESS'

.tmux.conf

6
Hauke Laging