我正在尝试在 Wayland 设备上开发 Gnome Shell 扩展项目(看看它是否可以移植到 Gnome 45)。到目前为止我的工作流程是:
journalctl
并使用其寻呼机搜索提及我的扩展的最新堆栈跟踪。我认为可以通过编辑
~/.local
中的扩展代码来消除步骤2和3。而且我认为可以使用 grep 来更好地管理巨大的 Journalctl 日志,以获取我的扩展名称周围的上下文,并使用仅获取最新日志的尾部。
但我无法处理的部分是,每次我想运行任何东西时,我都必须关闭整个开发环境,注销,登录,然后再次打开。显然这是必要的,因为 Wayland 应用程序无法处理消失的显示服务器,Gnome Shell is Wayland 显示服务器,并且 Gnome Shell 不知道如何在不重新启动自身的情况下重新加载其扩展。
有解决方法吗? Wayland 上的 Gnome Shell 45 上是否有 Looking Glass 函数调用或 CLI 命令可以重新加载扩展?我看到 this answer 提供了一个可以粘贴到 Looking Glass 中的脚本,但我认为它不能在 Gnome Shell 45 上工作,因为它需要访问需要导入的内容,而在 Gnome Shell 45 上则需要使用 ESM
import
语句完成,这不能在像 Looking Glass 这样的 REPL 中工作。
更好的是,有没有一种方法可以在 Wayland 环境中的窗口中运行 Gnome Shell,这样我就可以在与我用来在浏览器和编辑器之间切换的 Gnome Shell 实例不同的 Gnome Shell 实例中运行我的扩展程序?或者有没有办法在我的扩展上运行单元测试,这样我就可以确保它在启用/禁用时不会立即崩溃,而无需手动将其加载到完整的 Gnome Shell 中?
嵌套的 GNOME Shell,它允许在 Wayland 上运行嵌套实例。
我认为可以通过编辑 ~/.local 中的扩展代码来消除步骤 2 和 3。这是可能的,但您仍然需要登录/注销或运行嵌套会话。 JavaScript 运行时并不是为了以您可能想象的方式“卸载”代码而设计的。
或者有没有办法在我的扩展上运行单元测试,这样我就可以确保它在启用/禁用时不会立即崩溃,而无需手动将其加载到完整的 Gnome Shell 中?除了重新测试之外,我不知道还有谁能提出对扩展进行单元测试的好方法(请参阅
Simon Schneegan 的 CI 测试)。
GJS 文档网站,它指出
Wayland 会话支持在窗口中运行 GNOME Shell,因此可以在不中断当前会话的情况下测试扩展。
disturbing the current session
指的是在更改扩展的源代码后,您可以通过重新启动所在的 Gnome shell 来测试它(是的,现在)。您可以通过按
Alt+F2
然后输入
r
或
restart
然后输入来完成此操作。重新启动 Gnome shell 类似于重新加载 JS 运行时的注销/登录技巧。
回到 Wayland 方法:
$ dbus-run-session -- gnome-shell --nested --wayland
$ gnome-extensions enable [email protected]