起動時に最初のシェルでのみキーの入力を求める方法でキーチェーンを実行するにはどうすればよいですか?

起動時に最初のシェルでのみキーの入力を求める方法でキーチェーンを実行するにはどうすればよいですか?

KDEを起動すると、複数のシェルタブが開いていて、追加しました。keychain私にとって問題~/.shellrcは、ログインすると、すべてのタブにキーパスワードの入力を求めるメッセージが表示されることです。これはかなり迷惑です。すべてのタブを起動でき、1つのタブにログインすると、すべてのタブにキーがロードされるようにするための良いソリューションはありますか?

答え1

これには2つの方法があります。

次のように、キーチェーンが1つのタブでのみ開いていることを確認できます。

if mkdir /tmp/keychain.lock; then
  eval `keychain --eval --agents ssh id_dsa`
  rm -r /tmp/keychain.lock
fi

ただし、最初のタブには表示されない場合があります。検索が必要な場合がありますが、これは同様に迷惑かもしれません。これは、mkdirがアトミック操作であるために機能します。 1つのスクリプトだけが成功し、そのスクリプトはプロンプトを表示します。

別の方法は、すべてのタブにプロンプ​​トを表示しますが、そのいずれかに応答するとすぐにプロンプ​​トを終了することです。ファイルをポーリングするか、次のようにinotify-toolsを使用できます。

file=/tmp/keychain-wait
touch $file
inotifywait -e delete_self $file |\
while read file event; do 
 if [ "$event" = "DELETE_SELF" ]; then
   pkill keychain
 fi
done &

keychain
rm $file

メッセージが表示されますが、最初にファイルが削除されたことを確認するためにウォッチャーが起動します。プロンプトが満たされると、ファイルが削除され、オブザーバーは保留中の他のプロンプトを終了します。 inotifywaitはinotify-toolsで提供されています。 inotifyはLinux APIです。他のUnicesにも同様のAPIがあるかもしれませんが、そうでない場合は、ファイルが削除されたかどうかをポーリングするループが必要です。

関連情報