在 tmux 會話中,ssh 後無法連接到 X 伺服器
在工作中,我有一個帶顯示器的桌面和一些正在執行的 tmux 會話。在家裡,我經常 ssh 進入那個桌面並進入我正在執行的 tmux 會話。當我從家裡 ssh 時,我不想使用 X11,所以我不使用
-X
標誌。當我回去工作(從家裡 ssh 之後)並在桌面上使用那些 tmux 會話時,我不能再做任何會產生 GUI 的事情。我無法在 evince 中打開文件。當我嘗試使用 matplotlib 時,我收到一條: cannot connect to X server
消息。在 ssh’ing 並從家裡打開現有的 tmux 會話之後,我以後如何重新附加在桌面上打開 GUI 內容的能力?
從家裡 ssh 似乎讓 tmux 會話忘記了它可以產生 GUI 的東西。
編輯:
我需要做的就是將 DISPLAY 環境變數設置為:0.0。我認為問題在於我使用的是fish shell,並且在執行此操作時需要使用 -x 標誌來設置:
set -x DISPLAY :0.0
我遇到過同樣的問題。我通常將
tmux
其用作多顯示器 X11 桌面環境的一部分,有時還會從不支持 X11 或 set 的 chromebook SSH 進入$DISPLAY
。@chrisdembia 的答案有效,但需要DISPLAY
在 tmux 會話的其餘部分在每個新視窗中進行更改,這很痛苦。永久的解決方案是
DISPLAY
從 tmux 設置中的 tmuxupdate-environment
變數中刪除。您可以使用以下命令查看目前值: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"
這在Reset the shell DISPLAY variable in a tmux session over ssh 中有進一步解釋,這解釋了為什麼
DISPLAY
預設情況下存在不同的常見案例。