如何以编程方式在 Gnome 终端中创建配置文件(从命令行)

如何以编程方式在 Gnome 终端中创建配置文件(从命令行)

我想使用非交互式脚本配置 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/Foodconf 中的文件夹。(尽管架构可以覆盖此,因此/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”一词。

(重写从未发生过。)

相关内容