在工作中,我有一个带显示器的桌面和一些正在运行的 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 的东西。
编辑:
我遇到过同样的问题。我通常tmux
用作多显示器 X11 桌面环境的一部分,有时从不支持 X11 或 set 的 chromebook ssh 进入$DISPLAY
。@chrisdembia 的答案有效,但需要DISPLAY
在 tmux 会话的其余部分的每个新窗口中进行更改,这很痛苦。
永久解决方案是DISPLAY
从update-environment
tmux 设置中的 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
默认情况下存在不同的常见用例。
我需要做的就是将 DISPLAY 环境变量设置为:0.0。我认为问题在于我使用的是鱼壳,并且在执行此操作时需要使用 -x 标志来设置:
set -x DISPLAY :0.0
Run Code Online (Sandbox Code Playgroud)