emacsclient 連接被拒絕
我在守護程序模式下執行 emacs,但與執行它的伺服器斷開連接。重新連接後,當我執行
emacsclient -nc
我得到錯誤
連接本地主機埠 6012:連接被拒絕
錯誤:無法打開顯示 localhost:12.0
守護程序似乎仍在執行,但我不知道如何連接到它,有什麼建議嗎?
其他有趣的事實,可能相關也可能不相關:
我通過螢幕會話連接到頭節點,然後連接到伺服器的另一個側節點。
我已經執行此設置幾天了,通常我可以毫無問題地重新連接。
我確定我可以重新啟動守護程序,但我想恢復工作會話,因為它連接到正在執行的 matlab 作業,我通過 matlab-emacs 與之互動。
編輯:我嘗試了 Gilles 的建議,但仍然遇到問題
echo $DISPLAY
返回
本地主機:18.0
我進入螢幕會話並執行
export DISPLAY=localhost:18.0
甚至在螢幕會話中再次執行 echo $DISPLAY
本地主機:18.0
現在 emacsclient -nc 返回
錯誤:顯示本地主機:18.0 無法打開
現在與執行螢幕會話的機器中使用的顯示器相同,但仍然沒有連接。
請注意,我也嘗試過
export display=localhost:18
編輯 2:關於我的系統架構的說明 我辦公室中的筆記型電腦通過 ssh 連接到伺服器“host1”。host1 有許多節點電腦。我首先創建或登錄到螢幕會話
screen -S ohnoplus-five
然後連接到node005
ssh node005
然後我從螢幕上分離而不註銷 node005 並重新附加
螢幕 -r ohnoplus-5
來自主機 1
為了響應 Gills 的建議,我執行了 export DISPLAY=localhost18.0 ,這是 host1 上的 echo $DISPLAY 返回的顯示,而不是我的本地筆記型電腦。
遠端 GUI (X11) 連接通過 TCP 埠 6000+ n其中n是顯示編號¹。所以這兩條消息指的是同一個問題:一些程序試圖連接到顯示器 12 並且失敗了。
Emacsclient 不進行 X11 連接,Emacs 可以。因此,如果您看到此消息,則意味著 Emacsclient 設法聯繫 Emacs 並告訴它打開一個新框架。如果 Emacsclient 認為 X11 顯示可用,則請求 GUI 框架,否則請求終端框架。設置
DISPLAY
環境變數後,Emacsclient 認為 X11 顯示可用。當
DISPLAY
SSH 將 X11 連接轉發回本地電腦時,環境變數會自動設置。但是,當您附加到現有的 Screen 會話時,您將獲得在 Screen 會話中設置的環境,包括DISPLAY
變數。如果您斷開並重新連接,則無法保證顯示編號相同²。要更新
DISPLAY
變數,請從 Screen 會話中分離,執行echo $DISPLAY
以查看 SSH 設置的值(例如localhost:13
),然後重新附加到 Screen 會話並執行export DISPLAY=localhost:13
(或任何正確的數字)。如果 Screen 會話中有多個視窗,則需要在每個視窗中執行此操作。如果您創建新視窗,請鍵入Ctrl
+A
:
setenv DISPLAY localhost:13``Enter`以在 Screen 本身中設置環境變數,以便創建新視窗。如果您願意,可以通過取消設置
DISPLAY
或執行來打開終端框架emacsclient -nw
。¹ SSH 使用從 10 開始的顯示編號,僅將數字 0–9 用於本地顯示。在典型情況下,顯示 12 表示這是通過 SSH 打開的第三個 GUI 連接。
²事實上,如果你因為網路問題而斷開連接,但很快又重新連接,很可能遠端機器還沒有註意到網路問題——它只知道客戶端發送任何東西已經有一段時間了,但是這只是正常的不活動——在這種情況下,就遠端機器而言,顯示器 12 仍在使用中。
如果有多個 SSH 躍點,本地機器到中間機器的連接中斷又恢復,那麼在恢復時,中間機器上的顯示數字發生了變化,但中間機器到最終機器的 SSH 連接仍然存在轉發原來的顯示號碼。
在這種情況下,如果您只在最終機器上執行 Screen,並使用中間機器作為代理,那將是最簡單的。添加
Host node[0-9]* ProxyCommand ssh -W %h:%p host1
到你
~/.ssh/config
並執行ssh node005
。那你就不用擔心中間機了。如果您必須在中間機器上執行 Screen,那麼您必須在更新
DISPLAY
變數後重新啟動從 host1 到 node005 的 SSH 連接。(您也可以將 TCP 連接從舊的顯示號碼轉發到新的顯示號碼,但這只有在舊的顯示號碼在此期間沒有被重用時才有效。)