【Linux】解决ssh连接终端无GUI无法显示python图像【服务器】

本文讲述了作者在Windows通过SSH在无GUI的Linux服务器上使用matplotlib绘制图像遇到的问题,如何通过替换backend为Tkagg并配置DISPLAY变量,最终在VSCode终端显示图像的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题环境:

  • 我个人使用windows系统,通过ssh连接远程linux服务器进行训练,但远程服务器中并未安装GUI,因此使用Python中matplotlib等工具画图时图像并未显示。
  • 经过网上其他教程使用'Agg'调整mobaxterm可显示后,vscode终端还是无法显示。
  • 目的为使下方代码通过ssh在linux下远程运行,在本地能显示图像:
import matplotlib.pyplot as plt

fig = plt.figure()
plt.plot(range(10))
plt.show()

解决方法:

通过网络其他教程得到,将matplotlib的backend替换为'Tkagg',如下:

import matplotlib
matplotlib.use('tkagg') # Must be before importing matplotlib.pyplot or pylab!
import matplotlib.pyplot as plt

fig = plt.figure()
plt.plot(range(10))
plt.show()
  • 在Vscode远程终端运行:程序报错‘Cannot load backend 'TkAgg' which requires the 'tk' interactive framework, as 'headless' is currently running’,图像未显示。将backend切换为'Agg'后尝试,图像亦不显示,但也不报错。
  • 在Mobaxterm运行:成功显示出图像,无报错。

按理来说,vscode和mobaxterm运行方式都是一模一样的终端,一个可以理应通用。于是我想到,是不是程序图像已经可以正常输出了,只是vscode找不到输出的地方,毕竟远程服务器是没有图形界面的。因此我调用查看命令:

echo $DISPLAY

在mobaxterm中显示如下:

在Vscode终端显示为空。据此推断,vscode确实是因为找不到输出位置所造成,因此我把vscode输出参数和mobaxterm改成一样的:

export DISPLAY=:10.0

这下两边保持一致了。

重新在vscode运行,成功显示!

 

 

### 解决VSCode远程连接服务器时图片预览无法正常显示的问题 #### 配置SSH隧道转发 为了使VSCode能够正确处理来自远程Linux服务器上的图形化应用请求,需设置SSH隧道来转发X11流量。这通常涉及到修改本地机器上用于建立与远程主机连接SSH配置文件`~/.ssh/config`[^1]。 ```bash Host your_remote_host_name HostName your.remote.host.ip_or_domain User your_username_on_remote ForwardX11 yes DynamicForward 1080 ``` #### 安装必要的软件包 确保远程Ubuntu服务器已安装了支持图像渲染所需的库和服务。对于Ubuntu系统来说,可能需要通过apt-get命令安装额外的支持程序: ```bash sudo apt update && sudo apt install -y xauth xvfb imagemagick ``` 上述命令会更新包列表并安装三个重要的组件:xauth允许客户端验证其身份;xvfb提供了一个无头显示器服务以便于运行GUI应用程序而无需实际物理屏幕;imagemagick则是一套用来创建、编辑和转换位图图像格式的强大工具集[^2]。 #### 设置VSCode环境变量 为了让VSCode识别到正确的DISPLAY环境变量,在打开终端之前应该先执行如下脚本片段,它将会把当前用户的$DISPLAY值传递给新的shell进程: ```bash export DISPLAY=:0.0 echo $DISPLAY >> ~/.profile source ~/.profile ``` 另外一种方法是在`.vscode/settings.json`里添加特定的工作区级别的设定项以强制指定display参数: ```json { "terminal.integrated.env.linux": { "DISPLAY": ":0" } } ``` #### 使用VSCode内置功能调整解释器路径 当遇到某些依赖具体Python版本的功能模块(比如matplotlib绘图)不工作的情况时,应当确认正在使用的Python解析器是否合适。可以通过快捷键组合Command+P(Windows/Linux下为Ctrl+P),接着输入">python select interpreter" 来切换至合适的Python环境[^4]。
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值