Я пишу расширение gnome-shell, которое показывает текущий баланс предоплаченных карт, таких как телефоны (или электричество). Поскольку для этих служб необходимы учетные данные, я не хочу сохранять пароль в gsettings, а как запись в гномовую цепочку.Асинхронный вызов GnomeKeyring с использованием GObjectIntrospection
В настоящее время я использую синхронные путь с просьбой к брелока для входа в систему и пароль, используя
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)
Эта синхронизация. подход к слабой точке заключается в том, что keyring необходимо уже открыть или вызвать диалоговое окно с паролем. При запуске gnome-shell с автоматическим логином, этот синхронный вызов блокирует фактически запуск оболочки вообще - поэтому нет возможности ввести пароль для брелока.
В Gnome Developer Wiki именует асинхронные методы
- GnomeKeyring.unlock
- GnomeKeyring.find_items
но оба не найдены в the javascript environment.
Где я могу найти файл GnomeKeyring-Gir в fedora23, чтобы подтвердить отсутствие функций asynch? Как я могу добиться асинхронного открытия и получения паролей паролей? Кто-нибудь видит совершенно другой, возможный подход? Каждый маленький помогает ...
Вы рассматривали использование [libsecret] (https://developer.gnome.org/libsecret/0.16/js-examples.html) вместо GnomeKeyring? – JayStrictor
Эй, @ JayStrictor, на самом деле я этого не делал. Хотелось использовать стандартную среду Gnome (как и для расширения оболочки Gnome) и вместо GnomeKeyring не искал альтернативы. Вы знаете, поддерживает ли libsecret асинхронные вызовы - с синхронизацией. называет мои блоки расширения всей оболочкой gnome при запуске. –
В нем говорится: «libsecret заменяет libgnome-keyring» на [сайте] (https://wiki.gnome.org/Projects/Libsecret). Поэтому я предполагаю, что для новых проектов вы, вероятно, должны использовать libsecret. Кроме того, libsecret имеет асинхронный метод '' unlock() '(https://people.gnome.org/~gcampagna/docs/Secret-1/Secret.Service.unlock.html). Хотя в документе говорится, что асинхронный метод «может блокироваться бесконечно», но это может быть ошибка копирования и вставки. Так что я просто попробую! – JayStrictor