Во-первых, приложения не должны связываться с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 в приложении быстро, и его вывод на основе своего опыта.
Вернуться к Вино. Каждое приложение, которое использует 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)» , возможно, был для старой версии.
dconf dump /
создает дамп всех записей, измененных пользователем, он не включает записи, которые никогда не изменялись или были сброшены. (например, он включает записи, которые были изменены или установлены, даже если их значения такие же, как по умолчанию). См. Askubuntu.com/q/420527/26246 . Также не вся БД, вы можете установить путь. например:dconf dump /com/
dconf load / < file
без входа в систему как пользователь.sudo su username2 -c "dconf load / < file"