Linux 笔记本电脑合上盖子不休眠设置

概述

默认情况下,Linux 笔记本电脑在合上盖子时会进入休眠/挂起状态。但在某些场景下,我们希望合上盖子后系统继续运行,例如:

  • 连接外接显示器使用笔记本作为主机
  • 运行下载任务或服务器服务
  • 合盖后继续编译或渲染任务
  • 作为家庭服务器使用

解决方法

通过修改 systemd-logind 配置文件即可实现合盖不休眠。

步骤

1. 编辑配置文件

sudo vi /etc/systemd/logind.conf

2. 修改配置项

找到以下行:

#HandleLidSwitch=suspend

取消注释并修改为:

HandleLidSwitch=ignore

3. 可选:同时配置其他相关选项

# 合上盖子时忽略(不休眠)
HandleLidSwitch=ignore

# 合上盖子并连接电源时忽略
HandleLidSwitchExternalPower=ignore

# 合上盖子并仅使用电池时忽略
HandleLidSwitchDocked=ignore

4. 重启系统或重启 systemd-logind 服务

# 方法一:重启系统
sudo reboot

# 方法二:重启 systemd-logind 服务(无需重启)
sudo systemctl restart systemd-logind

验证配置

修改完成后,可以使用以下命令验证配置是否生效:

# 查看当前 logind 配置
loginctl show | grep HandleLid

# 查看配置是否已加载
systemctl show systemd-logind | grep HandleLid

预期输出应包含 HandleLidSwitch=ignore。

恢复默认设置

如需恢复合盖休眠的默认行为,将配置改回:

HandleLidSwitch=suspend

然后重启服务或系统即可。

注意事项

⚠️ 重要提醒:

  1. 散热问题:合盖后继续运行可能导致散热不良,尤其是高性能任务时
  2. 电池消耗:不休眠会持续消耗电池电量
  3. 屏幕保护:合盖后屏幕会自动关闭,这是正常现象
  4. 外接显示器:如使用外接显示器,建议同时设置 HandleLidSwitchExternalPower=ignore

其他相关配置

配置项 可选值 说明
HandleLidSwitch ignore/suspend/hibernate/lock 合盖时的行为
HandleLidSwitchExternalPower ignore/suspend/hibernate/lock 连接电源时合盖的行为
HandleLidSwitchDocked ignore/suspend/hibernate/lock 对接状态下合盖的行为

故障排查

如果修改后仍然休眠,检查:

  1. 配置是否正确保存(无语法错误)
  2. 是否重启了 systemd-logind 服务或系统
  3. 是否有其他电源管理工具冲突(如 TLP、powertop)
  4. 查看系统日志:journalctl -u systemd-logind

一键运行脚本

把上面的手动步骤合并成一个脚本,sudo bash 一次搞定:

#!/usr/bin/env bash
#
# 合盖不休眠一键设置
# 用法: sudo bash lid-no-suspend.sh
#
# 功能:
#   1. 备份 /etc/systemd/logind.conf
#   2. 设置 HandleLidSwitch / ExternalPower / Docked 均为 ignore
#   3. 重启 systemd-logind 使配置生效
#   4. 打印当前配置验证

set -euo pipefail

CONF="/etc/systemd/logind.conf"

if [[ "${EUID}" -ne 0 ]]; then
    echo "请用 root 身份运行:sudo $0" >&2
    exit 1
fi

# 1. 备份原配置
if [[ ! -f "${CONF}.bak" ]]; then
    cp -a "${CONF}" "${CONF}.bak"
    echo "已备份原配置 → ${CONF}.bak"
fi

# 2. 写入配置(已存在则替换,不存在则追加)
apply() {
    local key="$1"
    if grep -qE "^\s*#?\s*${key}\s*=" "${CONF}"; then
        sed -i -E "s|^\s*#?\s*${key}\s*=.*|${key}=ignore|" "${CONF}"
    else
        echo "${key}=ignore" >> "${CONF}"
    fi
}

apply "HandleLidSwitch"
apply "HandleLidSwitchExternalPower"
apply "HandleLidSwitchDocked"

# 3. 重启服务
systemctl restart systemd-logind
echo "已重启 systemd-logind"

# 4. 验证
echo "当前配置:"
loginctl show | grep HandleLid

也可以直接在线运行,无需下载:

curl -fsSL https://www.0niu.cn/posts/linux-laptop-lid-close-no-suspend/lid-no-suspend.sh | sudo bash

保存为 lid-no-suspend.sh,以 root 身份运行:

sudo bash lid-no-suspend.sh

恢复默认:脚本会自动备份原配置到 /etc/systemd/logind.conf.bak。需要恢复时,把备份文件覆盖回去并重启 systemd-logind 即可,无需手动改配置。