Firefox 在解锁屏幕后似乎需要“追赶时间”(使用 light-locker/lightdm)

oba*_*adz 5 firefox logind drm loginctl light-locker

(可能与解锁 Light-locker 后,屏幕保持空白与锁定时间成正比有关

\n

我\xe2\x80\x99最近从xscreensaver切换到light-locker,因为在升级到xscreensaver 6.00期间遇到了一个烦人的错误。

\n

我对这次切换非常满意,除了以下问题:当我解锁回会话时,浏览器似乎以某种方式暂停或可能只是丢失了网络,因为:

\n
    \n
  • Electron 应用程序显示它们正在重新连接(并不是真正的问题)
  • \n
  • Firefox 似乎正在执行大约 2 分钟的 CPU 密集型工作(用于夜间锁定),并且在该时间范围内无法使用。我假设它\xe2\x80\x99s 赶上了它错过的一切?
  • \n
\n

Firefox 2 分钟不工作确实很麻烦。

\n

缩小范围的事情:

\n
    \n
  • 它位于具有连续网络访问权限的桌面盒子上。(不是笔记本电脑在盖子关闭等情况下会失去无线网络。)
  • \n
  • 我\xe2\x80\x99 观察到其他应用程序(在锁定之前从命令行启动)在会话锁定时具有网络访问权限。(他们继续提供数据)。
  • \n
  • 我\xe2\x80\x99ve在锁定期间进入盒子并使用ps/top,我\xe2\x80\x99ve确定firefox是\xe2\x80\x99t \xe2\x80\x9ckill -STOPed\xe2\x80\x9d
  • \n
\n

所以我最好的猜测是,有些东西告诉浏览器在会话锁定时停止使用网络。知道那可能是什么吗?也许与 systemd 相关?

\n

在会话锁定时暂停浏览器听起来并不是一个糟糕的主意,但是有什么方法可以了解 Firefox 在这 2 分钟内正在做什么呢?(尝试去about:performance不会做任何事情,因为 Firefox 太忙了,甚至无法回答这个问题)。

\n

更新(2021 年 10 月 10 日):

\n

它看起来像light-locker调用loginctl lock-session ...,我认为这就是驱动浏览器行为的原因。@user1686 的这个回答建议loginctl向所有应用程序发送一个“锁定”信号,所以我想我现在需要做的是找出 Firefox 对此如何响应以及为什么它会因此挂起。

\n

主要更新(2021 年 10 月 16 日):

\n

通过一些strace-ing和实验,我已经将范围进一步缩小到一个不太可能的地方:硬件加速!

\n

在长达数分钟的繁忙循环中,Firefox 当然进行了大量的系统调用,但这些确实引起了我的注意:

\n
[pid 165855] 13:07:06 ioctl(35</dev/dri/card0>, DRM_IOCTL_I915_GEM_BUSY, 0x7f16e5c96220) = 0\n[pid 165855] 13:07:06 ioctl(35</dev/dri/card0>, DRM_IOCTL_I915_GEM_MADVISE, 0x7f16e5c96220) = 0\n[pid 165855] 13:07:06 ioctl(35</dev/dri/card0>, DRM_IOCTL_I915_GEM_PWRITE, 0x7f16e5c96260) = 0\n[pid 165855] 13:07:06 ioctl(35</dev/dri/card0>, DRM_IOCTL_I915_GEM_BUSY, 0x7f16e5c96220) = 0\n[pid 165855] 13:07:06 ioctl(35</dev/dri/card0>, DRM_IOCTL_I915_GEM_MADVISE, 0x7f16e5c96220) = 0\n[pid 165855] 13:07:06 ioctl(35</dev/dri/card0>, DRM_IOCTL_I915_GEM_PWRITE, 0x7f16e5c96260) = 0\n[pid 165855] 13:07:06 ioctl(35</dev/dri/card0>, DRM_IOCTL_I915_GEM_BUSY, 0x7f16e5c96220) = 0\n[pid 165855] 13:07:06 ioctl(35</dev/dri/card0>, DRM_IOCTL_I915_GEM_MADVISE, 0x7f16e5c96220) = 0\n[pid 165855] 13:07:06 ioctl(35</dev/dri/card0>, DRM_IOCTL_I915_GEM_PWRITE, 0x7f16e5c96260) = 0\n[pid 165855] 13:07:06 ioctl(35</dev/dri/card0>, DRM_IOCTL_I915_GEM_BUSY, 0x7f16e5c96220) = 0\n[pid 165855] 13:07:06 ioctl(35</dev/dri/card0>, DRM_IOCTL_I915_GEM_MADVISE, 0x7f16e5c96220) = 0\n
Run Code Online (Sandbox Code Playgroud)\n

(重复了很多次,不完全是上面的模式)

\n

首先,我禁用了“Google Inc. 提供的 Widevine 内容解密模块”。插入。那没有帮助。

\n

然后我尝试在性能 \xe2\x86\x92 设置中禁用“可用时使用硬件加速”,结果成功了:第二天,我解锁后,Firefox 立即可用!

\n

虽然我眼前的问题得到了解决,但仍然给我留下了很多问题:

\n
    \n
  • 这个硬件加速盒看起来像是一个相当粗糙且不透明的开关,它的控制能力比我想象的要多(DRM?!?)。它到底有什么作用?
  • \n
  • 我仍然不知道loginctl如何与浏览器通信。D 总线消息?
  • \n
  • 这两者是如何联系在一起的?有没有办法获得一些比输出更容易理解的内部日志strace
  • \n
\n

小更新(2021 年 10 月 17 日):

\n

取消勾选数字版权管理 (DRM) 内容 \xe2\x86\x92 播放 DRM 控制的内容并不能解决问题(即我无法重新打开硬件加速)

\n

小更新(2021 年 10 月 18 日):

\n

勾选性能 \xe2\x86\x92 使用推荐的性能设置也不会做正确的事情。

\n

我想我现在已经准备好提交该错误报告了。

\n