【问题标题】:Python code crashes with "cannot connect to X server" when detaching ssh+tmux session分离 ssh+tmux 会话时 Python 代码崩溃并显示“无法连接到 X 服务器”
【发布时间】:2017-02-11 21:42:26
【问题描述】:

我在远程机器上运行 Python 代码(我通过 ssh 进入),然后使用 Tmux。代码运行良好,直到我与远程机器断开连接。我通过 Tmux 连接的重点是即使我没有连接到远程机器,代码也能继续运行。当我稍后重新连接时,我收到错误消息:

: cannot connect to X server localhost:11.0

有谁知道为什么会发生这种情况或我该如何阻止它?

【问题讨论】:

  • 你能显示代码吗?
  • 你试过后台运行吗?
  • 这个错误很明显——它使用的是你的本地 X 服务器。
  • 您是否在后台运行作业?如果不是,则在脚本调用的末尾放一个 &
  • @Aquaticallychallengedfish,你希望这有什么帮助?它在 tmux 中运行——它的外壳和控制终端不会在断开连接时消失。

标签: python ssh tmux


【解决方案1】:
cannot connect to X server localhost:11.0

...意味着您的代码正在尝试(并且失败)连接到 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

顺便说一句,请参阅问题 xvfb-run unreliable when multiple instances invoked in parallel 以获取有关 xvfb-run 中存在的错误的注释以及可用的修复程序。


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

【讨论】:

  • 非常有用,谢谢。我不确定为什么我的代码甚至试图建立 GUI 连接,因为我不要求它显示()任何东西。但是现在我知道问题出在哪里了,我可以尝试一下。谢谢!
  • 啊。通常,初始化一个 GUI 库就足以尝试连接而无需实际显示任何窗口。
猜你喜欢
  • 2015-07-03
  • 2019-12-22
  • 2018-11-17
  • 2021-07-16
  • 1970-01-01
  • 2020-02-10
  • 1970-01-01
  • 2022-07-01
  • 1970-01-01
相关资源
最近更新 更多