如何比较两台计算机的 dconf 文件并使用 `dconf dump` 或 `gsettings` 智能地合并它们

如何比较两台计算机的 dconf 文件并使用 `dconf dump` 或 `gsettings` 智能地合并它们

我有多台电脑运行 MATE 桌面版,我想合并它们的设置(然后保持同步)。使用dconf dump /我可以获得配置详细信息,但无法比较输出(使用meld),因为条目的显示顺序不一样,因此无法进行手动智能合并。

或者,我可以使用gsettings list-recursively给出一个可以排序然后进行比较的列表,但我不知道如何写回结果(没有类似dconf load这种文件格式的命令)。

我认为可能的方法有:

  • 对输出进行排序dconf dump(应该有一些实用程序,但我找不到)
  • 函数gsettings write-many,作为 的逆gsettings list-recursively
  • gsettings将列表转换为dconf dump格式
  • 对列表进行排序dconf dump

现有工具最容易的是什么?考虑到讨论这里保持配置同步的目标可能不太容易。

作为示例,我列出了我目前拥有的两种列表格式的简短片段:

gsetting产生(提取):

org.gnome.rhythmbox.podcast-source paned-position 180
org.gnome.rhythmbox.podcast-source sorting ('Feed', true)
org.blueman.transfer opp-accept false
org.blueman.transfer shared-path ''
org.mate.Caja.Sendto last-compress 0
org.mate.Caja.Sendto last-medium ''
org.gnome.evolution-data-server.calendar contacts-reminder-interval 15

dconf dump(不同的摘录):

[apps/light-locker]
idle-hint=false
late-locking=false
lock-after-screensaver=uint32 0
lock-on-lid=false
lock-on-suspend=false

[ca/desrt/dconf-editor]
saved-view='/org/mate/caja/'
window-height=600
window-is-maximized=false
window-width=800

答案1

暂时,我找到了一个简单的解决方案:

我发现从 收到的转储dconf在更新时变化很小。因此,首先加载一个转储,然后逐渐更新配置并生成新的转储就足够了。初始转储和最终转储可以用 meld 进行比较;可以进行合并。

我将其与 一起使用ansible,将currentTargetDump复制到其他机器并加载。这使得所有ansible host计算机都具有相同的配置。

在加载新配置之前,我会转储当前配置。我可以使用 Meld 将当前配置与目标配置进行比较,并将更改合并到目标配置中并将其写回,作为分发到所有主机的未来目标配置。

看起来很简单,到目前为止效果很好。

相关内容