我有多台电脑运行 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 将当前配置与目标配置进行比较,并将更改合并到目标配置中并将其写回,作为分发到所有主机的未来目标配置。
看起来很简单,到目前为止效果很好。