Сегодня расскажу вам про чудеса, которые можно вытворять с вашими приложениями благодаря системе хранения конфигураций GSettings. Мне лично эта находка сэкономила кучу времени на проработке способов хранить, заполнять и парсить конфиги.
GSettings - API, которое позволяет приложениям управлять параметрами ключ-значение: сохранять их, изменять и получать. Данные настройки хранятся в бинарном формате, ну а почитать их можно через XML схему, которую должно предоставлять приложение.
И так, очередная задача - нужно реализовать менеджер уведомлений. Запрос следующий: дать пользователю удобный интерфейс по управлению сообщениями сети и добавить общесистемный конфиг, через который можно было бы выставлять глобальные настройки.
Сразу у меня возникли мысли: “Опять этот гемор с парсингом”. Все оказалось проще - GTK приложение, которое использует Glib, может создать объект GSettings, указать имя схемы, в которой будут содержаться настройки и управлять ими.
А-ля, нам нужно дать пользователю возможность отключить ММС-ки о том, что подключение к VPN разорвано. Не вопрос:
1) добавляем в схему (….gschema.xml) дополнительную настройку
<key name="disable-vpn-disconnect-notification" type="b">
<default>false</default>
<summary>...</summary>
<description>...</description>
</key>
2) через get/set вызовы получаем и обновляем данные
g_settings_set_boolean (applet->gsettings, "disable-vpn-disconnect-notification", state);
g_settings_get_boolean (applet->gsettings, "disable-vpn-disconnect-notification");
Если отработал ивент на уведомление, просто определяем его тип и сверяем со значением конкретной настройки.
Если приложение не предоставляет GUI по управлению GSettings, пользователь может работать с ними либо через одноименную CLI утилиту, либо через GUI менеджер dconf-editor:
$ gsettings set org.gnome.nm-applet disable-connected-notifications "true"
$ sudo apt install dconf-editor
После правок, локальный бинарный конфиг, скорее всего, будет лежать в каталоге "~/.config/dconf/":
~/.config/dconf$ ls
user
Если админу нужно указать глобальные настройки для всех пользователей, он может вручную подредактировать схему. Обычно они лежат в "/usr/share/glib-2.0/schemas/":
$ ls /usr/share/glib-2.0/schemas/
org.gnome.desktop.sound.gschema.xml
org.gnome.nm-applet.gschema.xml
org.gnome.desktop.a11y.gschema.xml
После того, как дефолтные параметры изменены, XML нужно обязательно скомпилить, т.к. читается именно бинарное представление. Без этого этапа изменения не будут применены:
$ sudo glib-compile-schemas /usr/share/glib-2.0/schemas/
LinuxCamp | #story