Python 代码在分离 ssh+tmux 会话时因 "cannot connect to X server" 而崩溃
Python code crashes with "cannot connect to X server" when detaching ssh+tmux session
我 运行 Python 在远程机器上编写代码(我通过 ssh 进入),然后使用 Tmux。代码 运行 很好,直到我与远程机器断开连接。我通过 Tmux 连接的全部意义在于,即使我没有连接到远程机器,代码也会继续 运行。稍后重新连接时,出现错误消息:
: cannot connect to X server localhost:11.0
有谁知道为什么会发生这种情况,或者我该如何阻止它?
cannot connect to X server localhost:11.0
...意味着您的代码正在尝试(并且失败)连接到 X 服务器——一个 GUI 环境——大概是通过您的 SSH 会话转发的。 tmux
为终端应用程序提供会话连续性;它无法模拟 X 服务器。
如果你想阻止它建立任何 GUI 连接(也许,如果软件是这样写的,甚至尝试),在 [=37] 之前取消设置 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
顺便说一下,请参阅问题 xvfb-run unreliable when multiple instances invoked in parallel 以获取有关 xvfb-运行 中存在的错误的注释,以及针对该错误的可用修复程序。
如果你想要一个 X 服务器,你实际上可以分离并稍后重新连接,让你 运行 GUI 应用程序具有与 tmux 为你提供的终端应用程序类似的功能,考虑使用 X11vnc 或一个类似的工具。
我 运行 Python 在远程机器上编写代码(我通过 ssh 进入),然后使用 Tmux。代码 运行 很好,直到我与远程机器断开连接。我通过 Tmux 连接的全部意义在于,即使我没有连接到远程机器,代码也会继续 运行。稍后重新连接时,出现错误消息:
: cannot connect to X server localhost:11.0
有谁知道为什么会发生这种情况,或者我该如何阻止它?
cannot connect to X server localhost:11.0
...意味着您的代码正在尝试(并且失败)连接到 X 服务器——一个 GUI 环境——大概是通过您的 SSH 会话转发的。 tmux
为终端应用程序提供会话连续性;它无法模拟 X 服务器。
如果你想阻止它建立任何 GUI 连接(也许,如果软件是这样写的,甚至尝试),在 [=37] 之前取消设置 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
顺便说一下,请参阅问题 xvfb-run unreliable when multiple instances invoked in parallel 以获取有关 xvfb-运行 中存在的错误的注释,以及针对该错误的可用修复程序。
如果你想要一个 X 服务器,你实际上可以分离并稍后重新连接,让你 运行 GUI 应用程序具有与 tmux 为你提供的终端应用程序类似的功能,考虑使用 X11vnc 或一个类似的工具。