Python3.6.3 Anaconda环境下matplotlib抛出QXcbConnection错误求助
解决远程Linux服务器上matplotlib的QXcbConnection错误
这个问题我之前在远程服务器跑matplotlib的时候也碰到过,本质是matplotlib默认想用GUI后端渲染图形,但你的远程环境没有可用的X11显示输出,加上Windows升级可能搞坏了本地的X11转发配置,才会报这个错。给你几个靠谱的解决办法:
方法一:切换到非交互式后端(最省心)
如果你的需求只是生成图片然后保存,不需要实时GUI预览,直接让matplotlib用无GUI的后端就行:
- 在代码开头添加:
或者直接在运行脚本前设置环境变量:import matplotlib matplotlib.use('Agg') # 必须在import plt之前设置 import matplotlib.pyplot as plt
Agg是matplotlib默认的无GUI后端,专门用来在服务器环境生成图片,完全不需要依赖X11。export MPLBACKEND=Agg python your_script.py
方法二:修复X11转发配置(如果需要GUI预览)
如果确实需要在本地看到matplotlib的图形,那得检查Windows升级后X11转发的链路有没有断:
- 本地X服务器:确保你本地的X服务器(比如VcXsrv、Xming)是正常运行的,升级后可能需要重启一下,还要检查防火墙有没有阻止X服务器的端口。
- SSH客户端设置:
- 用PuTTY的话,进入
Connection -> SSH -> X11,勾选Enable X11 forwarding,X display location保持默认或者设为:0。 - 用OpenSSH命令行的话,登录服务器时要加
-X(或者-Y,信任X11转发)参数:ssh -X your_username@your_server_ip
- 用PuTTY的话,进入
- 验证DISPLAY变量:登录服务器后运行
echo $DISPLAY,应该输出类似localhost:33.0这样的值。如果是空的,说明X11转发没生效;如果有值但还是报错,可以试试xauth list看看有没有对应的授权条目,没有的话可能需要服务器端重新生成xauth密钥。
额外排查点
- 服务器端有没有安装Qt相关依赖?不过如果用非交互式后端的话,这个就不重要了。
- Windows升级后有没有更换SSH客户端?比如从PuTTY换成了OpenSSH,配置不一样也会导致转发失效。
内容的提问来源于stack exchange,提问作者akozi
相关产品推荐
相关产品推荐

