在 tmux 会话中,ssh'ing 后无法连接到 X 服务器

chr*_*bia 13 ssh tmux x11

在工作中,我有一个带显示器的桌面和一些正在运行的 tmux 会话。在家里,我经常 ssh 进入该桌面并进入我正在运行的 tmux 会话。当我从家里SSH,我希望使用X11,所以我不使用的-X标志。当我回去工作(从家里 ssh'ing 之后)并在桌面上使用那些 tmux 会话时,我无法再做任何会产生 GUI 的事情。我无法在 evince 中打开文件。当我尝试使用 matplotlib 时,我收到一条: cannot connect to X server消息。

在 ssh'ing 并从家里打开现有的 tmux 会话后,我以后如何重新附加在桌面上打开 GUI 内容的功能?

从家里 ssh'ing 似乎让 tmux 会话忘记了它可以产生 GUI 的东西。

编辑:

nea*_*mcb 8

我遇到过同样的问题。我通常tmux用作多显示器 X11 桌面环境的一部分,有时从不支持 X11 或 set 的 chromebook ssh 进入$DISPLAY。@chrisdembia 的答案有效,但需要DISPLAY在 tmux 会话的其余部分的每个新窗口中进行更改,这很痛苦。

永久解决方案是DISPLAYupdate-environmenttmux 设置中的 tmux变量中删除。您可以使用以下命令查看当前值:

tmux show-options -g update-environment
Run Code Online (Sandbox Code Playgroud)

要删除它,我将此行添加到我的~/.tmux.conf文件中,包括除以下内容之外的所有内容DISPLAY

set-option -g update-environment "SSH_ASKPASS SSH_AUTH_SOCK SSH_AGENT_PID SSH_CONNECTION WINDOWID XAUTHORITY"
Run Code Online (Sandbox Code Playgroud)

这在Reset the shell DISPLAY variable in a tmux session over ssh 中进一步解释,这解释了为什么DISPLAY默认情况下存在不同的常见用例。


chr*_*bia 5

我需要做的就是将 DISPLAY 环境变量设置为:0.0。我认为问题在于我使用的是鱼壳,并且在执行此操作时需要使用 -x 标志来设置:

set -x DISPLAY :0.0
Run Code Online (Sandbox Code Playgroud)

  • 在 bash 上,您应该能够使用 `export DISPLAY=:0.0`。 (6认同)
  • 请注意,`DISPLAY` 的正确值可能与`:0.0` 不同。一个快速查找的方法是创建一个新的 tmux 窗口并在那里输入 `echo $DISPLAY`。 (4认同)
  • 只是从@j08lue 扩展评论;在我的例子中,`echo $DISPLAY` 返回了 `localhost:10.0` 并且运行 `set DISPLAY localhost:0.0` 就成功了。 (2认同)
  • 有谁知道`bash` 等价物,或跨壳版本?`set -x` 只是增加了我在 `bash` 中的详细程度。@IsaacS,您是否必须改为`set DISPLAY localhost:10.0` 还是`localhost:0.0` 为您工作? (2认同)