Как получить доступ к клавишам GNOME из Ruby? - PullRequest
7 голосов
/ 16 октября 2010

Мне нужен доступ к клавишам GNOME с языка программирования Ruby. Тем не менее, я не могу найти никаких рубиновых библиотек драгоценных камней. В частности, я пытаюсь получить ключи Oauth для desktopcouch.

Как это можно достичь?

Ответы [ 2 ]

1 голос
/ 12 июля 2015

Попробуйте keyring https://rubygems.org/gems/keyring/versions/0.3.1

Работает так же просто, как

require 'keyring'
keyring = Keyring.new
my_password = keyring.get_password('service', 'username')
0 голосов
/ 09 октября 2018

Это работает в Ubuntu 18.04 с Gnome 3.28.2 / gnome-keyring 3.28.0 / Seahorse 3.20:

$ apt install libgnome-keyring-dev
$ gem install keyring

require 'keyring'
keyring = Keyring.new
keyring.set_password('service', 'username', 'password')
password = keyring.get_password('service', 'username')
# => "password"
keyring.delete_password('service', 'username')

К сожалению, гем keyring не позволяет использовать что-либо, кроме набора ключей по умолчанию. Чтобы использовать другие брелоки, или если вы просто хотите вырезать посредника:

$ gem install gir_ffi-gnome_keyring

require 'gir_ffi-gnome_keyring'
service_name = 'MyApplication'
username = 'Blah'

attrs = GnomeKeyring::AttributeList.new
attrs.append_string 'service', service_name
attrs.append_string 'username', username
attrs.append_string 'arbitrary_values', "whatever"

status, item_id = GnomeKeyring.item_create_sync(
  "My Other Keyring",
  :generic_secret,
  "#{service_name} (#{username})",
  attrs,
  'my secret password',
  true
)

# Using default keyring:
# status, item_id = GnomeKeyring.item_create_sync(
#    nil,
#    :generic_secret,
#    "#{service_name} (#{username})",
#    attrs,
#    'my secret password',
#    true
#  )

# Method signature:
# .item_create_sync(keyring, type, display_name, attributes, secret, update_if_exists)

status, keys = GnomeKeyring.find_items_sync :generic_secret, attrs
keys.first.secret
# => "my secret password"

# NOTE: find_items_sync() will search all unlocked keyrings of the right type and will
# return an array of all matches. There doesn't seem to be a way of narrowing the search.

Если брелок разблокирован (что, вероятно, и будет, потому что по умолчанию он использует ваш брелок для входа в систему, который автоматически разблокируется при входе в систему), тогда чтение и запись будут работать без проблем. Если набор ключей заблокирован, вам будет предложено ввести пароль для разблокировки набора ключей, прежде чем произойдет какое-либо чтение или запись.

Если вы видите следующее сообщение об ошибке:

Typelib file for namespace 'GnomeKeyring' (any version) not found

Тогда вам, вероятно, нужно установить заголовки gnome-keyring (apt install libgnome-keyring-dev)

...