这是一个折磨我 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 「电源计划」默认允许「共享媒体时,阻止计算机在一段时间不活动后进入睡眠状态」。
我不懂前端,不知道这个锅是要给 Microsoft 还是 Mozilla 。
网页明明没有声音,为什么要调用音频接口?导致我在排查过程中,根本想不到是因为浏览器一直调用音频导致 Win 无法睡眠。
Chrome 不存在这个问题。
有没有好心的前端程序员,看看代码,提个 bug 。有个不带动画的页面,也会调用音频,可能更容易分析原因: https://www.xbox.com/zh-HK/where-to-buy 。
开篇说我被折磨了 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
1
molezznet 2023-05-15 23:02:11 +08:00
这 …… 现在用 hyperv 来虚拟化了
|
2
poseidOn7246 2023-10-18 14:04:56 +08:00
老哥能讲讲怎么卸载重装瑞昱的驱动吗?我现在能睡眠不能休眠,提示旧的内核调用,我快疯了。
|