dconf — это низкоуровневая система конфигурации и инструмент управления настройками. Его основная цель — предоставить бэкэнд для GSettings на платформах, на которых еще нет систем хранения конфигурации. Он зависит от GLib . Он является частью GNOME с версии 3 и является заменой GConf .
dconf — это простая система конфигурации на основе ключей. Ключи существуют в неструктурированной базе данных (но предполагается, что ключи, которые логически связаны друг с другом, группируются вместе).
Поддерживается уведомление об изменении.
Поддерживается стекирование нескольких источников конфигурации. Поддерживаются обязательные ключи.
Стекирование может быть выполнено в «точках монтирования». Например, глобальная конфигурация системы может быть смонтирована в /system/ внутри пространства конфигурации каждого пользователя. Один источник конфигурации может отображаться в нескольких точках иерархии. Например, в дополнение к стекированию по обычным ключам в /user/ системные ключи по умолчанию могут также отображаться в /default/ для проверки и изменения утилитой конфигурации системной политики.
Интеграция PolicyKit запланирована таким образом, чтобы обычный пользователь мог временно получить возможность, например, записывать в ключи в /system/ (или /default/ ). Это означает, что такие программы, как утилита конфигурации GNOME Display Manager, больше не должны запускаться как root.
dconf — это своего рода эквивалент реестра Windows в GNOME .
Поскольку типичный вход в систему GNOME состоит из тысяч чтений и в идеале 0 записей, dconf оптимизирован для чтения. Обычно чтение ключа из dconf включает ноль системных вызовов и ноль переключений контекста. Это достигается с помощью простого формата файла, который дублирует и формат хранения данных в dconf, и механизм IPC между клиентами и сервером.
Избежание циклических передач и переключений контекста желательно само по себе, но настоящее преимущество [ требуется ссылка ] заключается в том, что планировщик ввода-вывода в ядре может лучше справляться с работой, насыщая его запросами, поступающими от всех приложений, пытающихся прочитать свои ключи (в отличие от общего сервера конфигурации, последовательно запрашивающего один ключ за раз).
Наличие всех ключей в одном компактном двоичном формате также позволяет избежать серьезных проблем фрагментации, с которыми в настоящее время сталкивается подход с использованием дерева каталогов XML-файлов.
Записи менее оптимизированы – они проходят по шине и обрабатываются «писателем» – службой D-Bus – обычным способом. Уведомления об изменениях также обрабатываются писателем. Причина наличия службы шины в целом заключается в том, что заставить клиентов синхронизироваться при записи было бы очень сложно. [ необходима цитата ]
Службу записи не нужно активировать до тех пор, пока не будет выполнена первая операция записи.
Служба полностью не имеет состояния и может запускаться и останавливаться динамически. Список уведомлений об изменениях, которые интересуют отдельного клиента, поддерживается демоном шины (как список наблюдения/соответствия сигнала D-Bus).
Одна база данных dconf состоит из одного файла в двоичном формате, т.е. это не текстовый файл. Формат определяется как gvdb (файл базы данных GVariant). Это простой формат файла базы данных, который хранит сопоставление строк со значениями GVariant таким образом, что это чрезвычайно эффективно для поиска.
Файл базы данных GNOME для каждого пользователя по умолчанию ~/.config/dconf/user
— это файл, который, как ожидается, будет иметь формат GVDB.
GVariant — это строго типизированный вариантный тип данных, используемый для всех значений, хранящихся в dconf; он может содержать одно или несколько значений вместе с информацией о типе значений.
GVariant может содержать простые типы, такие как целые числа или логические значения; или сложные типы, такие как массив из двух строк или словарь пар ключ-значение. GVariant также является неизменяемым: после его создания ни его тип, ни его содержимое не могут быть изменены в дальнейшем. GVariant полезен, когда данные необходимо сериализовать, например, при отправке параметров метода в DBus или при сохранении настроек с помощью GSettings.
GVariant является частью GLib.
Класс GSettings предоставляет высокоуровневый API для приложений, позволяющий им сохранять и извлекать собственные настройки.
В Debian служебная программа /usr/bin/gsettings
содержится в пакете libglib2.0-bin.
GSettings является частью GIO . [2] который является частью GLib. libglib2.0-0
Доступно руководство системного администратора для dconf. Начиная с версии 0.2, dconf лицензируется по LGPL версии 2.1 "или более поздней".