使用 GObjectIntrospection 异步调用 GnomeKeyring
Asynchronuous call to GnomeKeyring using GObjectIntrospection
我正在编写一个 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
但在 the javascript environment 中均未找到。
哪里可以找到fedora23下的GnomeKeyring-Gir文件来确认缺少asynch functions?
如何实现异步密钥环打开和密码检索?
有人看到完全不同的可能方法吗?
点滴帮助...
请考虑使用 libsecret 而不是 libgnome-keyring。
它在 libsecret 的 project website 上写着 "libsecret replaces libgnome-keyring"。因此,对于新项目,您应该改用 libsecret。
此外,libsecret 有一个 asynchronous unlock()
method。尽管在撰写本文时,文档说异步方法 "may block indefinitely"。但这可能是复制粘贴错误。所以我就试试吧!
另请注意,libsecret 使用 GnomeKeyring 作为后端,因此您实际上会使用 GnomeKeyring,尽管它与更通用的库结合使用。
我正在编写一个 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
但在 the javascript environment 中均未找到。
哪里可以找到fedora23下的GnomeKeyring-Gir文件来确认缺少asynch functions? 如何实现异步密钥环打开和密码检索? 有人看到完全不同的可能方法吗? 点滴帮助...
请考虑使用 libsecret 而不是 libgnome-keyring。 它在 libsecret 的 project website 上写着 "libsecret replaces libgnome-keyring"。因此,对于新项目,您应该改用 libsecret。
此外,libsecret 有一个 asynchronous unlock()
method。尽管在撰写本文时,文档说异步方法 "may block indefinitely"。但这可能是复制粘贴错误。所以我就试试吧!
另请注意,libsecret 使用 GnomeKeyring 作为后端,因此您实际上会使用 GnomeKeyring,尽管它与更通用的库结合使用。