最可靠方式是屏蔽systemd休眠目标并修改logind.conf:执行sudo systemctl mask sleep.target suspend.target hibernate.target hybrid-sleep.target,再编辑/etc/systemd/logind.conf设HandleLidSwitch=ignore、HandleSuspendKey=ignore、IdleAction=ignore,最后重启systemd-logind。

直接禁用系统自动休眠,最可靠的方式是组合两层控制:屏蔽 systemd 休眠目标 + 修改 logind.conf 中的触发行为。单改 GUI 设置或只调桌面环境参数,容易被后台服务绕过。
屏蔽 sleep.target 等 systemd 目标
这是最底层、最彻底的禁用方式,让系统根本无法调用休眠逻辑,连 DBus 抑制(如 Firefox 播放视频时发的 org.gnome.SessionManager.Inhibit)都无处生效。
- 执行命令一次性屏蔽全部相关目标:
sudo systemctl mask sleep.target suspend.target hibernate.target hybrid-sleep.target - 该操作会在
/etc/systemd/system/下创建指向/dev/null的符号链接,覆盖所有可能的激活路径 - 验证是否生效:
systemctl status suspend.target应显示Loaded: masked,而非enabled或disabled - 注意:
unmask可恢复,但别漏掉hybrid-sleep.target——它常被忽略,却是某些笔记本合盖后“假唤醒真断连”的元凶
修改 /etc/systemd/logind.conf 防止硬件事件触发
即使休眠目标被屏蔽,systemd-logind 仍可能在检测到合盖、按键或空闲超时后尝试调用已被屏蔽的目标,导致日志刷屏甚至意外挂起(尤其在旧内核或定制发行版中)。
- 编辑配置:
sudo vim /etc/systemd/logind.conf - 取消注释并设为
ignore的关键行:HandleLidSwitch=ignore(合盖)HandleSuspendKey=ignore(如电源键、Fn+Sleep 键)IdleAction=ignore(空闲超时,默认 30 分钟触发 suspend) - 改完必须重启服务:
sudo systemctl restart systemd-logind,否则配置不加载 - 常见坑:只改
HandleLidSwitch却漏掉IdleAction,结果远程服务器周末无人操作仍进休眠
桌面环境级设置(按需补充)
GNOME/KDE/UKUI/MATE 等桌面会额外监听空闲状态并主动锁屏或调用休眠,这部分不干扰底层机制,但影响用户体验。仅当上述两步做完仍有锁屏/黑屏时才需处理。
- 查当前桌面类型:
echo $XDG_CURRENT_DESKTOP或loginctl show-session $(loginctl | grep "seat" | awk '{print $1}') -p Type - UKUI(银河麒麟默认):
gsettings set org.ukui.power-manager sleep-computer-ac 0(交流电下不休眠)gsettings set org.ukui.screensaver idle-activation-enabled false - MATE:
gsettings set org.mate.power-manager sleep-computer-ac 0(注意把ukui换成mate) - 通用 X11 屏幕保护关闭:
xset s off && xset -dpms(临时生效,建议写入启动脚本)
真正容易被忽略的是 IdleAction=ignore 和 hybrid-sleep.target 的组合——前者防空闲误触,后者防混合睡眠兜底逻辑。很多现场服务器休眠问题,就卡在这两个点上没打全。


















