1

電話(または電気)などのプリペイドカードの現在の残高を表示するgnome-shell拡張機能を作成しています。これには特定のサービスの資格情報が必要なため、パスワードを gsettings に保存するのではなく、gnome キーリングのエントリとして保存します。

現在、キーリングにログインとパスワードを要求する同期方法を使用しています

const GnomeKeyring = imports.gi.GnomeKeyring;

GnomeKeyring.unlock_sync(null, null)
// the variable 'id' is a concat of login '@'webservice url
var attrs = GnomeKeyring.Attribute.list_new()
GnomeKeyring.Attribute.list_append_string(attrs, 'id', id)
var result = GnomeKeyring.find_items_sync(
                GnomeKeyring.ItemType.GENERIC_SECRET, 
                attrs
             )
if (result[0] != GnomeKeyring.Result.OK) return
log('  => password '+result[1][0].secret)
log('     keyring id  = '+result[1][0].item_id)
log('     keyring  = '+result[1][0].keyring)

この同期。アプローチの弱点は、キーリングがすでに開いている必要があるか、パスワードダイアログが表示されることです。自動ログインで gnome-shell を起動すると、この同期呼び出しはシェルの実際の起動をまったくブロックするため、キーリングのパスワードを入力する可能性はありません。

Gnome Developer Wikiは非同期メソッドに名前を付けています

  • GnomeKeyring.unlock
  • GnomeKeyring.find_items

しかし、どちらもjavascript 環境では見つかりません。

非同期関数が欠落していないことを確認するには、fedora23 の下の GnomeKeyring-Gir ファイルをどこで見つけることができますか? 非同期のキーリングのオープンとパスワードの取得を実現するにはどうすればよいですか? まったく異なる可能性のあるアプローチを見ている人はいますか? 少しずつ助かる…

4

1 に答える 1

1

libgnome-keyring の代わりにlibsecretの使用を検討してください。libsecret のプロジェクト Web サイトには、「libsecret は libgnome-keyring に置き換わります」と書かれています。したがって、新しいプロジェクトでは、代わりに libsecret を使用する必要があります。

さらに、libsecret には非同期unlock()メソッドがあります。ただし、執筆時点では、非同期メソッドは「無期限にブロックされる可能性がある」とドキュメントに記載されています。しかし、それはコピー&ペーストのエラーである可能性があります。だから私はそれを試してみます!

また、libsecret はバックエンドとして GnomeKeyring を使用することに注意してください。したがって、実際には GnomeKeyring を使用することになりますが、より用途の広いライブラリと組み合わせて使用​​します。

于 2016-03-21T18:48:35.367 に答える