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 时,这个同步调用会阻止实际启动 shell - 所以不可能输入密钥环密码。

Gnome Developer Wiki命名异步方法

  • GnomeKeyring.unlock
  • GnomeKeyring.find_items

但两者都没有在javascript 环境中找到。

我在哪里可以找到 fedora23 下的 GnomeKeyring-Gir 文件以确认缺少缺少的异步功能?如何实现异步密钥环打开和密码检索?有人看到完全不同的可能方法吗?每一点都有帮助...

4

1 回答 1

1

请考虑使用libsecret而不是 libgnome-keyring。它在 libsecret 的项目网站上显示“libsecret 替换 libgnome-keyring” 。因此,对于新项目,您可能应该改用 libsecret。

此外,libsecret 有一个异步unlock()方法。尽管在撰写本文时,文档说异步方法“可能会无限期阻塞”。但这可能是复制和粘贴错误。所以我就试试吧!

另请注意,libsecret 使用 GnomeKeyring 作为后端,因此您实际上会使用 GnomeKeyring,尽管与更通用的库结合使用。

于 2016-03-21T18:48:35.367 回答