必须同时解除会话层、安全层和资源管理层三重限制才能确保进程锁屏后持续运行:①修改logind.conf禁用空闲动作;②将进程加入kysec永久豁免白名单;③配置systemd用户服务并设idlehint=false。

您在银河麒麟系统中运行监控脚本、远程服务或数据采集程序时,发现锁屏后进程被挂起、网络中断或直接退出,这是因为UKUI桌面会话在锁屏时默认向用户级进程发送挂起信号,并触发KYSEC进程保护与systemd空闲抑制机制。必须同时解除会话层、安全层和资源管理层三重限制,才能确保进程在锁屏状态下持续活跃。
关闭锁屏时的会话空闲抑制
锁屏会触发logind会话空闲判定,导致systemd自动将用户服务标记为IdleHint=true并暂停其资源调度。这一步必须先禁用,否则后续所有后台保活设置都会失效。
第一步:打开终端,执行 sudo nano /etc/systemd/logind.conf
第二步:找到 #IdleAction=lock 行,取消注释并改为 IdleAction=ignore;再找到 #IdleActionSec=30min,改为 IdleActionSec=0
第三步:保存文件后执行 sudo systemctl restart systemd-logind。这一步重启后,锁屏不再触发任何会话级挂起动作——【若跳过此步,即使进程加入白名单,也会在锁屏瞬间被logind冻结】
将进程加入KYSEC永久豁免白名单
KYSEC的process protect模块会在锁屏后对非白名单进程进行周期性扫描并强制终止,这是导致后台服务静默退出的最常见原因。
方法一(推荐):以root身份运行命令直接注册当前进程
执行 sudo -i 切换至超级用户 → 执行 pgrep -f "你的应用名" 获取PID → 执行 sudo kysec-ppro-add --pid PID号 --user 用户名 --permanent
方法二:若进程尚未启动,可先创建守护脚本再注册。例如运行 sudo kysec-ppro-add --cmd "/usr/bin/python3 /opt/monitor/main.py" --user $USER --permanent,KYSEC将自动匹配该命令路径启动的所有实例。
验证是否生效:执行 kysec-ppro-list | grep "你的应用名",输出中应含 status: enabled 字样。
配置systemd用户服务并禁用空闲提示
仅靠白名单还不够——锁屏后systemd仍可能因IdleHint=true降低进程优先级或延迟调度。需将应用注册为systemd用户服务,并显式关闭空闲提示。
① 创建服务文件:mkdir -p ~/.config/systemd/user && nano ~/.config/systemd/user/lockscreen-keepalive.service
② 填入以下内容(注意替换ExecStart路径):
[Unit]
Description=Keep process alive after lock
After=graphical-session.target
[Service]
Type=simple
ExecStart=/usr/bin/python3 /opt/monitor/main.py
Restart=always
RestartSec=5
Environment=DISPLAY=:0
Environment=XAUTHORITY=/home/$USER/.Xauthority
IdleHint=false
[Install]
WantedBy=default.target
③ 启用服务:systemctl --user daemon-reload → systemctl --user enable --now lockscreen-keepalive.service
④ 确认状态:systemctl --user status lockscreen-keepalive.service,输出中必须出现 IdleHint: no 而非 IdleHint: yes











