Это в основном «академический» вопрос — чтобы попытаться лучше понять внутренности системы конфигурации.
Я понимаю, чтоdconfsystem — это новая система конфигурации в gnome3, которая заменила (устаревшую)gconf; это совершенно ясно изGconf, Dconf, Gsettings и связь между ними.
Мне показалось, что программы gsettings
и dconf-editor
где просто два разных способа доступа к одному и тому жеdconfбаза данных, которая подтверждена в
Что такое dconf, каковы его функции и как его использовать?
EDIT: Я обнаружил, что кто-то заметил это как разницу в регистре в имени какой-то схемы, см. здесь ---Чувствительны ли к регистру имена схем dconf?; но, похоже, этим различия не ограничиваются. В одном из ответов есть пример несоответствия, но я не нашел объясненияпочему.
Но недавно я обнаружил, что клавиши, доступные из gsettings
и , dconf-editor
не одинаковы. Например, настройки для vino
находятся в dconf-editor
под org.gnome.desktop.remote-access
(см. скриншот ниже), а в gsettings они находятся под org.gnome.Vino
. Есть какая-то документация, которая объясняет разницу?
Вgsettings:
(0)samsung-romano:~/tmp/try% gsettings list-recursively org.gnome.Vino
org.gnome.Vino alternative-port uint16 5900
org.gnome.Vino authentication-methods ['none']
org.gnome.Vino disable-background false
[...]
и:
(0)samsung-romano:~/tmp/try% gsettings list-recursively org.gnome.desktop.remote-access
No such schema 'org.gnome.desktop.remote-access'
Но вdconf-редактор:
решение1
dconf-editor
используетschema path
для отображения дерева данных настроек. Та же структура используется для хранения данных в базе данных GVariant.gsettings
(из glib-2.0) используетschema id
для показа/получения данных настроек. Точно так же, как и любое другое приложение, использующее API GSetttings.Разработчик приложения может установить оба варианта по своему усмотрению (с некоторыми ограничениями для канонического наименования). Так что
path
может отличаться,id
но большинство разработчиков приложений предпочитают использовать идентичные серии/комбинации слов. Некоторые не сохраняют одинаковый регистр. ПримерПроект трекера от Gnome<schema id="org.freedesktop.Tracker.Miner" path="/org/freedesktop/tracker/miner/" />
В дополнение к этому, некоторые альтернативные приложения используют те же настройки, которые принадлежат рабочему столу Gnome. Пример:
input-sources
Первый,Приложения не должны вмешиваться
dconf
Введение отdconfстраница проекта:
dconf
— это низкоуровневая система конфигурации. Ее основная цель — предоставить бэкэнд для GSettings на платформах, на которых еще нет систем хранения конфигурации.Где хранятся данные?(Ссылка:https://wiki.gnome.org/Projects/dconf/SystemAdministrators)
Профиль — это список баз данных конфигурации. Похоже, что Gnome и Unity используют один и тот же профиль.
$ cat /etc/dconf/profile/gdm user-db:user system-db:gdm
user-db:user
: Первая база данных в профиле доступна для чтения и записиrw
и создается в домашнем каталоге пользователя.$ file ~/.config/dconf/user /home/sneetsher/.config/dconf/user: GVariant Database file, version 0
system-db:gdm
: только для чтения$ file /etc/dconf/db/gdm /etc/dconf/db/gdm: GVariant Database file, version 0
dconf
можно связать хранилище стилей текста в дополнение к базе данных GVariant изdb.d/*
папки. Пример (обратите внимание на путь к файлу, так как он является частьюsystem-db:gdm
):$ cat /etc/dconf/db/gdm.d/00-upstream-settings # This file is part of the GDM packaging and should not be changed. # # Instead create your own file next to it with a higher numbered prefix, # and run # # dconf update # [org/gnome/desktop/a11y/keyboard] enable=true [org/gnome/desktop/background] show-desktop-icons=false ...
Файлы схем: Связь между
schema id
&schema path
(*.gschema.xml
)Что представляет собой XML-файл схемы в папке data/glib-2.0 моего приложения Quickly?кТрентдемонстрирует хороший пример использования API GSettings в приложении Quickly и делает вывод, основанный на собственном опыте.
Вернемся к Vino. Каждое приложение, использующее GSsettings, должно определить свои схемы и хранить/устанавливать их в
/usr/share/glib-2.0/schemas/
(это каталог glib):$ dpkg -L vino | grep -i glib-2.0 /usr/share/glib-2.0 /usr/share/glib-2.0/schemas /usr/share/glib-2.0/schemas/org.gnome.Vino.enums.xml /usr/share/glib-2.0/schemas/org.gnome.Vino.gschema.xml $ more /usr/share/glib-2.0/schemas/org.gnome.Vino.gschema.xml <schemalist> <schema id='org.gnome.Vino' path='/org/gnome/desktop/remote-access/'> <key name='enabled' type='b'> <summary>Enable remote access to the desktop</summary> <description> If true, allows remote access to the desktop via the RFB protocol. Users on remote machines may then connect to the desktop using a VNC viewer. </description> <default>false</default> </key> <key name='prompt-enabled' type='b'> <summary>Prompt the user before completing a connection</summary> <description> If true, remote users accessing the desktop are not allowed access until the user on the host machine approves the connection. Recommended especially when access is not password protected. </description> <default>true</default> </key> ...
Если вы заметили, схема определяется с помощью
id
иpath
. Имя файла схемы следует заid
значением.<schema id='org.gnome.Vino' path='/org/gnome/desktop/remote-access/'>
*.enums.xml
файлы предназначены для объявления пользовательских перечислений, которые будут использоваться в качестве новых типов данных в*.gschema.xml
тех жеschema id
.$ cat /usr/share/glib-2.0/schemas/org.gnome.Vino.enums.xml <!-- Generated data (by glib-mkenums) --> <schemalist> <enum id='org.gnome.Vino.VinoIconVisibility'> <value nick='never' value='0'/> <value nick='always' value='1'/> <value nick='client' value='2'/> </enum> </schemalist> <!-- Generated data ends here --> $ gsettings range org.gnome.Vino icon-visibility enum 'never' 'always' 'client' $ gsettings get org.gnome.Vino icon-visibility 'client'
Компиляция схем(Ссылка:Играемся с dconf и gnome-tweak-tool)
В процессе установки (имеется триггер dpkg) схемы компилируются с помощью
glib-compile-schemas
инструмента (из glib)sudo glib-compile-schemas /usr/share/glib-2.0/schemas
*.gschema.xml
будет скомпилирован в двоичный файл/usr/share/glib-2.0/schemas/gschemas.compiled
Файлы переопределения поставщика(
*.gschema.override
)В дополнение к файлам схемы,
glib-compile-schemas
читаетпереопределение поставщикафайлы, которые являются ключевыми файлами, которые могут переопределять значения по умолчанию для ключей в схемах (Ссылка:man glib-compile-schemas
). Они содержат изменения, внесенные дистрибутивом Ubuntu для переопределения схем по умолчанию.$ ls /usr/share/glib-2.0/schemas/*.gschema.override /usr/share/glib-2.0/schemas/10_compiz-gnome.gschema.override /usr/share/glib-2.0/schemas/10_desktop-base.gschema.override /usr/share/glib-2.0/schemas/10_evolution-common.gschema.override /usr/share/glib-2.0/schemas/10_gnome-settings-daemon.gschema.override /usr/share/glib-2.0/schemas/10_gnome-shell.gschema.override /usr/share/glib-2.0/schemas/10_gnome-system-log.gschema.override /usr/share/glib-2.0/schemas/10_gsettings-desktop-schemas.gschema.override /usr/share/glib-2.0/schemas/10_libgtk-3-common.gschema.override /usr/share/glib-2.0/schemas/10_ubuntu-settings.gschema.override /usr/share/glib-2.0/schemas/20_ubuntu-gnome-default-settings.gschema.override $ cat /usr/share/glib-2.0/schemas/10_gnome-settings-daemon.gschema.override [org.gnome.desktop.wm.keybindings] switch-input-source=['<Super>space'] switch-input-source-backward=['<Shift><Super>space']
Пример использования файлов переопределения см.Как настроить Ubuntu Live CD?(5. Настройка 2: Фоны и темы).
Блокировка файлов
В настоящее время dconf поддерживает только блокировку по ключам, без блокировки подпутей. Пользовательские значения будут по-прежнему храниться в ,
user-db
но не будут оказывать никакого влияния на приложения. dconf/gsettings вместо этого возвращает значения по умолчанию для заблокированных ключей. Файлы блокировки хранятся вdb.d/locks/
. Пример:$ cat /etc/dconf/db/gdm.d/locks/00-upstream-settings-locks /org/gnome/desktop/a11y/keyboard/enable /org/gnome/desktop/background/show-desktop-icons /org/gnome/desktop/lockdown/disable-application-handlers /org/gnome/desktop/lockdown/disable-command-line /org/gnome/desktop/lockdown/disable-lock-screen /org/gnome/desktop/lockdown/disable-log-out /org/gnome/desktop/lockdown/disable-printing /org/gnome/desktop/lockdown/disable-print-setup /org/gnome/desktop/lockdown/disable-save-to-disk /org/gnome/desktop/lockdown/disable-user-switching ...
После модификации замков для вступления их в силу выполните:
sudo dconf update
Хорошая витрина:Настройки dconf: значения по умолчанию и блокировки
Изменение глобальных настроек
По умолчанию для
gsettings
/dconf-editor
используется редактированиеuser-db
. Чтобы изменитьsystem-db
, напишите новый файл переопределения и перекомпилируйте схемы.Мне не удалось заставить это работать:
sudo su gdm -c 'gsettings ...'
ни один другой ответ здесь неУстановить настройки Gnome по умолчанию/глобальные настройки (Gnome 3), возможно, это было для старого релиза.