移除锁屏界面的模糊效果

我在我的桌面上有一个幻灯片播放(存储在~/.local/share/shotwell/wallpaper/wallpaper.xml中),并且还显示在锁屏界面上。
自从20.04版本开始,在锁屏界面上的当前图片有模糊效果。
我只找到了如何在锁屏界面上使用另一张不带模糊的图片的解决方案,但这样会移除幻灯片播放功能。
我该如何去除模糊效果但保留幻灯片播放呢?

请问您能指出“如何在锁屏界面上使用另一张图片而不模糊”的解决方案吗? - Sri
关于赏金。Sri正在寻找对这个问题更详细的答案:相关代码的Gnome维护者提到了一个补丁(gitlab.gnome.org/GNOME/gnome-shell/-/issues/2721),需要在unlockDialog.js中将sigma值设置为0。我在我的笔记本上无法找到Gnome资源中的JS代码。我的Ubuntu版本是20.04.1 LTS,Gnome版本是3.36.8,使用的是X11窗口系统。我不想使用第三方扩展。 - rubo77
@Sri:我认为,我首先尝试了这个链接:https://askubuntu.com/questions/1227070/how-do-i-change-login-screen-theme-or-background-in-ubuntu-20-04 但是这并没有保留我的幻灯片演示。 - rubo77
3个回答

在锁屏界面上有一个称为“控制模糊效果”的扩展。

控制模糊效果 - Gnome Shell 扩展

默认情况下,该扩展的设置将模糊度(Blur Sigma)值设为0,这意味着您可以看到没有任何模糊效果的壁纸。

如果需要,您还可以从扩展设置中控制这个值以及亮度值。

enter image description here


你可以使用超级键(即Windows键)打开扩展的设置页面,然后在对话框中输入单词“extension”。 - rubo77
奇怪:有时候我在锁屏界面上仍然有模糊效果,有时候却没有 :-? - rubo77
我也注意到了,当我关闭笔记本电脑一段时间后再打开时,挂起操作可能会禁用扩展程序。 - PRATAP
但没关系,对于一种变化来说,模糊效果看起来也很有趣。 - rubo77
你的是台式机还是笔记本?它和暂停类似吗,还是其他什么情况?我能够复制你的操作吗? - PRATAP
在我的笔记本电脑上,我认为当它进入暂停状态时会禁用扩展功能,因为如果你使用<SUPER>+L来锁定屏幕,它可以正常工作而不会模糊。 - rubo77
是的,我也一样。 - PRATAP

关于赏金和对系统中未找到unlockDialog.js的引用:
你无法在系统中找到unlockDialog.js的原因是它似乎是由gjs编译的源代码。
你所要求的是一个复杂的过程的一部分。我建议你下载源代码并进行所需的更改。
1. 编辑apt源,添加Ubuntu源包的源。 2. 安装gnome-shell源代码。 (apt source gnome-shell) 3. 进入gnome-shell目录
cd /usr/share/gnome-shell/ 4. 编辑文件/ usr / share / data / org.gnome.shell.gschema.xml.in / usr / share / js / ui / unlockDialog.js 5. 添加变更日志条目(文件/ usr / share / debian / changelog ),将版本更新为高于从Ubuntu安装的版本。 6. 安装构建依赖项。这些是安装和仅用于构建gnome-shell软件包的软件包(sudo apt-get build-dep gnome-shell) 7. 运行debuild命令来构建软件包。(通过devscripts软件包安装) 8. 在gnome-shell目录的上级目录中应该有一个.deb文件。

这与在锁屏界面上通过修补Gnome源代码来消除模糊效果有关,该修补建议由Gnome相关代码的维护者提出(https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/2721)。 - Sri
1在引用的票证(gitlab.gnome.org/GNOME/gnome-shell/-/issues/2721)中,解决此问题的一个修补程序来自作者,需要编辑两个文件(data/org.gnome.shell.gschema.xml.in和js/ui/unlockDialog.js)。sri提供了更多信息的奖励,并要求有关此事的信息。这些文件不是通过软件包安装的,而是编译到gnome-shell软件包的二进制文件中。因此,解决方法是修改源代码。因此,这就是答案。 - user8169424
在这里找到了第一个文件:/usr/share/glib-2.0/schemas/org.gnome.shell.gschema.xml。第二个文件可以使用以下命令提取: gresource extract /usr/lib/gnome-shell/libgnome-shell.so /org/gnome/shell/ui/unlockDialog.js > unlockDialog.js 但是,文件中的代码与补丁中显示的代码并不完全相同。然而,在文件的开头有一个常量声明: const BLUR_SIGMA = 60; - Sri
@user8169424 如果您能查看JS代码并提出重新编译Shell的步骤以及经过测试的命令和语句,那将更有帮助。请参考第3步中的示例编辑。请查阅如何在回答中包含code的帮助文档。 - Sri

这个建议的补丁似乎添加了一个额外的设置,可以从其他地方进行管理(可能是从gsettings?)

无论如何,既然unlockDialog.js文件需要修改,我选择了一种更直接的方法:在这个文件中直接禁用模糊效果。

修改后的文件——依赖于gnome-shell的gresource叠加功能——可以保存在用户的主目录中,方便随时进行后续编辑。

实现修改的步骤

  1. libgnome-shell.so二进制库中提取unlockDialog.js文件,
  2. 将其建立为“gresource叠加”,以便gnome-shell以这种提取的形式使用它,
  3. 然后稍微修改提取的副本。
第一和第二步在这里详细解释:Ubuntu 20.04上gnome-shell的UI javascript文件在哪里?(看起来很多,但实际上所做的更改并不多。)
对于第三步,修改unlockDialog.js的副本,有几种不同的方法。
应用建议的代码更改的挑战
现在让事情变得复杂的是,这个文件随着时间的推移不断变化,根据你拥有的确切版本,可能很难弄清楚如何应用任何更改建议。 这是unlockDialog.js的样子,目前写作时位于gnome-3-36分支(提交为6b20eb8e)。

然而,建议的补丁参考了一个较早的状态,自那时以来,该文件经历了thisthis的修改;两者都修改了关于模糊的部分。

考虑到这一点,我试图提出可能保持相关性的最简单的修改。

修改unlockDialog.js的想法

想法1:

最简单的解决方案是更改BLUR_SIGMA变量的值:

// Old:
// const BLUR_BRIGHTNESS = 0.55;
// const BLUR_SIGMA = 60;

// New:
const BLUR_BRIGHTNESS = 1;
const BLUR_SIGMA = 0;

这将导致一个清晰的背景图像,与在正常桌面登录后的外观完全相同且未经修改。
(请注意,一旦将BLUR_SIGMA设置为0,即使BLUR_BRIGHTNESS小于1,也不会产生任何效果;实际上,只要SIGMA为0,编辑BLUR_BRIGHTNESS似乎是多余的。)
想法2:
如果您担心性能问题,可以完全阻止应用图形效果。然而,考虑到BLUR_SIGMA = 0似乎使整个效果无效,我认为已经没有太多额外开销了。

// Find this part:
    _updateBackgroundEffects() {
        const themeContext = St.ThemeContext.get_for_stage(global.stage);

// And modify it like this:
    _updateBackgroundEffects() {
        return true;
        const themeContext = St.ThemeContext.get_for_stage(global.stage);


在`_updateBackgroundEffects()`方法中放置`return true;`(作为第一行,除非你有理由不这样做),可以绕过该方法中位于`return`语句之后的代码。
然而,在这样做之前,请先查看代码块的内容,并尝试确定该方法是否执行了其他外部方法可能依赖的操作。如果你发现了类似的情况,请尝试在这样的声明之后添加`return`语句。(撰写本文时,第一行的`return`语句(如上例)没有出现问题。)
(顺便说一下,你也可以简单地注释掉`effect.set({ ... });`代码块。)
关于Idea 2的说明:
我在想:“我们甚至可以省去首次定义效果的步骤吗?”所以我注意到了这一行:
        let widget = new St.Widget({
            // ...
            effect: new Shell.BlurEffect({ name: 'blur' }),
        });

但是阅读这里的提交信息会发现,删除它可能会导致错误;所以最好还是保险起见,将这行代码保留在原位。
我现在非常开心,因为自从我安装了20.04以来,锁屏背景的昏暗特性让我感到非常沮丧。
不过现在问题也解决了。

我可以避免使用扩展来适应你的操作方式。但仍有一个令人烦恼的问题。登录界面仍然是紫色的屏幕。这种模糊禁用只对锁定屏幕有效,而对注销屏幕无效。我尝试按照这里建议的方法设置登录界面背景:https://wiki.archlinux.org/index.php/GDM#Log-in_screen_background_image,但没有成功。不过,那是针对Archlinux的。对于Ubuntu有什么想法吗? - Sri
1@Sri 我无法更改锁屏背景,也无法更改“注销”(紫色)背景。这是我见过的人们最接近更改锁屏的方式,但我无法跟随(我也不想使用扩展来实现这个功能)。而且,我对注销背景也没有付出太多努力。锁屏界面属于gnome-shell领域,而“注销”界面则属于GDM3。它们密切相关:GDM3似乎是gnome-shell的一个较小的兄弟(甚至一起打包?),但它们是不同的东西。 - Levente
1这些设置被gnome-shell开发团队故意淘汰,遵循一些“战略纪律”。如果你导航到org.gnome.desktop.screensaver命名空间,你仍然可以在dconf-editor应用程序中看到这些设置的残留。但它们不再生效。在我遇到这个问题之前,我对此的感受就是这样。 - Levente
2他们似乎只是为了满足Jira工单而工作,而不是为了满足人们的需求。他们看不到Jira工单和IDE窗口之外的东西,并且似乎更喜欢这种方式。我个人认为这对Linux来说是非常悲哀的日子,因为Canonical不能再通过提供Unity(也是基于gnome的)作为“缓冲”,来保护Ubuntu用户免受这种影响。 - Levente
我正在等待Ubuntu 21.04的发布。然后计划深入研究解决登录背景问题。这是我美妙的背景图片(https://imgur.com/gallery/d9zLbVq),我希望它能跨越我的两个屏幕 :) - Sri