何が機能しているのか
私のgpg-agentpinentryはXで正常に動作します。実行できます
_echo "test" | gpg2 -ase --default-recipient-self | gpg2
_
パスワードをキャッシュし、後で_killall gpg-agent -1
_を実行してパスワードをフラッシュします。
デフォルトでは、(見た目から)pinentry-gtkが開き、パスワードの入力を求められます。
機能していないもの
ただし、Xサーバーなしで同じコマンドを実行しようとすると、gpg2がハングしているように見えます(プロンプトなどは表示されません)。それを殺すと、pinentry
プロセスも存在し続けますが、どこにも役に立たないことがわかります。
私が期待すること
Xサーバーなしで_gpg2
_を実行すると、pass
と同じように、pinentry-cursesプロンプトが表示されると思います。さらに、古いバージョンのgpgでは、stdinからパスワードの入力を求められただけで、なぜそれが起こらないのかよくわかりません。
私が試したこと
次の「修正」を試しましたが、前述のコマンドが正しく実行されませんでした。実際、pinentry-cursesを強制すると、X環境でも前述のコマンドが失敗します(pass
は引き続き機能します)。
`gpg-agent.conf``に_pinentry-program /usr/bin/pinentry-curses
_を設定する
このように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設定ファイルがあります。キャッシュタイムアウトだけがあります。
eval $(gpg-agent --daemon)
のようにログイン時に直接gpg-agentを呼び出しています。 Xを起動していないので、gettyを使用してログインします。
おっと...答えは最初の画面のman gpg-agent
にありました。 〜/ .bashrcに次の行を追加する必要がありました。
GPG_TTY=$(tty)
export GPG_TTY
GPG_TTYの値が正しくないため、pinentry-cursesが実行されていた理由が説明されていますが、必要な場所では説明されていません。
注:tty
の出力は、コンソールログインとXサーバーの起動後に変化するため、これはすべての〜/ .bashrcで実行する必要があります(ただし、ほとんどのエクスポートは ' d環境変数は、ログイン時にのみ実行されるように構成されています)。
Xとttyを頻繁に切り替える場合は、実行することをお勧めします
gpg-connect-agent updatestartuptty /bye > /dev/null
現在の環境に設定するには