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也不会报这个错误,但是这两天突然出现了这个错误,不知道为什么,😔唉

相关推荐
思则变2 小时前
[Pytest] [Part 2]增加 log功能
开发语言·python·pytest
cver1232 小时前
野生动物检测数据集介绍-5,138张图片 野生动物保护监测 智能狩猎相机系统 生态研究与调查
人工智能·pytorch·深度学习·目标检测·计算机视觉·目标跟踪
漫谈网络2 小时前
WebSocket 在前后端的完整使用流程
javascript·python·websocket
try2find3 小时前
安装llama-cpp-python踩坑记
开发语言·python·llama
博观而约取5 小时前
Django ORM 1. 创建模型(Model)
数据库·python·django
精灵vector6 小时前
构建专家级SQL Agent交互
python·aigc·ai编程
Zonda要好好学习6 小时前
Python入门Day2
开发语言·python
Vertira6 小时前
pdf 合并 python实现(已解决)
前端·python·pdf
太凉6 小时前
Python之 sorted() 函数的基本语法
python
项目題供诗7 小时前
黑马python(二十四)
开发语言·python