我在 Debian 网站上找到了 gnome-shell UI js 文件的源代码:
https://sources.debian.org/src/gnome-shell/3.38.2-1/js/ui/
然后我也在这里找到了这个答案,它指出这个路径/文件前段时间存在于 Ubuntu 中:
/usr/share/gnome-shell/js/ui/windowManager.js
但是,现在我js
在/usr/share/gnome-shell/
.
我在整个/
分区中搜索了“lightbox.js”和“windowManager.js”,但没有找到。
我在哪里可以找到这些文件,如果我想更改其中一些硬编码变量的值,我需要克服哪些障碍?
答案兼容:
Ubuntu 20.04.2
gnome-shell 版本:3.36.4
显示服务器:X.Org Server
重要的提示:
在更改 gnome-shell 的文件时犯任何错误都可能导致图形会话陷入僵局。仅当您熟悉系统恢复的常用方法时才尝试它。
此外,在此答案中执行更改将需要额外的工作流程来谨慎处理 gnome-shell 更新,如下所述。
在 Ubuntu 20.04 上,gnome-shell 的 javascript 文件通常打包在文件中:
/usr/lib/gnome-shell/libgnome-shell.so
要覆盖它们,需要提取主题文件的副本,并要求 Gnome 使用这些副本。
下面我提供了一个抽象的、与任务无关的漫游。要查看针对特定实际任务的类似过程,请参阅此答案。
要修改的文件副本可以组织在任意位置,在本次演练中,我使用以下位置:
~/.gnome-shell-custom-overlays/
要启用此“自定义平台”,需要将以下行放入~/.profile
:
export G_RESOURCE_OVERLAYS="/org/gnome/shell=$HOME/.gnome-shell-custom-overlays"
要使其生效,需要注销并重新登录。
关于依赖项的说明:
在我的机器上运行这个程序之前,我已经libgtk-3-dev
安装了这个包。它用于开发/调试,就像资源覆盖功能似乎如此。因此,现在我无法确定是否尊重G_RESOURCE_OVERLAYS
环境变量取决于此包的存在...以防万一,准备安装它。
设置主题文件:
可以列举libgnome-shell.so
如下内容:
gresource list /usr/lib/gnome-shell/libgnome-shell.so
下一步是提取要修改的文件。让我们使用一个示例,其中该文件位于 gnome-shell 的ui/
子目录中。
mkdir ~/.gnome-shell-custom-overlays/ui
gresource extract /usr/lib/gnome-shell/libgnome-shell.so \
/org/gnome/shell/ui/fileName.js > ~/.gnome-shell-custom-overlays/ui/fileName.js
调整:
要查看自定义文件的调整效果,似乎有必要在每次编辑后重新加载 gnome-shell。可以r
通过运行命令对话框(由Alt+显示F2)发出命令来快速完成。
在这一点上,您应该有一个工作覆盖,它通过重新启动而持续存在。
恢复注意事项:
如果修改尝试去错了,应该可以切换到虚拟控制台环境(如Ctrl+ Alt+ F3)。从那里,注释掉该G_RESOURCE_OVERLAYS
行~/.profile
并随后重新启动应该解除覆盖,从而具有恢复系统的能力。
此功能可能主要用于调试和开发,而不是永久使用。
系统的稳定性可能会受到影响:当我第一次启用此功能时,我看到一些以前没有遇到过的声音设置异常,以及一些窗口闪烁。gnome-shell 的几次重新启动和(几次?)重新启动(s?)解决了它,从第二天开始我没有遇到任何进一步的异常。
此外,在“日志”应用程序中,我可以看到使用 G_RESOURCE_OVERLAYS 的事件记录在“安全”部分,因此值得考虑。
关于在使用 G_RESOURCE_OVERLAYS 时接收系统更新:
以下部分完全是猜测,我无法确认其中是否有效;然而,考虑以下因素可能会有所帮助:
如果 gnome-shell 收到更新,我认为自定义 gnome-shell 文件可能会失去兼容性,甚至可能导致桌面损坏。
我相信在这种情况下,可以通过~/.profile
(如恢复部分所述)暂停使用 G_RESOURCE_OVERLAYS 功能,随后重复从新的 中提取主题文件libgnome-shell.so
,并以兼容的方式重新应用修改。
如果更新导致此类不兼容事件,我推测一些风险涉及在执行更新的配置阶段时桌面已经崩溃;我可以预见在这种情况下对其他系统造成的重大附带损害。(我可能错了。)
尽管如此,出于这个原因,我会考虑让 gnome-shell 更新与其他更新分开安装,以便该事件不会干扰其他软件包的安装。
一层控制,为了稳定:
为了管理上述风险,可以将 gnome-shell置于hold
status 状态,以防止安装更新,直到准备好处理它们为止。
该过程如下所示:
sudo apt-mark hold gnome-shell
~/.profile
,然后重新启动 gnome-shell
sudo apt-mark unhold gnome-shell
~/.profile
并重新启动 gnome-shell
libgnome-shell.so
我认为,如果不是永久依赖资源叠加功能,而是将修改后的文件编译回libgnome-shell.so
(因为更新不会导致不兼容事件;而是libgnome-shell.so
一次性重写),我认为可以避免更新的风险.
然而,不幸的是,这项任务似乎依赖于大量的 Gnome 和/或 Ubuntu 开发人员专有技术;仅仅围绕代码编辑器的敏捷性似乎并不能解决问题。
编译器 glib-compile-resources 需要一个 XML 格式的要编译的资源列表,并且它的输出不能轻易地重新附加到现有的 .so ELF 文件。
猜测是,您缺少 gnome-shell 的低级部分使用的 C 代码,该代码与 JavaScript 资源位于同一库中。
如果您通过从源代码(例如在 jhbuild 中)编译获得 gnome-shell [...]
如果您从 Debian、Ubuntu [...] 等发行版获得 gnome-shell,您将需要应用您的 JavaScript 更改作为对该发行版的 gnome-shell 包的本地更改,使用本地更改重建 gnome-shell 包版本号,并安装新包。
从源代码编译整个 gnome-shell 是一个不小的特性。实际上它的影响如此广泛,显然它可能出错的地方太多了,我个人觉得它使选择的合理性受到质疑。
不过,如果您可以分享在 Ubuntu 上下文中成功编译 gnome-shell 的实际步骤,请提交答案。
参考文献/文献:
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句