如何正確(重新)設置 $DISPLAY?
我使用 MobaXTerm 通過 ssh 從 Windows PC 連接到 Linux PC。
在 ssh 會話中,我有一個帶有幾個視窗和窗格的 tmux 會話。
ssh 會話通常會在幾個小時不活動後斷開連接(我嘗試過在 MobaXTerm 中使用看似相關的保持活動設置,但它從未起作用)。
第一個問題:在啟動一個新的 ssh 會話並重新連接到我現有的 tmux 會話
$DISPLAY
後,有時會“錯誤地”設置該變數 - 我的意思是,當我啟動一個使用 X-Windows(例如 Firefox)的 GUI 時,我’將收到“無法打開顯示”錯誤消息。例如:$ firefox & [1] 23077 $ Unable to init server: Broadway display type not supported: localhost:11.0 Error: cannot open display: localhost:11.0 [1]+ Exit 1 firefox $ echo $DISPLAY localhost:11.0
通常當我打開一個新終端時,我會從這個終端獲得更新/正確的值
$DISPLAY
- 我將能夠成功啟動使用 X-Window 的 GUI。**問題:有什麼方法可以動態地“更新”
$DISPLAY
現有終端(即自 ssh 斷開連接之前就一直存在的終端)中*的值?***即,我想盡量避免僅僅為了獲取/發現$DISPLAY
.我對所代表的內容並沒有真正的了解
$DISPLAY
-因此,如果有人可以在所描述的上下文中解釋它所代表的內容和作用,我將不勝感激。
DISPLAY
X 客戶端(應用程序)使用它來查找要連接的相應 X 伺服器。它的形式是hostname:displaynr.screennr
,但通常你只會看到類似的東西:0
,這意味著執行的 X 伺服器的第一個顯示localhost
。在那裡使用主機名並不安全,因為 X 協議沒有加密。因此
ssh
,X 在此模式上通過尋找一個免費的顯示號碼(通常為 10 或更大)並在此顯示號碼上偽裝成 X 伺服器來搭載此模式。但實際上它只是通過 ssh 連接將 X 協議轉發到在呼叫 ssh 客戶端的主機上執行的 X 伺服器。所以這就是為什麼
DISPLAY
當你重新連接時你會得到不同的內容ssh
- 每個連接都ssh
設置這個變數,可能是一個不同的值。在附加到 tmux之前,這個新的正確值是可見的。當您打開一個新終端時它也可見,因為新終端將複製新設置的
DISPLAY
變數,而舊終端將保留DISPLAY
它已有的變數。因此,如果不是附加到 tmux,而是執行一個自己編寫的腳本,該腳本讀取
DISPLAY
,附加到 tmux,然後設置DISPLAY
現有會話,您可以自動化您需要做的事情。然而,用 tmux 做這件事似乎並不簡單。這是另一個問題,其中提供了一些建議,這些建議可能對您有用(或不適用)。
附加 tmux 後,預設情況下它將
DISPLAY
在會話環境中更新,但它只能將其應用於新窗格。要將其應用於現有窗格,您應該能夠執行以下操作:eval "$(tmux showenv -s DISPLAY)"