远程触发含Tkinter的Python副屏截图脚本执行报错的解决咨询
解决远程触发Tkinter截图脚本的DISPLAY环境变量问题
你遇到的问题是因为SSH远程执行命令时,默认不会继承目标主机的图形会话环境,而Tkinter必须绑定到具体的显示设备(由$DISPLAY环境变量指定),所以会抛出找不到显示的错误。以下是几种可行的解决方法:
方法一:直接指定DISPLAY变量执行
在SSH命令中显式指定目标主机的显示设备,通常本地桌面会话的DISPLAY值为:0,修改后的命令如下:
ssh pi@testing.com "DISPLAY=:0 python /home/display_capture.py"
如果目标主机有多个图形会话,可以先在目标主机本地执行echo $DISPLAY获取实际的显示编号,再替换命令中的:0。
方法二:后台执行避免SSH断开终止
如果需要触发后脚本在目标主机后台持续运行,不会因为SSH连接断开而终止,可以用nohup:
ssh pi@testing.com "DISPLAY=:0 nohup python /home/display_capture.py > /dev/null 2>&1 &"
nohup让脚本脱离当前SSH会话独立运行>/dev/null 2>&1将脚本的标准输出和错误输出重定向到空设备,避免生成冗余的nohup.out文件&让脚本在后台执行
方法三:通过定时任务触发
如果不需要即时执行,可以在目标主机设置一次性定时任务:
- 远程登录目标主机:
ssh pi@testing.com - 编辑定时任务:
crontab -e - 添加一行(示例为1分钟后执行,可根据需求调整时间):
*/1 * * * * DISPLAY=:0 python /home/display_capture.py
- 脚本执行完成后,记得再次编辑
crontab删除这一行,避免重复执行。
额外注意事项
- 若执行时仍有权限问题,可在目标主机本地执行
xhost +local:pi,允许pi用户访问X显示设备(仅需执行一次)。
内容的提问来源于stack exchange,提问作者DhiwaTdG
相关产品推荐
相关产品推荐

