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


10

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

在家里打开并打开一个现有的tmux会话后,以后如何重新附加在桌面上打开GUI的功能?

在家中的ssh'ing似乎使tmux会话忘记了它可以生成GUI东西。

编辑:


有点困惑。您是否正在使用-X标志?如果已设置,则只能通过SSH执行X11任务。
Anko 2014年

对困惑感到抱歉。我从不在任何地方使用-X标志。我不打算通过SSH做X11东西。我只打算在tmux会话实际所在的桌面上使用X11。我将更新原始问题。
chrisdembia 2014年

Answers:


4

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

set -x DISPLAY :0.0

3
请注意,的正确值DISPLAY可能不同于:0.0。快速查找的方法是在其中创建一个新的tmux窗口echo $DISPLAY
j08lue 2015年

1
只是扩展@ j08lue的注释;就我而言,echo $DISPLAY返回localhost:10.0并运行set DISPLAY localhost:0.0成功。
IsaacS 2016年

1
有谁知道bash等效或跨外壳的版本?set -x只会增加我的冗长bash。@IsaacS,您是必须set DISPLAY localhost:10.0替代还是localhost:0.0为您工作?
icedwater

4
在bash上,您应该可以使用export DISPLAY=:0.0
chrisdembia

1
我不喜欢这种解决方案,因为在会话的其余部分(对我来说要持续数周),我必须在每个新窗口中都这样做。即使当我回到主X11系统上创建新窗口时,也会发生这种情况。我们如何才能让tmux停止设置$DISPLAY呢?
nealmcb

4

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

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

tmux show-options -g update-environment

要删除它,我将此行添加到了~/.tmux.conf文件中,包括DISPLAY

set-option -g update-environment "SSH_ASKPASS SSH_AUTH_SOCK SSH_AGENT_PID SSH_CONNECTION WINDOWID XAUTHORITY"

在ssh上的tmux会话重置shell DISPLAY变量时,将对此进行进一步说明,这解释DISPLAY了默认情况下对于另一个常见用例为何存在该变量

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.