1

Я пишу расширение 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? Как я могу добиться асинхронного открытия и получения паролей паролей? Кто-нибудь видит совершенно другой, возможный подход? Каждый маленький помогает ...

+1

Вы рассматривали использование [libsecret] (https://developer.gnome.org/libsecret/0.16/js-examples.html) вместо GnomeKeyring? – JayStrictor

+0

Эй, @ JayStrictor, на самом деле я этого не делал. Хотелось использовать стандартную среду Gnome (как и для расширения оболочки Gnome) и вместо GnomeKeyring не искал альтернативы. Вы знаете, поддерживает ли libsecret асинхронные вызовы - с синхронизацией. называет мои блоки расширения всей оболочкой gnome при запуске. –

+1

В нем говорится: «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

ответ

1

Пожалуйста, используйте libsecret вместо libgnome-keyring. В нем говорится, что «libsecret заменяет libgnome-keyring» на project website libsecret. Поэтому для новых проектов вам, вероятно, следует использовать libsecret.

Кроме того, libsecret имеет asynchronous unlock() method. Хотя на момент написания документа документы говорят, что асинхронный метод «может блокироваться бесконечно». Но это может быть копия ошибки &. Так что я просто попробую!

Также обратите внимание, что libsecret использует GnomeKeyring в качестве backend, поэтому вы действительно используете GnomeKeyring, хотя в сочетании с более универсальной библиотекой.

 Смежные вопросы

  • Нет связанных вопросов^_^