отображение между dconf выводит схемы gsettings и вывод

Например:

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 данными - насколько я вижу.

Может кто-то объяснять или указывать на меня на объяснительную документацию.Спасибо.

4
задан 11 August 2018 в 03:02

2 ответа

Как правило, dconf схемы хорошо переводят в gsettings схемы, заменяя косые черты точками и наоборот.

В вашем примере org.mate.peripherals-mouse является наиболее близким соответствием для того, что я ожидаю, чтобы быть статической схемой.

Однако, не все gsettings схемы хорошо переводятся. Существует нечто, известное как перемещаемые схемы :

Перемещаемая схема - это то, что вам нужно, когда вам нужно несколько экземпляров одной и той же конфигурации, хранящихся отдельно. Типичным примером этого являются учетные записи: ваше приложение позволяет создавать более одного, и каждый из них имеет одинаковую информацию о конфигурации, связанную с ним.

Для таких случаев схема также требует добавления определенного пути к ней. Например, ,

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, чтобы выяснить, какие схемы управляются этими

.
3
ответ дан 1 December 2019 в 10:31

Чтобы уточнить связь между 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
  • Схем с нестандартными путями, таких как Vino
  • Неперемещаемых схем

Перемещаемый? Да, когда одна и та же схема используется в нескольких экземплярах. Например, 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 есть другой для рабочего стола (я полагаю) и плагин, связанный с мышью, в его «демоне настроек»,что бы это ни было. Какое поведение в вашей системе контролирует каждый параметр, зависит от приложения, но это выходит за рамки вопроса.

2
ответ дан 14 September 2020 в 12:49

Другие вопросы по тегам:

Похожие вопросы: