Например:
dconf dump / | grep mouse
[org/mate/desktop/peripherals/mouse]
....
Таким образом, если я хочу сделать команду gsettings на основе этого вывода, я обращаюсь к gsettings для списка схем, но....
(вывод, отредактированный для включения только вероятных кандидатов):
gsettings list-schemas | grep mouse
....
org.mate.peripherals-mouse
org.gnome.desktop.peripherals.mouse
org.mate.SettingsDaemon.plugins.mouse
....
Таким образом, это не ясно мне, которого из этих схем мыши я должен использовать. Мое понимание - то, что gsettings являются интерфейсом командной строки к dconf базе данных, но нет никакой ясной корреспонденции между данными gsettings и dconf данными - насколько я вижу.
Может кто-то объяснять или указывать на меня на объяснительную документацию.Спасибо.
Как правило, dconf
схемы хорошо переводят в gsettings
схемы, заменяя косые черты точками и наоборот.
В вашем примере org.mate.peripherals-mouse
является наиболее близким соответствием для того, что я ожидаю, чтобы быть статической схемой.
Однако, не все gsettings
схемы хорошо переводятся. Существует нечто, известное как перемещаемые схемы :
Перемещаемая схема - это то, что вам нужно, когда вам нужно несколько экземпляров одной и той же конфигурации, хранящихся отдельно. Типичным примером этого являются учетные записи: ваше приложение позволяет создавать более одного, и каждый из них имеет одинаковую информацию о конфигурации, связанную с ним.
blockquote>Для таких случаев схема также требует добавления определенного пути к ней. Например, ,
gsettings set org.compiz.unityshell:/org/compiz/profiles/unity/plugins/unityshell/ dash-blur-experimental 1
Вот еще один пример из одной из настольных схем Budgie:
$ dconf write /com/solus-project/budgie-panel/panels/{5f6251f2-9d09-11e8-be4b-d053493d53fd}/size 52 $ gsettings set com.solus-project.budgie-panel.panel:/com/solus-project/budgie-panel/panels/{5f6251f2-9d09-11e8-be4b-d053493d53fd}/ size 52
Обычно пути для перемещаемых
.gsettings
схем такие же, как дляdconf
, но это не гарантировано из того, что я понимаю. Вручную можно было бы запуститьdconf watch /
и использовать меню кнопок / ползунков / настроек GUI, чтобы выяснить, какие схемы управляются этими
Чтобы уточнить связь между GSettings и DConf:
Прежде всего, они являются частью одной и той же системы. Чтобы быть более точным, GSettings использует DConf в качестве системы хранения.
И это то, чем является DConf: система хранения. Вот почему он говорит только в терминах путей: он хранит ключи и значения по заданному пути. Эти пути, ключи и значения затем сохраняются в двоичном источнике . Думайте о dconf
как о ZIP-архиве: он содержит «файлы» (ключи) со значениями, структурированные в каталогах и подкаталогах.
Для dconf эти данные не имеют семантики. Да, его значения строго типизированы (String, Integer, List, Boolean и т. д.). Но они не имеют значения. Ему все равно (или даже знать) о схемах.
Теперь GSettings. Он упорядочивает данные логическим способом, используя схемы, объявляющие все настройки, используемые приложением, их описание и сводку. Схема — это «чертеж» набора настроек с уникальным идентификатором. Итак, приложение, скажем, Gnome Terminal, устанавливает схему org.gnome.Terminal.Legacy.Settings
. Схема говорит: «Мои (устаревшие) настройки имеют этот формат ».
GSettings (на самом деле GLib) заботится о том, где и как будут сохраняться такие настройки, поэтому вам не нужно этого делать. Теоретически он может использовать базу данных SQLite или MySQL. Или INI-файлы. Или JSON. Он использует DConf, поэтому по умолчанию сохраняет эту схему по пути dconf /org/gnome/terminal/legacy/settings/
.
Имеется ли сопоставление 1:1 между схемами GSettings и путями DConf? Для неперемещаемых схем (подробнее об этом позже) да. Но вы не можете получить путь из имени схемы: даже если большинство схем хранятся в пути, похожем на схему, например, в приведенном выше примере терминала Gnome, это не всегда так: org.gnome .Vino
, например, хранится по адресу /org/gnome/desktop/remote-access/
.Чтобы получить пути, по которым хранятся схемы, используйте:
gsettings list-schemas --print-paths
И чтобы вывести схемы из путей... не делайте этого. Вы можете обойтись "заменить /
на .
" только в самых простых случаях. Это не будет работать для:
Mixed.case.Name
, таких как Gnome TerminalПеремещаемый? Да, когда одна и та же схема используется в нескольких экземплярах. Например, Gnome Terminal позволяет создавать несколько именованных профилей, которые являются частью настроек приложения. Поскольку все профили имеют одинаковый формат, все они используют один и тот же «чертеж», схему Gsettings org.gnome.Terminal.Legacy.Profile
. Данные для каждого профиля сохраняются в отдельном пути dconf, поэтому эта схема является перемещаемой.
Вот почему для перемещаемых схем приложение (и вы) должны указать и схему и путь при использовании gsettings
. При прямом доступе к dconf
, так как он не знает о схемах, вы используете только путь. Но нет отображения 1:1, поскольку перемещаемые схемы имеют отношение 1:N к путям.
Чтобы ответить на ваш вопрос: ни одна из перечисленных вами схем, связанных с мышью, не является перемещаемой схемой (они будут перечислены в gsettings list-relocatable-schemas
), поэтому вы можете для этого конкретного случая получить их пути DConf с
gsettings list-schemas --print-paths | grep -i mouse
Что касается «какой из них я должен использовать»? Ну, это зависит от того, какую настройку вы хотите изменить. Некоторые приложения могут иметь настройки, связанные с мышью. У Gnome Desktop есть один, у Mate есть другой для рабочего стола (я полагаю) и плагин, связанный с мышью, в его «демоне настроек»,что бы это ни было. Какое поведение в вашей системе контролирует каждый параметр, зависит от приложения, но это выходит за рамки вопроса.