V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
fengwq
V2EX  ›  云修电脑

Xbox 前端 + Firefox 导致 Windows 无法睡眠

  •  
  •   fengwq · 2023-05-15 10:36:32 +08:00 · 1330 次点击
    这是一个创建于 583 天前的主题,其中的信息可能已经有所发展或是发生改变。

    这是一个折磨我 5 个月的问题。
    问题是:我发现我的电脑不能睡眠了。到了设置的睡眠时间,它硬是不睡(关闭屏幕是没问题的)。
    我偶尔会躺在床上看视频,看着看着就睡着了,而且电脑待机的功耗有 75W ,所以我需要睡眠功能。

    先说结论

    触发条件

    Windows 系统( Win10 、Win11 所有版本(应该)都能触发)
    Firefox 浏览器(具体版本不想测了,估计 100+ 吧)
    特定的网页

    触发操作

    使用 Firefox 打开特定的网页,例如 XGP: https://www.xbox.com/zh-HK/xbox-game-pass/games 。电脑就会无法按照设置的时间睡眠,一直处于唤醒状态,浏览器放在后台也可以唤醒。

    解决办法

    不要在 Firefox 中常驻特定的网页。

    常驻 XGP 网页是为了看 XGP 出入库信息。Firefox 常驻 XGP 网页的,可能全世界只有我一个?

    是谁的问题?

    Windows

    你看视频的时候,肯定不想每隔几分钟晃一下鼠标以阻止关闭屏幕吧?所以 Windows 「电源计划」默认允许「共享媒体时,阻止计算机在一段时间不活动后进入睡眠状态」。

    Xbox 与 Firefox

    我不懂前端,不知道这个锅是要给 Microsoft 还是 Mozilla 。
    网页明明没有声音,为什么要调用音频接口?导致我在排查过程中,根本想不到是因为浏览器一直调用音频导致 Win 无法睡眠。

    Chrome 不存在这个问题。

    有没有好心的前端程序员,看看代码,提个 bug 。有个不带动画的页面,也会调用音频,可能更容易分析原因: https://www.xbox.com/zh-HK/where-to-buy

    Realtek Fuck you !

    开篇说我被折磨了 5 个月,被谁折磨呢—— Realtek ;其他触发条件的排查只花了 1 小时,大部分精力都是被 Realtek 浪费的。虽然 Realtek 不是导致问题的罪魁祸首,但 Fuck !
    刚开始排查的时候,执行排查睡眠问题的通用命令:powercfg /requests ,发现这个东西在阻止睡眠:

    SYSTEM:
    [DRIVER] 旧的内核调用程序

    看到这我就迷惑了:「内核」?我只知道操作系统内核(不会是浏览器内核吧),意思是 Windows 不让自己睡眠? Win11 新系统的 bug ?

    搜索关键词「[DRIVER] 旧的内核调用程序」「[DRIVER] Legacy Kernel Caller 」;搜到这么一条命令:
    powercfg -requestsoverride Driver "Legacy Kernel Caller" System ;执行之后,没解决。
    powercfg -lastwake 唤醒历史记录计数 - 0 。找不到是哪个崽种在唤醒。
    也没有搜到能详细解释 powercfg 这个命令的文档,所以搞不清「旧的内核调用程序」到底是哪个。

    联想到之前更新了主板「 Intel Chipset Driver 」,系统内核调用 CPU ,合理。我开始怀疑是我吃饱了撑得,更新主板驱动遭报应了。想要回退,但是又不知道回退的方法,主板官网并没有旧版本的驱动。

    实在是没办法,我只能寄希望于 Windows 后续更新解决问题。一等就是几个月。我感觉不对劲,这么明显的 bug ,过了这么久网上也没几个人遇到,那估计不是 Windows 的问题。

    于是再次开始排查

    终于在英语网站上搜到两个跟我一样不能睡眠的,他们定位到 Realtek ,换成旧版本的驱动就正常了。
    https://h30434.www3.hp.com/t5/Notebooks-Archive-Read-Only/SOLVED-Windows-10-Laptop-won-t-go-into-sleep-mode/m-p/5203605/highlight/true#M1111581

    我就开始折腾 Realtek 驱动版本。发现 Realtek 官网不提供声卡的驱动,只有网卡的;好像只能去主板的官网下载驱动。但主板官网只提供最新的版本。又得研究如何卸载驱动,回退到旧版本,哪个版本的没问题。一通折腾。
    最后一次回退到了 USB Audio 2.0 这个最旧的版本,发现它在 powercfg 中的请求是明确的:

    SYSTEM:
    [DRIVER] USB Audio 2.0 (USB\VID_0DB0<硬件 ID>)
    音频流当前正在使用中。

    直到这,我才完全确定 「[DRIVER] 旧的内核调用程序」就是 Realtek 。而且可以看到 Realtek 旧驱动写得很清楚,但新驱动的就摆烂。

    同样是驱动请求电源,NVIDIA 写得清清楚楚,Realtek 怎么就搞谜语人?

    SYSTEM:
    [DRIVER] NVIDIA High Definition Audio (HDAUDIO\FUNC_01<硬件 ID>)
    音频流当前正在使用中。

    还有一个小尾巴,电脑刚开机或从睡眠中唤醒后的约 2 分钟内,执行 powercfg /requests 可以看到:

    PERFBOOST:
    [DRIVER] 旧的内核调用程序
    Power Manager

    我不知道为什么会有这个现象。幸好过了 2 分钟之后就不再请求了,倒是没有什么影响。

    参考资料

    一劳永逸解决 WIN10 所有睡眠问题 https://zhuanlan.zhihu.com/p/93306740

    介绍了排查睡眠问题的通用方法

    Windows 系统上如何揪出阻止你屏幕关闭的程序

    https://blog.walterlv.com/post/detect-which-process-is-keeping-your-screen-on-in-windows.html


    @fengchen0vr @molezz765 二位看看能不能解决你们的问题。
    win10 [DRIVER] 旧的内核调用程序 阻止休眠
    https://www.v2ex.com/t/875754


    我是个爱自由、爱生活、认真生活的人,兴趣是分享信息。
    我想跟你交朋友,在那之前,要确认一下我们是不是同类。
    https://t.me/fengwq

    2 条回复    2023-10-18 14:04:56 +08:00
    molezznet
        1
    molezznet  
       2023-05-15 23:02:11 +08:00
    这 …… 现在用 hyperv 来虚拟化了
    poseidOn7246
        2
    poseidOn7246  
       2023-10-18 14:04:56 +08:00
    老哥能讲讲怎么卸载重装瑞昱的驱动吗?我现在能睡眠不能休眠,提示旧的内核调用,我快疯了。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5210 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 09:31 · PVG 17:31 · LAX 01:31 · JFK 04:31
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.