XIO: fatal IO error 22 (Invalid argument) on X server “localhost:10.0“【小白找bug】

最近在服务器上跑代码时,遇到了这个错误:

python 复制代码
XIO:  fatal IO error 22 (Invalid argument) on X server "localhost:10.0"
      after 383 requests (383 known processed) with 4 events remaining.

它是怎么出现的呢?即使我跑代码时挂了tmux、nohup,试图使得关闭mobaxterm客户端之后让代码在Linux服务器上继续跑。

当关闭客户端,后台运行的代码运行到plt.savefig时出现这个错误;关闭mobaxterm客户端,当后台运行的代码没有运行到plt.savefig时不出现这个错误;不关闭mobaxterm客户端,plt.savefig时不出现这个错误。

原因:

X11:X Window System 版本 11 的简称,是一种用于图形用户界面(GUI)的协议,X Server 是 X11 协议的具体实现。

当使用 MobaXterm 连接到服务器时,DISPLAY 环境变量会被设置为 localhost:10.0,指向 MobaXterm 提供的 X Server。

matplotlib 默认后端(Qt5Agg)需要一个可用的图形环境X11,即使是保存图像也会尝试创建一个图形窗口。当关闭了 MobaXterm 客户端,matplotlib 试图访问 X Server 就会失败,从而导致 XIO: fatal IO error 22。

解决方法:

步骤1、执行 unset DISPLAY删除 DISPLAY 变量 ,程序不会再尝试连接 X11 服务器。

原因:DISPLAY 变量指示当前进程的图形显示服务器,即 X11 服务器的地址。DISPLAY=localhost:10.0就表示 X11 Forwarding 将图形输出到本地客户端(MobaXterm)。

步骤2、强制使用无 GUI 的 Agg 后端(专门用于生成文件,如 PNG、PDF,而不需要图形显示的后端),在代码的最前面加上:

python 复制代码
import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt

问题解决。

后记:小白之前关闭MobaXterm也不会报这个错误,但是这两天突然出现了这个错误,不知道为什么,😔唉

相关推荐
卷无止境1 小时前
在 awesome-fastapi 里,哪些库值得一看?
后端·python
zhanghaha13141 小时前
Python进阶教程:6_JSON 数据解析 —— 新手完全指南
开发语言·python·json
Python私教1 小时前
API 输出模型怎么设计:从 model_dump() 到显式展示层
python·fastapi
Python私教2 小时前
本地 AI 工具服务该绑定 127.0.0.1 还是 0.0.0.0?
python·fastapi
卷无止境2 小时前
FastAPI 的Admin面板生态
后端·python
ctlover3 小时前
Streamlit 框架
python
ι:3 小时前
MATLAB 与 Python 搭建无人机地面站:优势、劣势与选型逻辑
python·matlab·无人机
船厂电气自动化ai大模型3 小时前
AI大模型与数学 第32课 函数凹凸性与二阶导数:拐点求解、凹凸区间计算(10道二阶导数计算题)
数据结构·人工智能·python·深度学习·算法
jufeng13073 小时前
【系列:手搓自主 AI Agent:Hermes 架构原理剖析 · 第 7 篇】
python·ai agent·权限系统
梦想很大很大3 小时前
如果有一个本地优先的 Workflow 工具,你们团队会愿意用吗?
python·agent·workflow