如何在断开远程连接的Azure Windows VM中正常运行PyAutoGUI自动化脚本
解决Azure Windows 10虚拟机断开远程桌面后PyAutoGUI无法正常运行的方案
问题根本原因
Windows远程桌面(RDP)连接断开后,系统会默认销毁当前登录用户的活动图形会话,PyAutoGUI依赖活跃的图形桌面会话、可访问的显示上下文、键鼠模拟权限运行,会话销毁后会出现显示分辨率丢失、鼠标坐标异常漂移到屏幕角落的问题,进而触发PyAutoGUI的fail-safe报错,键鼠模拟操作也无法正常执行。
可用解决方案
方案1:使用tscon命令重定向会话(最简便,推荐优先尝试)
不要直接点击远程桌面右上角的叉号断开连接,改用命令将当前RDP会话重定向到本地控制台,断开连接后会话仍保持活跃,图形界面不会被销毁:
- 在Azure虚拟机内新建后缀为
.bat的脚本文件,写入以下内容:
tscon %sessionname% /dest:console
- 启动PyAutoGUI脚本确认正常运行后,右键点击bat文件选择「以管理员身份运行」,系统会自动断开RDP连接,同时保持当前会话持续活跃。
- 提前关闭虚拟机的屏幕保护、自动锁屏、休眠功能:电源选项中设置「永不关闭显示器」「永不进入睡眠」,锁屏超时设置为「从不」。
方案2:修改本地组策略保留断开的会话
通过组策略配置禁止系统回收断开的RDP会话:
- 按下
Win+R输入gpedit.msc打开本地组策略编辑器 - 定位到路径:
计算机配置 > 管理模板 > Windows组件 > 远程桌面服务 > 远程桌面会话主机 > 会话时间限制 - 双击「设置已断开连接的会话的时间限制」,选择「已禁用」后保存
- 再定位到路径:
计算机配置 > 管理模板 > Windows组件 > 远程桌面服务 > 远程桌面会话主机 > 安全 - 双击「远程(RDP)连接要求使用指定的安全层」,选择「已启用」,安全层下拉选择「RDP」,保存后重启虚拟机生效。
方案3:安装虚拟显示驱动(适配无物理显示器的云虚拟机场景)
云虚拟机默认没有接物理显示器,断开RDP后显示上下文会丢失,可安装虚拟显示驱动模拟永久在线的显示器:
- 安装开源虚拟显示器驱动IddSampleDriver,配置固定的显示分辨率(如1920*1080)
- 配置完成后系统会一直认为有显示器接入,断开RDP后显示分辨率、坐标体系不会发生变化,PyAutoGUI可正常运行。
PyAutoGUI脚本配置调整
- 你之前设置
pg.FAILSAFE = True是默认配置,触发报错是因为鼠标坐标漂移到了屏幕角落,在确认会话稳定的前提下可在脚本开头添加配置避免异常报错:
import pyautogui as pg # 关闭fail-safe机制(确认脚本坐标逻辑无问题后再开启) pg.FAILSAFE = False # 清空fail-safe触发坐标点 pg.FAILSAFE_POINTS = [] # 给操作添加默认间隔,避免执行过快无响应 pg.PAUSE = 0.5
- 模拟操作可额外添加间隔参数,比如
pg.hotkey('alt', 'tab', interval=0.3),提升操作成功率。
内容的提问来源于stack exchange,提问作者yuu Iri
相关产品推荐
相关产品推荐

