Разве dconf-editor и gsettings не должны обращаться к одной и той же базе данных?
Это в основном "академический" вопрос - попытаться лучше понять внутренности системы конфигурации.
Я понимаю, что система dconf - это новая система конфигурации в gnome3, которая заменила (устарела) gconf; это совершенно ясно из Gconf, Dconf, Gsettings и отношений между ними.
Мне показалось, что программы gsettings
а также dconf-editor
где только два разных способа доступа к одной и той же базе данных dconf, что подтверждается в
Что такое dconf, какова его функция и как ее использовать?
РЕДАКТИРОВАТЬ: я обнаружил, что кто-то заметил это как различие в регистре в некотором имени схемы, см. Здесь --- Являются ли имена схемы dconf с учетом регистра?; но похоже, что различия не ограничиваются этим. В одном из ответов есть пример несоответствия, но я не нашел объяснения, почему.
Но в последнее время я обнаружил, что ключи доступны из gsettings
а также dconf-editor
не то же самое. Например, настройки для vino
находятся в dconf-editor
под org.gnome.desktop.remote-access
(см. скриншот ниже) в то время как в gsettings они находятся под org.gnome.Vino
, Есть какая-то документация, объясняющая разницу?
В настройках:
(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
показать / получить данные настроек. Так же, как и любое другое приложение, которое использует GSetttings API.Это зависит от разработчика приложения, чтобы установить оба, как он / она хотел бы. (с некоторыми ограничениями для канонического именования). Так
path
может отличаться отid
но большинство разработчиков приложений предпочитают использовать идентичные серии слов / комбинации. Некоторые не сохраняют одинаковую капитализацию. Пример проекта Tracker из 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? trent показывает хороший пример использования GSettings API в приложении Quickly, и его выводы основаны на его опыте.
Вернуться к Вино. Каждое приложение, которое использует 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
инструмент (от бойка)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)", возможно, был для старой версии.