windows系统版本比较多,默认锁屏机制比较复杂
参考:https://docs.microsoft.com/en-us/windows/security/threat-protection/security-policy-settings/interactive-logon-machine-inactivity-limit
从组策略看,大致有3处,我查了大量资料,并在腾讯云所有Windows镜像上验证测试,发现云服务器执行这5句命令后重启机器,用第三方软件检测是不锁屏的
代码语言:javascript复制powercfg -s 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c
powercfg -x -monitor-timeout-dc 0
powercfg -x -monitor-timeout-ac 0
reg add "HKLMSOFTWAREPoliciesMicrosoftWindowsPersonalization" /v "NoLockScreen" /d 1 /t REG_DWORD /f
reg add "HKLMSOFTWAREMicrosoftWindows NTCurrentVersionWinlogon" /v "DisableLockWorkstation" /d 1 /t REG_DWORD /f
reg add "HKLMSOFTWAREMicrosoftWindows NTCurrentVersionAuthenticationLogonUISessionData" /v "AllowLockScreen" /d 0 /t REG_DWORD /f
最后一句,重启失效,需要想办法(开机计划任务)把最后一句命命令在每次开机时都执行一次
schtasks.exe /create /tn "nolockscreen" /ru SYSTEM /rl highest /sc ONSTART /tr "reg add 'HKLMSOFTWAREMicrosoftWindows NTCurrentVersionAuthenticationLogonUISessionData' /v AllowLockScreen /d 0 /t REG_DWORD /f" /f
但需要强调下,录屏类软件,录屏的前提是有屏可录,远程窗口关闭或最小化没屏可录的空档期,录屏软件怎么处理这段空档因软件而异,视频的这个空档边界可能会有视觉变化被感知,比如闪屏、窗口变化的痕迹被捕捉,我在ev录屏这个软件上有见到,不区分云厂商,都有这个现象。
如果录屏,建议一直从VNC里录。录屏的前提是有屏,如果录屏程序在远程会话里,断开或最小化远程后就没屏了,对远程计算机 GUI 的所有访问都将丢失,录屏就会出现异常。而VNC不一样,VNC一直有图像(一直有屏)。解决方案:禁止将远程会话限定到单会话后,会有2个会话,一个用来vnc登录,一个用来远程登录,录屏程序开在vnc登录的会话里就可以实现一直稳定录屏了(前提是没被远程切走vnc登录的用户)。
注意:最初那5句命令是干预系统默认策略,使登录后默认不锁屏。比如vnc会话已登录、远程会话也已登录,从远程会话里的任务管理器 → 用户页签 →Connect 切到vnc录屏的会话,此时录屏程序就从vnc会话到远程会话了,vnc会变成锁屏。或者从vnc录屏的会话里切到了远程登录的那个会话,此时有录屏的那个会话就没有屏幕图像了,没有屏幕则录屏就会出现异常。总之, 跑录屏软件的那个会话必须是vnc登录。
组策略禁止单会话,最多支持2个会话,具体操作是:
中文版系统
以管理员身份运行gpedit.msc → 计算机配置 → 管理模板 → windows 组件 → 远程桌面服务 → 远程桌面会话主机 → 连接 → 将配置项“将远程桌面服务用户限制到单独的远程桌面服务会话” 为“已禁用” → gpupdate /force
英文版系统则是:gpedit.msc → Computer Configuration → Administrative Templates → Windows Components → Remote Desktop Services → Remote Desktop Session Host → Connections → Restrict Remote Desktop Services users to a single Remote Desktop Services session → Disabled → gpupdate /force
后来找到了更OK的远程录屏方案,参考https://cloud.tencent.com/developer/article/1945628
先禁止单会话,然后正常远程,远程后在当前会话里再远程127.0.0.1,把游戏和相关录屏业务搞在127.0.0.1的会话里就可以了,远程后,127.0.0.1的会话里是NVIDIA显卡(可以运行dxdiag检测)
最初说的3处组策略了解下即可,关键是开头说的那5句命令,如果设置后还是发现锁屏,可以调整下这2处组策略
①Interactive logon: Machine inactivity limit.
组策略 → 计算机配置 → Windows设置 → 本地策略 → 安全选项 → 交互式登录:计算机不活动限制
②组策略 → 用户配置 → 管理模板 → 控制面板 → 个性化 → 启用屏幕保护程序、屏幕保护程序超时
③组策略 → 计算机配置 → 管理模板 → 系统 → 电源管理 → 睡眠设置 → 超时相关的项有好几处
开头那3句命令就是设置这个的,③这个组策略不用动,保持默认即可,只需运行powercfg.cpl 打开电源选项来操作:【powercfg.cpl → 电源选项 → 高性能 → 从不】或者执行这3句命令
powercfg -s 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c
powercfg -x -monitor-timeout-dc 0
powercfg -x -monitor-timeout-ac 0