Як я можу встановити схему Gsettings без привілеїв root?


14

Типовий робочий процес для встановлення схеми Gsettings такий:

  1. Створіть схему з розширенням .gschema.xmlіз таким вмістом:

    <?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. Скопіюйте схему в /usr/share/glib-2.0/schemas/.

  3. Складіть схему, виконавши цю команду:

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

Однак для написання /usr/share/glib-2.0/schemas/потрібні кореневі привілеї. Чи є спосіб встановити схему в не глобальний каталог користувачів?

Відповіді:


16

Ви можете скопіювати і скласти свої схеми Gsettings в каталог, що записується користувачем:

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

Складним бітом є налаштування програми для використання саме цього каталогу. Це можна зробити двома способами:

  • З GSETTINGS_SCHEMA_DIRзмінною середовища:

    $ GSETTINGS_SCHEMA_DIR=~/schemas/ ./example.py
  • Або за допомогою об'єктів GSettingsSchemaSource та GSettingSchema:

    Якщо у вас є доступ до вихідного коду вашої програми, ви можете змінити його для завантаження складених схем з будь-якого каталогу. Ось як це можна зробити в Python, хоча ви могли це зробити на будь-якій мові програмування за допомогою самоаналізу 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)

Список літератури:


Ви також знаєте, як перевірити, чи дана схема вже встановлена ​​(і робити вищезазначене, лише якщо її немає)?
П'єтро Баттістон

Відповідно до цих документів ви також можете додати каталог, що містить glib-2.0/schemasкаталог, до XDG_DATA_DIRSзмінної середовища.
ntc2
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.