解决戴尔灵越7590在Linux下的睡死问题

前言

博客基于Hexo平台,而Hexo发布到pages上面需要使用Git。为了使用Git方便且在学校也能水文章,我在我的戴尔灵越7590笔记本上安装了Win10 + Ubuntu 20.04双系统,并将论坛源文件从家中的NAS移动到笔记本的SSD中。

好不容易把系统配置好,能支撑日用了,不过我很快就遇到了睡死的问题——合盖后再打开经常会卡死在黑屏状态下,屏幕左上角有一白色光标。键盘操作、切换tty、敲击键盘均无反应,只能长按电源键强行关机再重启。

基本信息

参数
CPU Intel Core i7-9750H
芯片组 Intel HM370
内存 2 * 8GB DDR4-2666 SO-DIMM,镁光D9VPP颗粒
GPU Intel UHD630 & NVIDIA GeForce GTX 1650 (4GB 128bit 8Gbps GDDR5)
SSD 西数SN750 500G (Win10) & 西数SN550 250G (Ubuntu)
无线网卡 Intel 9560AC CNVi
屏幕 15.6” 1920x1080 VA,72% NTSC
系统 Windows 10 20H2 & Ubuntu 20.04 (5.8内核)

解决过程

考虑独显问题

众所周知N卡在Linux下没有好用的开源驱动,系统自动帮我安装好了450版本的闭源驱动并配置好了双显卡切换。同时,老黄的Linux驱动也有各种毛病,于是尝试升级到最新460驱动,无解;在驱动控制面板中屏蔽独显,无解。因此暂时排除独显问题。

考虑Connected Standby问题

戴尔在近几年的机型中引入并默认启用了微软主推的Connected Standby (S0ix) 睡眠模式,而S0ix模式的问题很多,它所能提供的始终连接特性无法正常实现,且无法让电脑完全进入睡眠,导致电脑温度高、电量快速消耗,实际表现反而不如传统的S3睡眠;也给Linux、黑苹果等第三方系统带来了电源管理问题。联想在其机型的BIOS里提供了禁用S0ix的选项,而戴尔没有提供,只能手动改为S3睡眠。

根据灵越7590机型的ArchWiki条目,解决方法是在内核参数中增加acpi_rev_override=1 acpi_osi=Linux mem_sleep_default=deep。开机进入GRUB,选中Ubuntu启动项,按E编辑启动项,在linux所在行的quiet splash前加上这三个参数,按F10键引导系统。进入系统使用一段时间后合上屏幕,静置几分钟后打开,机器正常唤醒。反复测试几次后问题未复现。

保存参数

上面通过在GRUB中E键编辑内核参数的方法只在此次启动生效,而为了每次启动系统都应用该修复,需要将这些参数都保存到GRUB配置文件中成为默认值。下面介绍保存这些参数的方法:

  1. 使用文本编辑器打开/etc/default/grub,这里我使用的是nano

    1
    $ sudo nano /etc/default/grub
  2. 找到GRUB_CMDLINE_LINUX_DEFAULT一行,在quiet splash前增加条目acpi_rev_override=1 acpi_osi=Linux mem_sleep_default=deep。然后保存该文件。例如在nano下则是Ctrl+O,按回车确认保存,再按Ctrl+X离开编辑器。

  3. 更新GRUB配置文件:

    1
    $ sudo update-grub

    这样无论是以后升级内核,还是手动执行update-grub,每次开机默认都会带上那三个参数。

本操作应该也适用于戴尔其他启用了S0ix的机型。

$ EOF.