
何が動作していますか?
私の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で実行する必要があります(エクスポートされた環境変数のほとんどはログイン時にのみ実行されるように構成されています)。
答え2
Xとttyを頻繁に切り替える場合は、次のように実行したい場合があります。
gpg-connect-agent updatestartuptty /bye > /dev/null
現在の環境に設定