Xなしでgpg2 pinentryが失敗する

Xなしでgpg2 pinentryが失敗する

何が動作していますか?

私のgpg-agent pinentryはXでうまく動作します。私は走ることができます

echo "test" | gpg2 -ase --default-recipient-self | gpg2

自分のパスワードをキャッシュし、後で実行してkillall gpg-agent -1パスワードを更新してください。

デフォルトでは、pinentry-gtkを開き(外観上)、パスワードの入力を求められます。

うまくいかない

ただし、Xサーバーなしで同じコマンドを実行しようとするとgpg2がクラッシュするようです(プロンプトや何も表示されません)。これを終了するとpinentry、まだ存在するが無駄なプロセスがあることがわかります。

私が何が起こるのを期待しているのか

gpg2私はXサーバーなしで実行すると、次のpinentry-cursesプロンプトが表示されることを望みましたpass。また、標準入力でパスワードを入力するように求められた以前のバージョンのgpgが覚えているようですが、なぜそのようなことが起こらないのかわかりません。

私が試したこと

次の「修正」を試しましたが、どちらも上記のコマンドが正しく実行されませんでした。実際にpinentry-cursesを強制的に適用すると、X環境(passまだ機能しています)でも上記のコマンドが失敗します。

  • pinentry-program /usr/bin/pinentry-curses`gpg-agent.conf`に設定

  • 次のようにgpg-agentを起動します。gpg-agent --daemon --keep-tty --use-standard-socket --pinentry-program=/usr/bin/pinentry-curses

  • 環境変数を使用してください。export PINENTRY_USER_DATA="USE_CURSES=1”

背景情報

ほとんど空の.gpg-agent構成ファイルがあり、キャッシュタイムアウトのみです。

ログイン時にgpg-agentを直接呼び出しますeval $(gpg-agent --daemon)。たとえば、Xで起動しないので、gettyを使用してログインします。

ベストアンサー1

ああ...答えは最初の画面の値にありますman gpg-agent。 ~/.bashrc に次の行を追加する必要があります。

GPG_TTY=$(tty)
export GPG_TTY

GPG_TTYの無効な値はpinentry-cursesが実行される理由を説明しますが、必要な場所は説明しません。

メモ:コンソールログインとXサーバーの起動の間で出力が変更されるため、ttyすべての〜/ .bashrcで実行する必要があります(エクスポートされた環境変数のほとんどはログイン時にのみ実行されるように構成されています)。

おすすめ記事