我开始编写自己的 Gnome Shell 扩展,但找不到这个问题的任何答案 -> 有什么办法吗,如何仅通过扩展代码在机器上安装 gsettings 模式(例如,不将 schema.xml 复制到glib-2.0/schemas
目录中并通过终端进行编译)?
如果我尝试“访问”未安装的架构,它就会开始崩溃,并且查看器不断提示不存在这样的架构。对于想要安装这些扩展的潜在用户来说,这确实很不舒服。
答案1
从我所能找到的所有内容(google 和 gtk 文档)来看,您似乎已经找到了通过 Web 浏览器安装的扩展无法通过 dconf/GSettings 存储设置的原因 - 您必须在系统级别安装 dconf 架构。似乎没有办法拥有每个用户的架构 - dconf 仅使用单个编译的二进制文件。
关于在 Gnome 3.4 中添加对此支持的声明使我相信他们将要 a) 为扩展存储设置实现一种替代方法,或 b) 以允许用户在 $HOME 下安装/编译模式的方式扩展 GSettings/dconf。
如果有人可以证实这一点(或通过引用文献来反驳这一点),我和其他许多人相信都会很感激。
这篇文章提到了限制,但没有具体解释原因......http://www.ubuntubuzz.com/2011/12/gnome-shell-extensions-website-has-been.html
答案2
目前还不行。这甚至不是扩展限制,而是核心限制:GSettings 库中没有用于以编程方式编译架构的方法。您确实需要使用命令行工具来实现这一点。
默认情况下,手动复制架构~/.local/glib-2.0/schemas
并在那里编译是行不通的,因为 GSettings 会在XDG_DATA_DIRS
环境变量中列出的目录中搜索架构。如果您添加~/.local/glib-2.0/schemas
到XDG_DATA_DIRS
它应该可以工作。
答案3
我认为这一点自之前的回答以来已经发生了变化,扩展可以将设置存储在 gsettings 中,而无需触及系统范围的架构目录。例如,要在 gnome.extensions.org 上发布,您只需在已发布的扩展中包含您的架构及其编译版本:
https://gjs.guide/extensions/review-guidelines/review-guidelines.html#gsettings-schemas
不过,这些都是针对每个用户的架构。令人困惑的是,像gsetting
和这样的工具dconf
只会读取安装在/usr/share/glib-2.0/schemas/
需要 root 才能更改/更新的系统范围的架构。因此,根据您使用的工具,您可能会看到“缺少架构”,但它不会阻止扩展使用 gsettings。