Типичный рабочий процесс для установки Схемы Gsettings является этим:
Создайте схему с расширением .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>
Скопируйте схему в /usr/share/glib-2.0/schemas/
.
Скомпилируйте схему путем выполнения этой команды:
sudo glib-compile-schemas /usr/share/glib-2.0/schemas/
Однако запись в /usr/share/glib-2.0/schemas/
требует полномочий пользователя root. Существует ли способ установить схему на каталоге неглобального пользователя?
Вы можете скопировать и скомпилировать свои схемы 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)