我的桌面上正在运行幻灯片(存储在中~/.local/share/shotwell/wallpaper/wallpaper.xml
),并且也在锁定屏幕中显示。
自 20.04 起,锁屏时当前图像会有模糊效果。
我只找到了如何在锁定屏幕上使用另一幅图像而不产生模糊的解决方案,但这会删除幻灯片。
如何消除模糊但保留幻灯片?
答案1
有一个名为“控制锁屏模糊效果”的扩展。
默认情况下,扩展的设置将模糊 Sigma 值设为 0,这意味着您可以看到没有任何模糊效果的壁纸。
您也可以选择从扩展设置中控制此值和亮度值。
答案2
关于赏金和对系统中未找到的 unlockDialog.js 的引用:
您在系统上找不到 unlockDialog.js 的原因是,它似乎是由 gjs 编译的源代码。
您所要求的是一个复杂过程的一部分。我认为处理这个问题的方法是下载源代码以进行必要的更改。
- 编辑 apt 源以添加 ubuntu 源包的源
- 安装 gnome-shell 源。(
apt source gnome-shell
) - 进入 gnome-shell 目录
cd /usr/share/gnome-shell/
- 编辑文件
/usr/share/data/org.gnome.shell.gschema.xml.in
并/usr/share/js/ui/unlockDialog.js
- 添加变更日志条目(文件
/usr/share/debian/changelog
)以将版本更新到高于从 Ubuntu 安装的版本 - 安装构建依赖项。这些包仅用于构建 gnome-shell 包(
sudo apt-get build-dep gnome-shell
) - 运行
debuild
命令来构建包。(通过 devscripts 包安装) - gnome-shell 目录所在的父目录中应该有一个 .deb 文件。
答案3
这建议补丁似乎添加了一个可以从其他地方进行管理的附加设置(据说是从gsettings
?)
无论如何,由于该unlockDialog.js
文件需要修改,我选择了一种更直接的方法:直接在此文件中禁用模糊效果。
修改后的文件 — 依赖于 gnome-shell 的gre资源覆盖功能——可以保存在用户的主目录中,方便用户随时进行后续编辑。
实现修改的步骤
unlockDialog.js
从二进制库中提取文件libgnome-shell.so
,- 将其建立为“gresource overlay”,以便 gnome-shell 以这种提取的形式使用它,
- 然后对提取的副本进行一些修改。
前两个步骤详细说明如下:Ubuntu 20.04 上 gnome-shell 的 UI javascript 文件在哪里?(看起来有很多需要理解的事情,但实际进行的改变并不多。)
对于第三步,修改unlockDialog.js
副本,存在几种不同的方法。
应用建议的代码更改的挑战
现在事情变得复杂的是,这个文件会随着时间的推移而不断改变,并且根据您拥有的具体版本,可能很难弄清楚如何应用任何更改建议。
unlockDialog.js 的样子如下现在位于gnome-3-36
撰写本文时(提交时6b20eb8e
)的分支中。
然而,建议的补丁引用了较旧的状态,从那时起该文件已经经历了这和这改变;都修改了关于模糊的部分。
考虑到这一点,我尝试建议一些最简单的更改,这些更改似乎即使在一些更新之后仍有机会保持相关性。
修改思路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);
放置return true;
在_updateBackgroundEffects()
方法中(作为第一行,除非您发现有理由不这样做)可以绕过该方法中语句后面的代码return
。
但是,在执行此操作之前,请检查代码块的内容,并尝试确定此方法是否正在执行某些其他外部方法稍后可能会尝试依赖的操作。如果您发现类似情况,请尝试在return
此类声明后添加该语句。(在撰写本文时,return
第一行中的语句(如上例所示)没有出现问题。)
effect.set({ ... });
(顺便说一句,您也可以简单地注释掉代码块。)
关于想法 2 的注释:
我在想:“难道我们一开始就不能定义一下效果吗?”所以我注意到了这一行:
let widget = new St.Widget({
// ...
effect: new Shell.BlurEffect({ name: 'blur' }),
});
但阅读提交信息在这里表明删除它可能会导致错误;因此,最好谨慎行事并保留这一行。
而且,我现在非常高兴,因为自从我安装 20.04 以来,锁屏背景的黑暗性质让我非常沮丧。
但现在这个问题对我来说也解决了。