Dconf: различия между версиями
Нет описания правки |
|||
(не показаны 62 промежуточные версии 5 участников) | |||
Строка 1: | Строка 1: | ||
= Описание = | = Описание = | ||
'''Dconf''' – низкоуровневая система конфигурации. Система конфигурации dconf сохраняет настройки в виде реестра, работая в связке с утилитой GSettings. Dconf используется в различных средах, и в частности, для управления окружением MATE. | |||
Dconf это простая система конфигурации основанная на ключах. Ключи находятся в неструктурированной базе данных (ключи, логически связанные между собой, объединены в категории). База данных хранится в бинарном файле в формате GVDB (GVariant Database), который используется для эффективного хранения пар ключ-значение. | |||
Dconf основан на концепции '''«профиля»''', который представляет собой список баз данных конфигурации. Профиль определяет порядок загрузки этих баз, задавая приоритеты при чтении и записи данных. Базы данных бывают системные, хранящиеся в '''/etc/dconf/db/''', и пользовательские, расположенные в '''~/.config/dconf/user'''. Пользовательские настройки перезаписывают системные для конкретного пользователя. В профиле базы данных расположены в порядке приоритета вычитывания, с первой в списке имеющей наивысший приоритет. Dconf также поддерживает '''"блокировки"''', которые предотвращают изменение ключей в базах данных, следующих за заблокированным ключом, если блокировка выставлена в нескольких базах, то '''приоритет вычитывания будет инвертирован'''. | |||
Для обеспечения возможности настройки системы с помощью текстового редактора в dconf были введены каталоги с ключевыми файлами. Для любой системной базы данных можно создать соответствующий каталог (с добавлением ".d" к имени файла, например, "/etc/dconf/db/local.d"). Этот каталог содержит ключевые файлы в специальном формате, которые можно скомпилировать в базу данных dconf с помощью команды | |||
# dconf compile local /etc/dconf/db/local.d | |||
[[Файл:Profile_dconf.png|мини|слева|x400px|Clear|]] | |||
<div style="clear:{{{1|both}}};"></div> | |||
Правка параметров производится либо через консольные утилиты dconf, gsettings или через графическое приложение Dconf-editor. | |||
'''Установка редактора''' | |||
$ su - | |||
# apt-get install dconf-editor | |||
==Dconf-profile== | |||
'''Традиционный базовый профиль:''' | |||
user-db:user | |||
system-db:local | |||
system-db:site | |||
В этом примере пользовательская база данных (user-db:user) имеет наивысший приоритет, позволяя пользователю переопределять локальные системные настройки (system-db:local). Однако настройки в базе system-db:site могут содержать блокировки, которые запрещают изменение определённых параметров, даже если пользователь пытается их изменить через свою базу данных. | |||
Для более гибкого управления конфигурацией через групповые политики была разработана схема, включающая '''дополнительные уровни:''' | |||
user-db:user | |||
system-db:policy | |||
system-db:local | |||
system-db:default | |||
system-db:local | |||
system-db:policy | |||
Был добавлен слой Policy, который располагается между слоями Local и User, что позволяет отделить управляемые политиками параметры от локальных настроек. Это даёт возможность точно контролировать, какие параметры будут регулироваться политиками, а какие останутся на усмотрение локальных настроек. | |||
Введён также слой Default, который обеспечивает наличие базовых настроек по умолчанию, используемых системой, если они не переопределены другими слоями. Это гарантирует, что всегда будут применены какие-то настройки, даже если остальные слои не задействованы. Дополнительно в Dсonf используется возможность блокировки (Lock), которая защищает важные параметры от изменений. Совмещение слоёв Policy и Local с блокировками позволяет точно определить, какие параметры могут быть изменены пользователем, а какие защищены от изменений. | |||
==Архитектура Dconf== | |||
[[Файл:Dconf.png|мини|слева|x400px|Clear|]] | |||
<div style="clear:{{{1|both}}};"></div> | |||
Эта схема иллюстрирует, как приложения взаимодействуют с системой конфигурации Dconf, которая используется для хранения и управления настройками на уровне пользователя и системы в Linux-среде. | |||
Для редактирования содержимого базы данных с помощью текстового редактора можно использовать файлы формата .ini. Эти файлы содержат параметры конфигурации, которые можно изменять вручную. После того как вы создаете или редактируете такой .ini файл, его можно скомпилировать в конкретную базу данных Dconf с помощью команды | |||
dconf compile local /etc/dconf/db/local.d | |||
На схеме видно, что этот процесс идет через компиляцию .ini файла, что позволяет внедрить изменения в саму базу данных Dconf, которая затем может быть использована приложениями для чтения и записи настроек. | |||
Приложения могут '''читать''' настройки напрямую из бинарных файлов базы данных Dconf. Однако считывание значений происходит с учетом приоритетов, указанных в профиле Dconf. В профиле определяются источники конфигурации и их приоритеты. | |||
Каждое значение ключа может быть "заблокировано", что позволяет нивелировать приоритетность баз данных при чтении этого ключа, отдавая предпочтение базе, в которой этот ключ был заблокирован. Значения из базы данных Dconf можно считывать как с помощью команды dconf, так и с помощью gsettings. Таким образом, при чтении значений приложением сначала проверяются блокировки и приоритеты, после чего извлекаются данные из соответствующего источника в зависимости от настроек профайла. | |||
'''Запись''' в базу данных Dconf также производится с помощью команд dconf и gsettings. Для этого используется служба на D-Bus, обозначаемая как ca.desrt.dconf. | |||
Когда значение ключа изменяется, генерируется сигнал '''notify''', который уведомляет Приложение 2, о том, что его конфигурационные параметры были изменены. Это позволяет приложениям автоматически обновлять свои настройки или интерфейс в ответ на изменения, гарантируя, что они всегда используют актуальные данные. | |||
== Особенности == | == Особенности == | ||
'''Ограничения''': предлагаемые рецепты охватывают окружения рабочих столов, для настройки которых используются '''dconf''' и '''gsettings''' (MATE, GNOME, | '''Ограничения''': предлагаемые рецепты охватывают окружения рабочих столов, для настройки которых используются '''dconf''' и '''gsettings''' (MATE, GNOME, и т.д. ...). | ||
{{Attention|Нельзя запретить изменение какой-либо настройки, предварительно не установив её значение по умолчанию.}} | |||
{{Note|В Xfce используется своя система конфигурации '''Xfconf'''}} | |||
=Выполнение настройки= | |||
==Команды gsettings== | |||
Dconf хранит пары "ключ-значение" без контроля типов данных, что может усложнять управление. G-Settings решает эту проблему, позволяя задавать ключи в XML-формате с ограничениями на типы данных и значениями по умолчанию. G-Settings также интегрируется с Dconf, расширяя возможности управления конфигурациями. | |||
GSettings предоставляет функционал для управления настройками приложений, включая определение дефолтных значений и типы данных ключей. При создании схемы в GSettings можно указать дефолтные значения для каждого ключа, которые будут использоваться, если пользователь не изменил настройки. | |||
*Просмотр всех доступных схем: | |||
<source lang="text" highlight="1"> | |||
$ gsettings list-schemas | |||
org.gnome.libgnomekbd | |||
org.gtk.exampleapp | |||
org.gnome.system.proxy.http | |||
org.gnome.system.proxy.socks | |||
org.virt-manager.virt-manager.paths | |||
... | |||
org.gnome.desktop.privacy | |||
org.gnome.desktop.a11y.magnifier | |||
org.virt-manager.virt-manager.confirm | |||
org.gnome.desktop.media-handling | |||
org.gnome.desktop.default-applications.terminal </source> | |||
*Для рекурсивного перечисления ключей и значений используется следующая команда (Если СХЕМА не задана, перечисляются ключи во всех схемах): | |||
<source lang="text" highlight="1"> | |||
$ gsettings list-recursively | |||
org.gtk.exampleapp show-words false | |||
org.gtk.exampleapp transition 'none' | |||
org.gtk.exampleapp font 'Monospace 12' | |||
org.gnome.libgnomekbd.preview width -1 | |||
org.gnome.libgnomekbd.preview y -1 | |||
... | |||
org.gnome.desktop.interface clock-show-date true | |||
org.gnome.desktop.interface cursor-blink-time 1200 | |||
org.gnome.desktop.interface font-antialiasing 'grayscale' | |||
org.gnome.desktop.interface toolbar-icons-size 'large' | |||
org.gnome.desktop.interface gtk-timeout-repeat 20</source> | |||
<source lang="text" highlight="1"> | |||
$ gsettings list-recursively org.onboard.keyboard | |||
org.onboard.keyboard long-press-delay 0.5 | |||
org.onboard.keyboard audio-feedback-enabled false | |||
org.onboard.keyboard input-event-source 'XInput' | |||
org.onboard.keyboard touch-feedback-size 0 | |||
org.onboard.keyboard sticky-key-release-delay 0.0 | |||
org.onboard.keyboard sticky-key-behavior {'all': 'cycle'} | |||
org.onboard.keyboard audio-feedback-place-in-space false | |||
org.onboard.keyboard touch-input 'multi' | |||
org.onboard.keyboard modifier-update-delay 1.0 | |||
org.onboard.keyboard touch-feedback-enabled false | |||
org.onboard.keyboard show-secondary-labels false | |||
org.onboard.keyboard key-synth 'auto' | |||
org.onboard.keyboard sticky-key-release-on-hide-delay 5.0 | |||
org.onboard.keyboard show-click-buttons false | |||
org.onboard.keyboard default-key-action 'delayed-stroke' | |||
org.onboard.keyboard key-press-modifiers {'button3': 'SHIFT'} | |||
org.onboard.keyboard inter-key-stroke-delay 0.0</source> | |||
*Просмотр схем с указанием конкретного приложения: | |||
<source lang="text" highlight="1"> $ gsettings list-schemas | grep -i virt-manager | |||
org.virt-manager.virt-manager.vmlist-fields | |||
org.virt-manager.virt-manager.paths | |||
org.virt-manager.virt-manager.new-vm | |||
org.virt-manager.virt-manager.connections | |||
org.virt-manager.virt-manager | |||
org.virt-manager.virt-manager.urls | |||
org.virt-manager.virt-manager.stats | |||
org.virt-manager.virt-manager.details | |||
org.virt-manager.virt-manager.console | |||
org.virt-manager.virt-manager.confirm </source> | |||
*Теперь, когда вы нашли интересующую вас схему, можно перечислить ее ключи с помощью команды: | |||
<source lang="text" highlight="1"> | |||
$ gsettings list-keys org.virt-manager.virt-manager.stats | |||
enable-net-poll | |||
update-interval | |||
enable-memory-poll | |||
enable-disk-poll | |||
enable-cpu-poll</source> | |||
*Выберите один из них и посмотрите текущее значение: | |||
<source lang="text" highlight="1"> | |||
$ gsettings get org.virt-manager.virt-manager.stats enable-memory-poll | |||
false </source> | |||
*Данный ключ возвращает значение false, поэтому, чтобы изменить его, используйте конструкцию: | |||
== | <source lang="text" highlight="1">$ gsettings set org.virt-manager.virt-manager.stats enable-memory-poll true </source> | ||
==Настройка рабочего стола== | |||
{{Note|Например, у нас задача: поменять количество столбцов в меню приложений с 2 до 5.}} | |||
=== Поиск соответствий схемы настройкам рабочего стола === | |||
1. Для начала открываем консоль и набираем: | 1. Для начала открываем консоль и набираем: | ||
<source lang="text" highlight="1"> | <source lang="text" highlight="1"> | ||
$ gsettings list-schemas | grep | $ gsettings list-schemas | grep menu | ||
org.mate. | org.mate.mate-menu | ||
org.mate. | org.mate.mate-menu.plugins.system_management | ||
org. | org.mate.panel.menubar | ||
org.mate.mate-menu.plugins.applications | |||
org.mate.mate-menu.plugins.places | |||
org.mate.mate-menu.plugins.recent | |||
</source> | </source> | ||
Тем самым мы получим список схем, в которых может содержаться интересующая нас информация. Теперь выясняем, что именно из перечисленного отвечает за интересующие нас настройки рабочего стола. Можно открыть сразу несколько терминалов (или вкладок), введя в каждом команду со своим именем схемы: | Тем самым мы получим список схем, в которых может содержаться интересующая нас информация. Теперь выясняем, что именно из перечисленного отвечает за интересующие нас настройки рабочего стола. Можно открыть сразу несколько терминалов (или вкладок), введя в каждом команду со своим именем схемы: | ||
<source lang="text" highlight="1">$ gsettings monitor org.mate. | <source lang="text" highlight="1">$ gsettings monitor org.mate.mate-menu.plugins.applications</source> | ||
Открываем {{nav|Меню приложений|ПКМ|Настройки}}. | |||
Меняем параметры. При этом, в терминале, будут отображаться измененные параметры - схема/ключ/значение: | |||
<source lang="text" highlight="1">$ gsettings monitor org.mate.mate-menu.plugins.applications | |||
fav-cols: 3 | |||
fav-cols: 2 | |||
fav-cols: 3 | |||
fav-cols: 4 | |||
fav-cols: 3 | |||
fav-cols: 2 | |||
fav-cols: 1 | |||
fav-cols: 2 | |||
fav-cols: 3 | |||
fav-cols: 4 | |||
</source> | |||
Можно нажать {{button|Ctrl}}+{{button|C}} и получить для заданной схемы все ключи вместе с текущими значениями. | |||
Чтобы вывести список всех схем и их значений у указанного ключа, используйте следующую команду: | |||
<source lang="text" highlight="1">$ gsettings list-recursively org.mate.mate-menu.plugins.applications</source> | |||
Вывод команды: | |||
<source lang="text" highlight="1"> | <source lang="text" highlight="1"> | ||
$ gsettings list-recursively org.mate. | $ gsettings list-recursively org.mate.mate-menu.plugins.applications | ||
org.mate. | org.mate.mate-menu.plugins.applications enable-google true | ||
org.mate. | org.mate.mate-menu.plugins.applications last-active-tab 1 | ||
org.mate. | org.mate.mate-menu.plugins.applications fav-cols 2 | ||
org.mate. | org.mate.mate-menu.plugins.applications category-hover-delay 150 | ||
org.mate. | org.mate.mate-menu.plugins.applications icon-size 22 | ||
org.mate. | org.mate.mate-menu.plugins.applications categories-mouse-over true | ||
org.mate. | org.mate.mate-menu.plugins.applications minimized false | ||
org.mate. | org.mate.mate-menu.plugins.applications swap-generic-name false | ||
org.mate. | org.mate.mate-menu.plugins.applications enable-dictionary true | ||
org.mate.mate-menu.plugins.applications height 410 | |||
org.mate.mate-menu.plugins.applications enable-computer true | |||
org.mate.mate-menu.plugins.applications show-application-comments false | |||
org.mate.mate-menu.plugins.applications enable-ddg true | |||
org.mate.mate-menu.plugins.applications icon 'applications-accessories' | |||
org.mate.mate-menu.plugins.applications enable-wikipedia true | |||
org.mate.mate-menu.plugins.applications remember-filter false | |||
org.mate.mate-menu.plugins.applications search-command 'mate-search-tool --named "%s" --start' | |||
org.mate.mate-menu.plugins.applications sticky false | |||
org.mate.mate-menu.plugins.applications width 480 | |||
org.mate.mate-menu.plugins.applications favicon-size 24 | |||
org.mate.mate-menu.plugins.applications default-tab -1 | |||
org.mate.mate-menu.plugins.applications show-category-icons true | |||
org.mate.mate-menu.plugins.applications always-show-search false | |||
org.mate.mate-menu.plugins.applications do-not-filter false | |||
</source> | </source> | ||
== Установка настроек рабочего стола по умолчанию == | === Установка настроек рабочего стола по умолчанию === | ||
==== Установка настроек ==== | |||
'''Задача''': административно установить настройки рабочего стола, которые будут применяться у всех вновь создаваемых пользователей. | |||
{{Note|Эти изменения не затронут ранее созданных пользователей, которые уже используют графическую среду.}} | |||
{{Note|Пользователи смогут изменить установленные администратором настройки, если захотят. Чтобы заблокировать им такую возможность, читайте следующий раздел.}} | |||
{{Note|Например, сделаем в меню Mate 5 колонок вместо 2-х}} | |||
1. Все действия выполняем от имени '''root''': | |||
<source lang="text" highlight="1">$ su -</source> | <source lang="text" highlight="1">$ su -</source> | ||
2. Создаём файл {{path|/etc/dconf/profile/user}} следующего содержания: | |||
<pre> | <pre> | ||
Строка 56: | Строка 240: | ||
</pre> | </pre> | ||
4. | 3. Создаём файл {{path|/etc/dconf/db/local.d/00_mate-menu}}. Сохраняем в него ключи и значения, которые нас интересуют. В квадратных скобках указываем название схемы. | ||
{{Note|В этом файле имя ключа начинается без слеша!}} | |||
<pre> | |||
[org/mate/mate-menu/plugins/applications] | |||
fav-cols=5 | |||
</pre> | |||
4. Обновляем конфигурацию dconf | |||
<source lang="text" highlight="1"># dconf update</source> | |||
==== Блокировка настроек с помощью утилиты Dconf-locker ==== | |||
Утилита Dconf-locker позволяет автоматизировать блокировку изменения параметров dconf. | |||
Для установки выполните команду: | |||
# apt-get install dconf-locker | |||
===== Работа со всеми ключами===== | |||
Блокировка всех ключей: | |||
# dconf-locker -L | |||
Разблокировка всех ключей: | |||
# dconf-locker -U | |||
===== Работа с конкретным ключом===== | |||
Блокировка ключа: | |||
# dconf-locker -l org.mate.mate-menu.plugins.applications.fav-cols | |||
Разблокировка ключа: | |||
# dconf-locker -u org.mate.mate-menu.plugins.applications.fav-cols | |||
== | ===Отмена блокировки=== | ||
Удалите файлы в {{path|/etc/dconf/db/local.d/locks}}. | |||
# rm -f /etc/dconf/db/local.d/locks/* | |||
'''Задача''': административно заблокировать возможность изменения некоторых настроек рабочего стола. Например, чтобы обычный пользователь не мог изменять | === Блокировка настроек рабочего стола === | ||
{{Note|'''Задача''': административно заблокировать возможность изменения некоторых настроек рабочего стола. Например, чтобы обычный пользователь не мог изменять параметры меню приложений.}} | |||
6. Пока мы лишь определили значения, которые в дальнейшем будут использоваться по умолчанию. Пользователь всё ещё имеет возможность их поменять. Чтобы пользователь не мог внести изменения в настройки рабочего стола никакими средствами, создадим ещё один файл {{path|/etc/dconf/db/local.d/locks/ | 6. Пока мы лишь определили значения, которые в дальнейшем будут использоваться по умолчанию. Пользователь всё ещё имеет возможность их поменять. Чтобы пользователь не мог внести изменения в настройки рабочего стола никакими средствами, создадим ещё один файл {{path|/etc/dconf/db/local.d/locks/00_applications_menu}} следующего содержания: | ||
<pre> | <pre> | ||
/org/mate/ | /org/mate/mate-menu/plugins/applications/last-active-tab | ||
/org/mate/ | /org/mate/mate-menu/plugins/applications/fav-cols | ||
/org/mate/ | /org/mate/mate-menu/plugins/applications/icon-size | ||
/org/mate/ | /org/mate/mate-menu/plugins/applications/minimized | ||
/org/mate/ | /org/mate/mate-menu/plugins/applications/enable-computer | ||
/org/mate/ | /org/mate/mate-menu/plugins/applications/show-application-comments | ||
/org/mate/ | /org/mate/mate-menu/plugins/applications/icon | ||
/org/mate/mate-menu/plugins/applications/show-category-icons | |||
/org/mate/mate-menu/plugins/applications/always-show-search | |||
/org/mate/mate-menu/plugins/applications/do-not-filter | |||
</pre> | </pre> | ||
Строка 93: | Строка 294: | ||
<source lang="text" highlight="1"># dconf update</source> | <source lang="text" highlight="1"># dconf update</source> | ||
7. Новые настройки вступают в силу немедленно -- перелогиниваться необязательно. Попробуйте теперь открыть dconf-editor и изменить параметры по адресу {{path|/org/mate/mate-menu/plugins/applications/}} - они будут возвращаться к значениям по-умолчанию. | |||
=Некоторые настройки= | |||
==Сбросить внешний вид панели и меню Mate== | |||
$ dconf reset -f /org/mate/panel/ | |||
$ dconf reset -f /org/mate/mate-menu/ | |||
==Автоматическое монтирование флешек и др. носителей== | |||
===Mate=== | |||
Правим через dconf-editor параметр на true/false: | |||
/org/mate/desktop/media-handling/automount | |||
То же действие через консоль: | |||
$ gsettings set org.mate.media-handling automount false | |||
===Gnome=== | |||
Правим через dconf-editor параметр на true/false: | |||
/org/gnome/desktop/media-handling/automount | |||
То же действие через консоль: | |||
$ gsettings set org.gnome.media-handling automount false | |||
==Порядок расположения кнопок сворачивания-разворачивания-закрытия окон== | |||
===Mate=== | |||
Правим через dconf-editor параметр | |||
/org/mate/marco/general/button-layout | |||
правим значение переставляя параметры: | |||
'menu:minimize,maximize,close' | |||
===Gnome=== | |||
/org/gnome/desktop/wm/preferences/button-layout | |||
правим значение переставляя параметры: | |||
'menu:minimize,maximize,close' | |||
==Показывать/не показывать уведомления NetworkManager== | |||
Выключить: | |||
$ gsettings set org.gnome.nm-applet disable-disconnected-notifications "true" | |||
$ gsettings set org.gnome.nm-applet disable-connected-notifications "true" | |||
Включить: | |||
$ gsettings set org.gnome.nm-applet disable-disconnected-notifications "false" | |||
$ gsettings set org.gnome.nm-applet disable-connected-notifications "false" | |||
== Показывать системные значки рабочего стола == | |||
===Mate=== | |||
Правим через dconf-editor параметр | |||
/org/mate/caja/desktop | |||
Переключаем параметры: | |||
*computer-icon-visible | |||
*home-icon-visible | |||
*network-icon-visible | |||
*trash-icon-visible | |||
*volumes-visible | |||
в нужное положение и получаем на рабочем столе показ/скрытие значка компьютера, домашней папки, сетевого окружения, корзины и дисков. | |||
==Показ содержимого домашней папки на рабочем столе== | |||
Mate: | |||
Правим через dconf-editor параметр на true/false: | |||
/org/mate/caja/pereferences/desktop-is-home-dir | |||
== Показывать флаг страны вместо обозначения языка раскладки == | |||
Mate: | |||
Правим через dconf-editor параметр на true/false: | |||
/org/mate/desktop/peripherals/keyboard/indicator/show-flags | |||
== Выключить анимацию == | |||
===Mate=== | |||
Правим через dconf-editor параметр на true/false: | |||
/org/mate/desktop/interface/enable-animations | |||
===Gnome=== | |||
Правим через dconf-editor параметр на true/false: | |||
/org/gnome/desktop/interface/enable-animations | |||
== Настройка Vino == | |||
Правим через dconf-editor параметры по адресу: | |||
/org/gnome/desktop/remote-access | |||
=Резервное копирование и восстановление= | |||
==Резервное копирование и сброс настроек== | |||
#Резервное копирование | |||
#:<code>$ dconf dump '''путь''' > ~/'''файл'''</code> | |||
#:Например: | |||
#:<code>$ dconf dump '''/org/mate/''' > ~/'''dconf-mate-bak'''</code> | |||
#Сбрасываем настройки | |||
#:<code>$ dconf reset -f '''путь'''</code> | |||
#:Например | |||
#:<code>$ dconf reset -f '''/org/mate/'''</code> | |||
Затем, нужно выйти из системы и зайти в нее снова. | |||
==Восстановление== | |||
#Восстановление | |||
#:<code>$ dconf load '''путь''' < ~/'''файл'''</code> | |||
#Например: | |||
#:<code>$ dconf load '''/org/mate/''' < ~/'''dconf-mate-bak'''</code> | |||
[[Категория:HOWTO]] | [[Категория:HOWTO]] | ||
[[Категория:Desktop Environments]] | [[Категория:Desktop Environments]] | ||
{{Category navigation|title=Desktop Environments|category=Desktop Environments|sortkey={{SUBPAGENAME}}}} | {{Category navigation|title=Desktop Environments|category=Desktop Environments|sortkey={{SUBPAGENAME}}}} |
Текущая версия от 16:55, 21 ноября 2024
Описание
Dconf – низкоуровневая система конфигурации. Система конфигурации dconf сохраняет настройки в виде реестра, работая в связке с утилитой GSettings. Dconf используется в различных средах, и в частности, для управления окружением MATE.
Dconf это простая система конфигурации основанная на ключах. Ключи находятся в неструктурированной базе данных (ключи, логически связанные между собой, объединены в категории). База данных хранится в бинарном файле в формате GVDB (GVariant Database), который используется для эффективного хранения пар ключ-значение.
Dconf основан на концепции «профиля», который представляет собой список баз данных конфигурации. Профиль определяет порядок загрузки этих баз, задавая приоритеты при чтении и записи данных. Базы данных бывают системные, хранящиеся в /etc/dconf/db/, и пользовательские, расположенные в ~/.config/dconf/user. Пользовательские настройки перезаписывают системные для конкретного пользователя. В профиле базы данных расположены в порядке приоритета вычитывания, с первой в списке имеющей наивысший приоритет. Dconf также поддерживает "блокировки", которые предотвращают изменение ключей в базах данных, следующих за заблокированным ключом, если блокировка выставлена в нескольких базах, то приоритет вычитывания будет инвертирован.
Для обеспечения возможности настройки системы с помощью текстового редактора в dconf были введены каталоги с ключевыми файлами. Для любой системной базы данных можно создать соответствующий каталог (с добавлением ".d" к имени файла, например, "/etc/dconf/db/local.d"). Этот каталог содержит ключевые файлы в специальном формате, которые можно скомпилировать в базу данных dconf с помощью команды
# dconf compile local /etc/dconf/db/local.d
Правка параметров производится либо через консольные утилиты dconf, gsettings или через графическое приложение Dconf-editor.
Установка редактора
$ su - # apt-get install dconf-editor
Dconf-profile
Традиционный базовый профиль:
user-db:user system-db:local system-db:site
В этом примере пользовательская база данных (user-db:user) имеет наивысший приоритет, позволяя пользователю переопределять локальные системные настройки (system-db:local). Однако настройки в базе system-db:site могут содержать блокировки, которые запрещают изменение определённых параметров, даже если пользователь пытается их изменить через свою базу данных.
Для более гибкого управления конфигурацией через групповые политики была разработана схема, включающая дополнительные уровни:
user-db:user system-db:policy system-db:local system-db:default system-db:local system-db:policy
Был добавлен слой Policy, который располагается между слоями Local и User, что позволяет отделить управляемые политиками параметры от локальных настроек. Это даёт возможность точно контролировать, какие параметры будут регулироваться политиками, а какие останутся на усмотрение локальных настроек. Введён также слой Default, который обеспечивает наличие базовых настроек по умолчанию, используемых системой, если они не переопределены другими слоями. Это гарантирует, что всегда будут применены какие-то настройки, даже если остальные слои не задействованы. Дополнительно в Dсonf используется возможность блокировки (Lock), которая защищает важные параметры от изменений. Совмещение слоёв Policy и Local с блокировками позволяет точно определить, какие параметры могут быть изменены пользователем, а какие защищены от изменений.
Архитектура Dconf
Эта схема иллюстрирует, как приложения взаимодействуют с системой конфигурации Dconf, которая используется для хранения и управления настройками на уровне пользователя и системы в Linux-среде.
Для редактирования содержимого базы данных с помощью текстового редактора можно использовать файлы формата .ini. Эти файлы содержат параметры конфигурации, которые можно изменять вручную. После того как вы создаете или редактируете такой .ini файл, его можно скомпилировать в конкретную базу данных Dconf с помощью команды
dconf compile local /etc/dconf/db/local.d
На схеме видно, что этот процесс идет через компиляцию .ini файла, что позволяет внедрить изменения в саму базу данных Dconf, которая затем может быть использована приложениями для чтения и записи настроек.
Приложения могут читать настройки напрямую из бинарных файлов базы данных Dconf. Однако считывание значений происходит с учетом приоритетов, указанных в профиле Dconf. В профиле определяются источники конфигурации и их приоритеты. Каждое значение ключа может быть "заблокировано", что позволяет нивелировать приоритетность баз данных при чтении этого ключа, отдавая предпочтение базе, в которой этот ключ был заблокирован. Значения из базы данных Dconf можно считывать как с помощью команды dconf, так и с помощью gsettings. Таким образом, при чтении значений приложением сначала проверяются блокировки и приоритеты, после чего извлекаются данные из соответствующего источника в зависимости от настроек профайла.
Запись в базу данных Dconf также производится с помощью команд dconf и gsettings. Для этого используется служба на D-Bus, обозначаемая как ca.desrt.dconf. Когда значение ключа изменяется, генерируется сигнал notify, который уведомляет Приложение 2, о том, что его конфигурационные параметры были изменены. Это позволяет приложениям автоматически обновлять свои настройки или интерфейс в ответ на изменения, гарантируя, что они всегда используют актуальные данные.
Особенности
Ограничения: предлагаемые рецепты охватывают окружения рабочих столов, для настройки которых используются dconf и gsettings (MATE, GNOME, и т.д. ...).
Выполнение настройки
Команды gsettings
Dconf хранит пары "ключ-значение" без контроля типов данных, что может усложнять управление. G-Settings решает эту проблему, позволяя задавать ключи в XML-формате с ограничениями на типы данных и значениями по умолчанию. G-Settings также интегрируется с Dconf, расширяя возможности управления конфигурациями.
GSettings предоставляет функционал для управления настройками приложений, включая определение дефолтных значений и типы данных ключей. При создании схемы в GSettings можно указать дефолтные значения для каждого ключа, которые будут использоваться, если пользователь не изменил настройки.
- Просмотр всех доступных схем:
$ gsettings list-schemas
org.gnome.libgnomekbd
org.gtk.exampleapp
org.gnome.system.proxy.http
org.gnome.system.proxy.socks
org.virt-manager.virt-manager.paths
...
org.gnome.desktop.privacy
org.gnome.desktop.a11y.magnifier
org.virt-manager.virt-manager.confirm
org.gnome.desktop.media-handling
org.gnome.desktop.default-applications.terminal
- Для рекурсивного перечисления ключей и значений используется следующая команда (Если СХЕМА не задана, перечисляются ключи во всех схемах):
$ gsettings list-recursively
org.gtk.exampleapp show-words false
org.gtk.exampleapp transition 'none'
org.gtk.exampleapp font 'Monospace 12'
org.gnome.libgnomekbd.preview width -1
org.gnome.libgnomekbd.preview y -1
...
org.gnome.desktop.interface clock-show-date true
org.gnome.desktop.interface cursor-blink-time 1200
org.gnome.desktop.interface font-antialiasing 'grayscale'
org.gnome.desktop.interface toolbar-icons-size 'large'
org.gnome.desktop.interface gtk-timeout-repeat 20
$ gsettings list-recursively org.onboard.keyboard
org.onboard.keyboard long-press-delay 0.5
org.onboard.keyboard audio-feedback-enabled false
org.onboard.keyboard input-event-source 'XInput'
org.onboard.keyboard touch-feedback-size 0
org.onboard.keyboard sticky-key-release-delay 0.0
org.onboard.keyboard sticky-key-behavior {'all': 'cycle'}
org.onboard.keyboard audio-feedback-place-in-space false
org.onboard.keyboard touch-input 'multi'
org.onboard.keyboard modifier-update-delay 1.0
org.onboard.keyboard touch-feedback-enabled false
org.onboard.keyboard show-secondary-labels false
org.onboard.keyboard key-synth 'auto'
org.onboard.keyboard sticky-key-release-on-hide-delay 5.0
org.onboard.keyboard show-click-buttons false
org.onboard.keyboard default-key-action 'delayed-stroke'
org.onboard.keyboard key-press-modifiers {'button3': 'SHIFT'}
org.onboard.keyboard inter-key-stroke-delay 0.0
- Просмотр схем с указанием конкретного приложения:
$ gsettings list-schemas | grep -i virt-manager
org.virt-manager.virt-manager.vmlist-fields
org.virt-manager.virt-manager.paths
org.virt-manager.virt-manager.new-vm
org.virt-manager.virt-manager.connections
org.virt-manager.virt-manager
org.virt-manager.virt-manager.urls
org.virt-manager.virt-manager.stats
org.virt-manager.virt-manager.details
org.virt-manager.virt-manager.console
org.virt-manager.virt-manager.confirm
- Теперь, когда вы нашли интересующую вас схему, можно перечислить ее ключи с помощью команды:
$ gsettings list-keys org.virt-manager.virt-manager.stats
enable-net-poll
update-interval
enable-memory-poll
enable-disk-poll
enable-cpu-poll
- Выберите один из них и посмотрите текущее значение:
$ gsettings get org.virt-manager.virt-manager.stats enable-memory-poll
false
- Данный ключ возвращает значение false, поэтому, чтобы изменить его, используйте конструкцию:
$ gsettings set org.virt-manager.virt-manager.stats enable-memory-poll true
Настройка рабочего стола
Поиск соответствий схемы настройкам рабочего стола
1. Для начала открываем консоль и набираем:
$ gsettings list-schemas | grep menu
org.mate.mate-menu
org.mate.mate-menu.plugins.system_management
org.mate.panel.menubar
org.mate.mate-menu.plugins.applications
org.mate.mate-menu.plugins.places
org.mate.mate-menu.plugins.recent
Тем самым мы получим список схем, в которых может содержаться интересующая нас информация. Теперь выясняем, что именно из перечисленного отвечает за интересующие нас настройки рабочего стола. Можно открыть сразу несколько терминалов (или вкладок), введя в каждом команду со своим именем схемы:
$ gsettings monitor org.mate.mate-menu.plugins.applications
Открываем Меню приложений ▷ ПКМ ▷ Настройки.
Меняем параметры. При этом, в терминале, будут отображаться измененные параметры - схема/ключ/значение:
$ gsettings monitor org.mate.mate-menu.plugins.applications
fav-cols: 3
fav-cols: 2
fav-cols: 3
fav-cols: 4
fav-cols: 3
fav-cols: 2
fav-cols: 1
fav-cols: 2
fav-cols: 3
fav-cols: 4
Можно нажать Ctrl+C и получить для заданной схемы все ключи вместе с текущими значениями.
Чтобы вывести список всех схем и их значений у указанного ключа, используйте следующую команду:
$ gsettings list-recursively org.mate.mate-menu.plugins.applications
Вывод команды:
$ gsettings list-recursively org.mate.mate-menu.plugins.applications
org.mate.mate-menu.plugins.applications enable-google true
org.mate.mate-menu.plugins.applications last-active-tab 1
org.mate.mate-menu.plugins.applications fav-cols 2
org.mate.mate-menu.plugins.applications category-hover-delay 150
org.mate.mate-menu.plugins.applications icon-size 22
org.mate.mate-menu.plugins.applications categories-mouse-over true
org.mate.mate-menu.plugins.applications minimized false
org.mate.mate-menu.plugins.applications swap-generic-name false
org.mate.mate-menu.plugins.applications enable-dictionary true
org.mate.mate-menu.plugins.applications height 410
org.mate.mate-menu.plugins.applications enable-computer true
org.mate.mate-menu.plugins.applications show-application-comments false
org.mate.mate-menu.plugins.applications enable-ddg true
org.mate.mate-menu.plugins.applications icon 'applications-accessories'
org.mate.mate-menu.plugins.applications enable-wikipedia true
org.mate.mate-menu.plugins.applications remember-filter false
org.mate.mate-menu.plugins.applications search-command 'mate-search-tool --named "%s" --start'
org.mate.mate-menu.plugins.applications sticky false
org.mate.mate-menu.plugins.applications width 480
org.mate.mate-menu.plugins.applications favicon-size 24
org.mate.mate-menu.plugins.applications default-tab -1
org.mate.mate-menu.plugins.applications show-category-icons true
org.mate.mate-menu.plugins.applications always-show-search false
org.mate.mate-menu.plugins.applications do-not-filter false
Установка настроек рабочего стола по умолчанию
Установка настроек
Задача: административно установить настройки рабочего стола, которые будут применяться у всех вновь создаваемых пользователей.
1. Все действия выполняем от имени root:
$ su -
2. Создаём файл /etc/dconf/profile/user следующего содержания:
user-db:user system-db:local
3. Создаём файл /etc/dconf/db/local.d/00_mate-menu. Сохраняем в него ключи и значения, которые нас интересуют. В квадратных скобках указываем название схемы.
[org/mate/mate-menu/plugins/applications] fav-cols=5
4. Обновляем конфигурацию dconf
# dconf update
Блокировка настроек с помощью утилиты Dconf-locker
Утилита Dconf-locker позволяет автоматизировать блокировку изменения параметров dconf.
Для установки выполните команду:
# apt-get install dconf-locker
Работа со всеми ключами
Блокировка всех ключей:
# dconf-locker -L
Разблокировка всех ключей:
# dconf-locker -U
Работа с конкретным ключом
Блокировка ключа:
# dconf-locker -l org.mate.mate-menu.plugins.applications.fav-cols
Разблокировка ключа:
# dconf-locker -u org.mate.mate-menu.plugins.applications.fav-cols
Отмена блокировки
Удалите файлы в /etc/dconf/db/local.d/locks.
# rm -f /etc/dconf/db/local.d/locks/*
Блокировка настроек рабочего стола
6. Пока мы лишь определили значения, которые в дальнейшем будут использоваться по умолчанию. Пользователь всё ещё имеет возможность их поменять. Чтобы пользователь не мог внести изменения в настройки рабочего стола никакими средствами, создадим ещё один файл /etc/dconf/db/local.d/locks/00_applications_menu следующего содержания:
/org/mate/mate-menu/plugins/applications/last-active-tab /org/mate/mate-menu/plugins/applications/fav-cols /org/mate/mate-menu/plugins/applications/icon-size /org/mate/mate-menu/plugins/applications/minimized /org/mate/mate-menu/plugins/applications/enable-computer /org/mate/mate-menu/plugins/applications/show-application-comments /org/mate/mate-menu/plugins/applications/icon /org/mate/mate-menu/plugins/applications/show-category-icons /org/mate/mate-menu/plugins/applications/always-show-search /org/mate/mate-menu/plugins/applications/do-not-filter
и выполним команду:
# dconf update
7. Новые настройки вступают в силу немедленно -- перелогиниваться необязательно. Попробуйте теперь открыть dconf-editor и изменить параметры по адресу /org/mate/mate-menu/plugins/applications/ - они будут возвращаться к значениям по-умолчанию.
Некоторые настройки
Сбросить внешний вид панели и меню Mate
$ dconf reset -f /org/mate/panel/ $ dconf reset -f /org/mate/mate-menu/
Автоматическое монтирование флешек и др. носителей
Mate
Правим через dconf-editor параметр на true/false:
/org/mate/desktop/media-handling/automount
То же действие через консоль:
$ gsettings set org.mate.media-handling automount false
Gnome
Правим через dconf-editor параметр на true/false:
/org/gnome/desktop/media-handling/automount
То же действие через консоль:
$ gsettings set org.gnome.media-handling automount false
Порядок расположения кнопок сворачивания-разворачивания-закрытия окон
Mate
Правим через dconf-editor параметр
/org/mate/marco/general/button-layout
правим значение переставляя параметры:
'menu:minimize,maximize,close'
Gnome
/org/gnome/desktop/wm/preferences/button-layout
правим значение переставляя параметры:
'menu:minimize,maximize,close'
Показывать/не показывать уведомления NetworkManager
Выключить:
$ gsettings set org.gnome.nm-applet disable-disconnected-notifications "true" $ gsettings set org.gnome.nm-applet disable-connected-notifications "true"
Включить:
$ gsettings set org.gnome.nm-applet disable-disconnected-notifications "false" $ gsettings set org.gnome.nm-applet disable-connected-notifications "false"
Показывать системные значки рабочего стола
Mate
Правим через dconf-editor параметр
/org/mate/caja/desktop
Переключаем параметры:
- computer-icon-visible
- home-icon-visible
- network-icon-visible
- trash-icon-visible
- volumes-visible
в нужное положение и получаем на рабочем столе показ/скрытие значка компьютера, домашней папки, сетевого окружения, корзины и дисков.
Показ содержимого домашней папки на рабочем столе
Mate:
Правим через dconf-editor параметр на true/false:
/org/mate/caja/pereferences/desktop-is-home-dir
Показывать флаг страны вместо обозначения языка раскладки
Mate:
Правим через dconf-editor параметр на true/false:
/org/mate/desktop/peripherals/keyboard/indicator/show-flags
Выключить анимацию
Mate
Правим через dconf-editor параметр на true/false:
/org/mate/desktop/interface/enable-animations
Gnome
Правим через dconf-editor параметр на true/false:
/org/gnome/desktop/interface/enable-animations
Настройка Vino
Правим через dconf-editor параметры по адресу:
/org/gnome/desktop/remote-access
Резервное копирование и восстановление
Резервное копирование и сброс настроек
- Резервное копирование
$ dconf dump путь > ~/файл
- Например:
$ dconf dump /org/mate/ > ~/dconf-mate-bak
- Сбрасываем настройки
$ dconf reset -f путь
- Например
$ dconf reset -f /org/mate/
Затем, нужно выйти из системы и зайти в нее снова.
Восстановление
- Восстановление
$ dconf load путь < ~/файл
- Например:
$ dconf load /org/mate/ < ~/dconf-mate-bak