分离ssh + tmux会话时,Python代码因“无法连接到X服务器”而崩溃

use*_*817 6 python ssh tmux

我在远程计算机(我将其插入)中运行Python代码,然后使用Tmux。在我断开与远程计算机的连接之前,代码运行良好。我通过Tmux进行连接的重点是即使我没有连接到远程计算机,代码也可以继续运行。稍后重新连接时,出现错误消息:

: cannot connect to X server localhost:11.0
Run Code Online (Sandbox Code Playgroud)

有谁知道为什么会这样或我如何阻止它?

Cha*_*ffy 8

cannot connect to X server localhost:11.0
Run Code Online (Sandbox Code Playgroud)

...意味着您的代码正在尝试(并且失败)连接到X服务器(GUI环境),大概是通过您的SSH会话转发的。tmux为终端应用程序提供会话连续性;它不能模拟X服务器。


如果要停止它完全不能建立任何GUI连接(也许,如果这样编写了软件,甚至可以尝试),请DISPLAY在运行代码之前取消设置环境变量。

如果这导致错误或异常,则生成的代码与导致您以后发生错误的代码相同。


如果要创建仍然存在的伪造 GUI环境,也可以使用Xvfb进行。

一些Linux发行版提供了xvfb-run包装器,可以自动为您设置:

# prevent any future commands in this session from connecting to your real X environment
unset DISPLAY XAUTHORITY

# run yourcode.py with a fake X environment provided by xvfb-run
xvfb-run python yourcode.py
Run Code Online (Sandbox Code Playgroud)

顺便说一句,当并行调用多个实例时,请参见xvfb运行不可靠的问题,以获取有关xvfb运行中存在的错误的注释,以及针对该问题的修复程序。


如果要使用X服务器,您实际上可以从中分离并重新连接到以后,让您运行具有与tmux为终端应用程序提供的功能相似的功能的GUI应用程序,请考虑使用X11vnc或类似的工具。