You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SSH远程执行PyAutoGUI模拟Linux应用点击无响应问题排查

解决SSH远程sudo运行PyAutoGUI时DISPLAY环境变量失效问题

问题根源

sudo默认会重置大部分环境变量(包括DISPLAY),你手动执行时是先在当前shell设置了DISPLAY=:0.0,再用sudo运行脚本,此时sudo临时保留了当前shell的环境;但把export DISPLAY=:0.0写进脚本后,这行代码是在普通用户权限的脚本进程中执行的,sudo启动的python进程不会继承这个变量,依然使用SSH会话默认的DISPLAY=10.0,导致PyAutoGUI无法连接到本地显示的应用。

解决方案

以下是三种可行的解决方式,按需选择:

1. 用sudo -E保留环境变量运行

先在SSH会话中手动执行环境配置,再用-E参数让sudo保留当前shell的环境变量:

export DISPLAY=:0.0
xhost +SI:localuser:root
sudo -E python3 XXX.py

如果想整合到脚本(比如run_click.sh),脚本内容如下:

#!/bin/bash
export DISPLAY=:0.0
xhost +SI:localuser:root
sudo -E python3 XXX.py

给脚本加执行权限后直接运行:chmod +x run_click.sh && ./run_click.sh

2. 在sudo命令中直接指定DISPLAY

不需要提前export,直接在sudo调用python时传递环境变量,同时确保xhost命令以普通用户权限执行(xhost针对当前登录用户的X访问控制):

xhost +SI:localuser:root
sudo DISPLAY=:0.0 python3 XXX.py

如果是纯Python脚本,可通过subprocess执行xhost,再强制设置环境变量:

import subprocess
import os
import pyautogui

# 以普通用户权限执行xhost(不要加sudo)
subprocess.run(["xhost", "+SI:localuser:root"], check=True)
# 强制为当前进程设置DISPLAY
os.environ["DISPLAY"] = ":0.0"

# 执行点击操作示例
pyautogui.click(200, 300)

运行这个Python脚本时直接用sudo python3 XXX.py即可。

3. 修改sudoers配置永久保留DISPLAY

如果需要长期解决这个问题,可修改sudoers配置让其默认保留DISPLAY变量:

  1. 执行sudo visudo打开sudoers编辑界面
  2. 添加一行配置:
    Defaults env_keep += "DISPLAY"
    
  3. 保存退出后,后续sudo运行命令时会自动继承当前shell的DISPLAY变量

注意:此为全局配置,仅在可信环境中使用,避免带来安全风险。

内容的提问来源于stack exchange,提问作者Ringo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 06:24:53