我想使用非交互式脚本配置 Gnome 终端。我知道如何配置现存的配置文件,但这需要配置文件 ID:
# List the UUIDs
gsettings get org.gnome.Terminal.ProfilesList list
# Set palette colors, for instance:
gsettings set org.gnome.Terminal.Legacy.Profile:/org/gnome/terminal/legacy/profiles:/:<profile ID> [<list of palette colors>]
但如何创造来自命令行的终端配置文件?
更一般地讲,这些东西都记录在哪里?man gsettings
说明的内容很少。例如,如果模式名称包含单词“legacy”,那么执行相同操作的“现代”方法是什么?或者,例如,它/org/gnome/terminal/legacy/profiles
来自哪里?我在一篇博客文章中找到了它,但应该在某处有一些文档,不是吗?
我正在使用 OpenSuse Leap 15.2
答案1
GSettings 是一些特定于平台的设置存储 API 的抽象接口,例如 Windows 上的 Registry 或 Linux 上的 dconf。GSettings 强制执行强类型和架构合规性,而底层 dconf 仅存储键/值而不进行任何检查。
通常,每个 GSettings 架构只有一个实例,架构名称直接映射到单个 dconf 位置 -org.gnome.Foo
存储为/org/gnome/Foo
dconf 中的文件夹。(尽管架构可以覆盖此,因此/terminal
和之间不匹配.Terminal
。)
dconf dump /org/gnome
但是 GNOME 终端需要多个实例,因此它使用一项称为“可重定位模式”的功能,其中 dconf 存储路径是明确指定的,而不是根据模式 XML 描述自动确定的。(这是一种不太好实现的方式,但就是这样。)
我不确定哪里描述了奇怪的路径语法(如果有的话),但似乎第一个冒号后面的所有内容都只是一个长的 dconf 路径——似乎没有任何意义,而:/:foo
那些冒号只是成为“文件夹”名称的一部分。如果您启动dconf-editor
并浏览设置,您将看到以下层次结构:
org
└─ gnome
└─ terminal
└─ legacy
└─ profiles:
└─ :<profile ID>
因此,我要尝试做的第一件事就是选择一个新的随机 UUID,然后开始使用该 UUID 设置配置文件参数gsettings set
。
如果失败,只需直接使用dconf write
甚至dconf load
直接在 dconf 存储中设置相同的值。
例如,如果模式名称包含单词“legacy”,那么实现相同功能的“当代”方法是什么?
模式名称由应用程序(GNOME 终端)定义,具体词语不是 GSettings 可以发表意见的。
显然,在从旧版 GNOME 2.x“GConf”设置系统迁移到 3.x GSettings API 的同时,曾计划对 GNOME Terminal 进行彻底重写(即制作一个全新的 UI,仅保留 vte 终端小部件)。因此,当为旧版 Terminal 应用程序选择 GSettings 架构名称时,添加了“Legacy”一词。
(重写从未发生过。)