(可能与解锁 Light-Locker 后,屏幕保持空白的情况与锁定时间成正比)
我最近从 xscreensaver 切换到 light-locker,因为在升级到 xscreensaver 6.00 的过程中遇到了一个烦人的错误。
我对这次切换非常满意,除了以下问题:当我解锁回会话时,浏览器似乎以某种方式暂停或可能只是丢失了网络,因为:
- Electron 应用程序显示它们正在重新连接(并不是真正的问题)
- Firefox 似乎正在执行大约 2 分钟的 CPU 密集型工作(用于夜间锁定),并且在该时间范围内无法使用。我想它正在赶上它错过的一切吗?
Firefox 2 分钟不工作确实很麻烦。
缩小范围的事情:
- 它位于具有连续网络访问权限的桌面盒子上。 (不是笔记本电脑在盖子关闭等情况下会失去无线网络。)
- 我观察到其他应用程序(在锁定之前从命令行启动)在会话锁定时具有网络访问权限。 (他们继续提供数据)。
- 我在锁定期间进入了盒子并使用 ps/top,我确定 firefox 没有“kill -STOPed”
所以我最好的猜测是,有些东西告诉浏览器在会话锁定时停止使用网络。知道那可能是什么吗?也许与 systemd 相关?
在会话锁定时暂停浏览器听起来并不是一个可怕的主意,但是有什么方法可以了解 Firefox 在这 2 分钟内正在做什么呢? (尝试去about:performance
不会做任何事情,因为 Firefox 太忙了,甚至无法回答这个问题)。
更新(2021 年 10 月 10 日):
它看起来像light-locker
调用loginctl lock-session ...
,我认为这就是驱动浏览器行为的原因。这个答案@user1686 建议loginctl
向所有应用程序发送一个“锁定”信号,所以我想我现在需要做的是找出 Firefox 对此如何响应以及它为何挂起。
主要更新(2021 年 10 月 16 日):
通过一些strace
-ing和实验,我将范围进一步缩小到一个不太可能的地方:硬件加速!
在长达数分钟的繁忙循环中,Firefox 当然进行了大量的系统调用,但这些确实引起了我的注意:
[pid 165855] 13:07:06 ioctl(35</dev/dri/card0>, DRM_IOCTL_I915_GEM_BUSY, 0x7f16e5c96220) = 0
[pid 165855] 13:07:06 ioctl(35</dev/dri/card0>, DRM_IOCTL_I915_GEM_MADVISE, 0x7f16e5c96220) = 0
[pid 165855] 13:07:06 ioctl(35</dev/dri/card0>, DRM_IOCTL_I915_GEM_PWRITE, 0x7f16e5c96260) = 0
[pid 165855] 13:07:06 ioctl(35</dev/dri/card0>, DRM_IOCTL_I915_GEM_BUSY, 0x7f16e5c96220) = 0
[pid 165855] 13:07:06 ioctl(35</dev/dri/card0>, DRM_IOCTL_I915_GEM_MADVISE, 0x7f16e5c96220) = 0
[pid 165855] 13:07:06 ioctl(35</dev/dri/card0>, DRM_IOCTL_I915_GEM_PWRITE, 0x7f16e5c96260) = 0
[pid 165855] 13:07:06 ioctl(35</dev/dri/card0>, DRM_IOCTL_I915_GEM_BUSY, 0x7f16e5c96220) = 0
[pid 165855] 13:07:06 ioctl(35</dev/dri/card0>, DRM_IOCTL_I915_GEM_MADVISE, 0x7f16e5c96220) = 0
[pid 165855] 13:07:06 ioctl(35</dev/dri/card0>, DRM_IOCTL_I915_GEM_PWRITE, 0x7f16e5c96260) = 0
[pid 165855] 13:07:06 ioctl(35</dev/dri/card0>, DRM_IOCTL_I915_GEM_BUSY, 0x7f16e5c96220) = 0
[pid 165855] 13:07:06 ioctl(35</dev/dri/card0>, DRM_IOCTL_I915_GEM_MADVISE, 0x7f16e5c96220) = 0
(重复了很多次,不完全是上面的模式)
首先,我禁用了“Google Inc. 提供的 Widevine 内容解密模块”。插入。那没有帮助。
然后我尝试在“性能”→“设置”中禁用“可用时使用硬件加速”,结果成功了:第二天,我解锁后,Firefox 立即可用!
虽然我眼前的问题得到了解决,但仍然给我留下了很多问题:
- 这个硬件加速盒看起来像是一个相当粗糙且不透明的开关,它的控制能力比我想象的要多(DRM?!?)。它到底有什么作用?
- 我仍然不知道loginctl如何与浏览器通信。 D 总线消息?
- 这两者是如何联系在一起的?有没有办法获得一些比输出更容易理解的内部日志
strace
?
小更新(2021 年 10 月 17 日):
取消勾选数字版权管理 (DRM) 内容 → 播放受 DRM 控制的内容无法解决问题(即我无法重新打开硬件加速)
小更新(2021 年 10 月 18 日):
勾选“性能”→“使用推荐的性能设置”也不会做正确的事情。
我想我现在已经准备好提交该错误报告了。