锁屏后程序被杀本质是systemd-logind的IdleAction机制触发休眠或KillUserProcesses=yes终止进程;需设IdleAction=ignore、IdleActionSec=0、KillUserProcesses=no,并禁用GNOME屏保开关。

锁屏后程序被杀,本质是 systemd-logind 的 IdleAction 机制在起作用
Ubuntu 锁屏后后台任务中断,不是 GNOME 或屏幕保护器的问题,而是 systemd-logind 在检测到会话空闲(idle)时,主动执行了挂起、休眠或锁定动作。它不看“屏幕是否亮着”,只看“用户有没有键盘/鼠标输入”。即使你禁用了锁屏、关掉了屏保,只要会话判定为空闲,IdleAction=suspend(默认值)就会触发系统休眠,连带杀死所有前台/后台进程。
验证是否是这个原因:运行 loginctl show-session $(loginctl | grep $(whoami) | awk '{print $1}') -p IdleSinceMonotonic,如果返回一个非零毫秒数,说明当前会话已被标记为空闲 —— 这就是后台任务中断的起点。
- 修改
/etc/systemd/logind.conf,将IdleAction=ignore(不是none,后者无效) - 同时设
IdleActionSec=0(避免 fallback 行为) - 重启服务:
sudo systemctl restart systemd-logind - 注意:该配置影响所有本地图形会话,不区分 AC/battery,若需精细控制,得配合
PowerProfile或 udev 规则
GNOME 层面仍需关闭 lock-enabled 和 idle-activation-enabled
即使 systemd-logind 不挂起,GNOME 自身的空闲策略仍可能触发锁屏或黑屏,尤其当远程桌面(如 RDP/VNC)连接时,GNOME 会错误地将无鼠标移动视为空闲。关键两个 GSettings 必须同时禁用:
Ubuntu 26.04 LTS(代号“Resolute Raccoon”)是Canonical于2026年4月23日发布的下一代长期支持版操作系统,提供长达10年的技术支持。它搭载Linux 7.0内核与GNOME 50桌面环境,全面转向Wayland协议,并引入Rust重写的核心工具以增强安全性。官方提供适用于AMD64和ARM64架构的桌面及服务器ISO镜像,是追求前沿技术与极致稳定的开发者
-
gsettings set org.gnome.desktop.screensaver lock-enabled false—— 关闭锁屏开关(否则即使没休眠,也会强制弹密码框) -
gsettings set org.gnome.desktop.screensaver idle-activation-enabled false—— 关闭空闲激活屏保,防止黑屏 - 不要只改
lock-delay或idle-delay,它们只是计时器,开关没关,计时一到照样锁 - 若使用 Wayland(Ubuntu 22.04+ 默认),
gnome-screensaver已废弃,上述设置仍有效,但gnome-screensaver-command -l会失效,改用xdg-screensaver lock或 D-Bus
后台进程被 kill 的真正元凶:logind 的 KillUserProcesses
很多用户发现:锁屏后 nohup 或 screen 进程也被干掉。这不是 shell 问题,而是 systemd-logind 默认开启的 KillUserProcesses=yes —— 它会在会话结束(包括锁屏后超时)时,向该用户所有进程发送 SIGTERM。
- 检查当前值:
loginctl show-user $(whoami) -p KillUserProcesses - 临时禁用(仅当前 session):
loginctl kill-user $(whoami)不要用;正确做法是设KillUserProcesses=no在/etc/systemd/logind.conf - 该选项必须配合
IdleAction=ignore使用,否则锁屏后即使不 kill 进程,systemd仍可能因资源回收策略终止 cgroup - 安全提示:设为
no后,用户注销时残留进程不会自动清理,需自行管理或写 cleanup 脚本
远程连接场景下,空闲判定逻辑完全不同
通过 SSH + X11 转发、RDP、VNC 登录 Ubuntu 桌面时,systemd-logind 无法可靠获取输入事件,常把“无鼠标移动”误判为空闲。此时仅靠图形界面设置毫无意义。
- 最直接方案:在远程会话中运行
systemd-inhibit --what=handle-lid-switch --who="remote session" --why="prevent idle suspend" sleep infinity,让 logind 忽略该会话的空闲状态 - 替代方案:用
caffeine(需安装)或自写脚本定期模拟输入:xdotool key Shift_L(慎用,可能干扰真实操作) - 更稳妥的做法是创建专用远程会话类型:编辑
/usr/share/polkit-1/actions/org.freedesktop.login1.policy,为远程登录用户赋予org.freedesktop.login1.inhibit-handle-lid-switch权限 - GNOME 的
power-profiles-daemon在远程会话中默认启用 “Power Saver” 模式,会加速空闲判定,可临时禁用:systemctl --user stop power-profiles-daemon
systemd-logind 的 IdleAction 和 KillUserProcesses 是两条最关键的熔断开关,漏掉任何一个,都可能让看似稳定的后台任务在锁屏后静默退出。

















