ログインして暗号化しようmutt
としたtmux
とき、gpg
gpgはパスワードを入力する必要がある空白の画面を表示しました。 gpgを追跡しましたが、ソケットを待っていることがわかりましたread()
(おそらく、gpg-agent
ここで何が起こっていますか?)。
答え1
短い答え
Bashを使用している場合は、Chris W.のラッパースクリプトが最善の選択です。 zshを使用している場合は、~/.zshenv
起動スクリプトを使用してそこから設定でき、GPG_TTY
ラッパーは必要ありません。 Bashには同様の起動スクリプトがない(参照)バッシュ開始ファイル)、そこにラッパーを使用する必要があります。
export GPG_TTY=${TTY}
背景知識:対話型および非対話型シェル
gpg-agentは、GPG_TTY
安全な方法でパスワードプロンプトを表示できるように、呼び出されたttyを指すことを期待しています。これGnuPG マニュアル~/.bashrc
以下(または同様のもの)を入れることをお勧めします。
GPG_TTY=$(tty)
export GPG_TTY
これは、シェルから直接muttを呼び出すと機能します。 GPG_TTY
設定され、muttはそれを選択し、必要に応じてgpgに渡します。
しかし、tmuxのコマンドや同様の設定でmuttを起動する際には大きな違いがありますnew-window
。以前は、muttはいわゆるインタラクティブシェル- つまり、シェルプロンプトを開き、そこからmuttを起動します。 tmux new-window
発射する非対話型シェルはmuttだけを起動すればよく、対話できないからです。この場合、お風呂はインタラクティブな使用のためにシェルを設定するためのものなので、読んでいないか、まったく読んでいません.bash_profile
。.bashrc
zsh はほぼ同じことを行います。つまり、 .zshrc
対話型シェルは読み取られ、非対話型シェルはスキップされます。しかしzshでは3番目の起動ファイルを提供できます。、、.zshenv
読んだ内容はすべてインタラクティブかどうかはシェルです。したがって、GPG_TTY
そこから設定すると、どのような方法でmuttが起動しても、常に使用できます。$TTY
常に現在のttyを指すシェル組み込み変数なので、シェルが起動するたびにプロセスを生成するオーバーヘッドを回避できますtty
。
答え2
私はmutt
ランニングから始めましたtmux neww mutt
。mutt
継承に設定される環境ですtmux
。これには、$GPG_TTY
実行中の新しいウィンドウの違いが含まれますmutt
(tmux
環境にない場合は設定解除)。新しいウィンドウを正しく設定するgpgtty
ラッパーを作成しました。$GPG_TTY
#!/bin/sh
GPG_TTY=$(tty) $*
その後、開始しますmutt
。その後はうまくいきます。ちなみにパスワード入力はこちらまでです。tmux neww gpgtty mutt
gpg
pinentry-curses
gpg