dconf 转储输出和 gsettings 模式之间的映射

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 数据之间没有明确的对应关系。

有人可以解释一下或指出解释文档吗?谢谢。

答案1

通常,通过将斜线替换为点,反之亦然,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 按钮/滑块/首选项菜单来找出哪些模式受其控制。

答案2

为了进一步阐明 GSettings 和 DConf 之间的关系:

首先,它们是相同的系统。更准确地说,GSettings用途DConf 作为其存储后端

这就是 DConf:一个贮存系统。这就是为什么它只谈到路径:它将键和值存储在给定路径中。然后这些路径、键和值存储在二进制文件中来源. 将其视为dconf一个 ZIP 档案:它包含具有值的“文件”(键),按目录和子目录进行结构化。

对于 dconf,该数据没有语义。是的,它的值是强类型的(String、Integer、List、Boolean 等)。但它们没有意义. 它不关心(甚至知道) 关于模式

现在有了 GSettings。它以逻辑方式,与模式声明应用程序使用的所有设置、它们的描述和摘要。Schema 是设置集合的“蓝图”,具有唯一 ID。因此,应用程序(例如 Gnome Terminal)会安装该架构org.gnome.Terminal.Legacy.Settings。该架构表示“我的(旧版)设置有这个格式“。

GSettings(实际上是 GLib)负责在哪里如何这些设置将被保存,所以你不必这样做。理论上它可以使用 SQLite 或 MySQL 数据库。或者 INI 文件。或者 JSON。它使用 DConf,因此默认情况下它会将该模式保存在 dconf 的路径中/org/gnome/terminal/legacy/settings/

那么 GSettings 架构和 DConf 路径之间是否存在 1:1 映射?不可重新定位模式(稍后会详细介绍),是的。但是您无法从模式名称派生路径:即使最多模式存储在与模式类似的路径中,例如上面的 Gnome Terminal 示例,但情况并非总是如此:org.gnome.Vino例如,存储在/org/gnome/desktop/remote-access/。要获取存储模式的路径,请使用:

gsettings list-schemas --print-paths

而从路径推断模式...不要。你可以这样做“用。。。来/代替.仅适用于最基本的情况。它不适用于:

  • 带有 的模式Mixed.case.Names,例如 Gnome Terminal
  • 非标准路径中的模式,例如 Vino
  • 不可重定位架构

可重新定位? 是的,当使用相同的 Schema 时多个实例。例如,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 的桌面有另一个(我猜)并且其“设置守护进程”中有一个与鼠标相关的插件,无论它是什么。每个设置控制系统中的哪些行为取决于应用程序,但这超出了问题的范围。

相关内容