Это в основном «академический» вопрос - попытаться лучше понять внутренности системы конфигурации.
Я понимаю, что система 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
. Есть какая-то документация, объясняющая разницу?
В 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-editor :
dconf-editor
использует schema path
для отображения дерева данных настроек. Та же структура используется для хранения данных в базе данных GVariant.
gsettings
(из glib-2.0) использует schema id
для отображения / получения данных настроек. Как и любое другое приложение, которое использует GSetttings API.
Это зависит от разработчика приложения, чтобы установить оба, как он / она хотел бы. (с некоторыми ограничениями для канонического именования). Таким образом, 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 & amp; 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
и amp ; 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
(из 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
считывает файлы переопределения поставщиков , которые являются ключевыми файлами, которые может переопределить значения по умолчанию для ключей в схемах (Ref: 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) , возможно, это было для старого выпуск.