Jak mogę zainstalować schemat Gsettings bez uprawnień roota?

14

Typowy przepływ pracy podczas instalowania schematu Gsettings jest następujący:

  1. Utwórz schemat z rozszerzeniem .gschema.xmlo treści takiej jak ta:

    <?xml version="1.0" encoding="UTF-8"?>
    <schemalist>
      <schema id="com.companyname.appname" path="/com/companyname/appname/">
          <key type="b" name="mybool">
              <default>false</default>
              <summary>Example summary</summary>
              <description>Example description</description>
          </key>
      </schema>
    </schemalist>
  2. Skopiuj schemat do /usr/share/glib-2.0/schemas/.

  3. Skompiluj schemat, uruchamiając następujące polecenie:

    sudo glib-compile-schemas /usr/share/glib-2.0/schemas/

Jednak pisanie do /usr/share/glib-2.0/schemas/wymaga uprawnień roota. Czy istnieje sposób na zainstalowanie schematu w nieglobalnym katalogu użytkowników?

Flimm
źródło

Odpowiedzi:

16

Możesz skopiować i skompilować swoje schematy Gsettings do katalogu, w którym użytkownik może zapisywać:

$ cp com.companyname.appname ~/schemas/
$ glib-compile-schemas ~/schemas/

Trudnym zadaniem jest skonfigurowanie aplikacji do korzystania z tego konkretnego katalogu. Można to zrobić na dwa sposoby:

  • Ze GSETTINGS_SCHEMA_DIRzmienną środowiskową:

    $ GSETTINGS_SCHEMA_DIR=~/schemas/ ./example.py
  • Lub używając obiektów GSettingsSchemaSource i GSettingSchema:

    Jeśli masz dostęp do kodu źródłowego swojego programu, możesz go zmodyfikować, aby ładował skompilowane schematy z dowolnego katalogu. Oto jak to zrobić w Pythonie, chociaż można to zrobić w dowolnym języku programowania z introspekcją GObject:

    schema_source = Gio.SettingsSchemaSource.new_from_directory(
        os.path.expanduser("~/schemas"),
        Gio.SettingsSchemaSource.get_default(),
        False,
    )
    schema = schema_source.lookup('com.companyname.appname', False)
    settings = Gio.Settings.new_full(schema, None, None)
    settings.set_boolean('mybool', True)

Bibliografia:

Flimm
źródło
Czy wiesz także, jak sprawdzić, czy dany schemat jest już zainstalowany (i zrobić to tylko, jeśli nie jest)?
Pietro Battiston
Zgodnie z tymi dokumentami możesz także dodać katalog zawierający glib-2.0/schemaskatalog do XDG_DATA_DIRSzmiennej środowiskowej.
ntc2,