ssh – emacsclient连接被拒绝

我在守护进程模式下运行emacs,并且它与运行它的服务器断开连接.重新连接后,当我跑

emacsclient -nc

我收到了错误

connect localhost port 6012: Connection refused

ERROR: Display localhost:12.0 can’t be opened

守护程序似乎仍在运行,但我无法弄清楚如何连接它,任何建议?

其他有趣的事实,可能相关或不相关:

我通过屏幕会话连接到头节点,然后连接到服务器的另一个侧节点.

我已经运行了这个设置几天,通常我能够毫无问题地重新连接.

我确定我可以重新启动守护进程,但我想恢复工作会话,因为它连接到正在运行的matlab作业,我通过matlab-emacs连接.

编辑:
我试过吉尔斯的建议,但仍然遇到问题

echo $DISPLAY

回报

localhost:18.0

我进入了屏幕会话并跑了

export DISPLAY=localhost:18.0

甚至跑了
    在屏幕会话内再次回显$DISPLAY

localhost:18.0

现在emacsclient -nc返回

ERROR: Display localhost: 18.0 can’t be opened

现在与运行屏幕会话的机器中使用的显示相同,但​​仍然没有连接.

请注意,我也尝试过

 export display=localhost:18

edit2:关于我的系统架构的说明
我办公室的笔记本电脑通过ssh连接到服务器’host1′. host1有许多节点计算机.我首先创建,或登录屏幕会话

 screen -S ohnoplus-five

然后用.连接到node005

ssh node005

然后我从屏幕上分离而没有退出node005并重新附加

屏幕-r ohnoplus-five

来自host1

为了回应Gills的建议,我运行了导出DISPLAY = localhost18.0,它是host1上echo $DISPLAY返回的显示,而不是我的本地笔记本电脑.

最佳答案
Remote GUI (X11) connections通过TCP端口6000 n,其中n是显示号码¹.所以这两条消息引用了同样的问题:某些程序试图连接到显示器12并失败.

Emacs没有与X11建立连接,Emacs确实如此.因此,如果您看到此消息,则表示Emacsclient设法联系Emacs并告诉它打开一个新帧.如果Emacsclient认为X11显示器可用,则请求GUI帧,否则请求终端帧.设置DISPLAY环境变量后,Emacsclient认为X11显示可用.

当DISPLAY环境变量将X11连接转发回本地计算机时,它会自动由SSH设置.但是当您附加到现有的Screen会话时,您将获得在Screen会话中设置的环境,包括DISPLAY变量.如果断开连接并重新连接,则无法保证显示屏编号相同².

要更新DISPLAY变量,从屏幕会话中分离,运行echo $DISPLAY以查看SSH设置的值(例如localhost:13),然后重新连接到屏幕会话并运行export DISPLAY = localhost:13(或任何正确的数字)是).如果屏幕会话中有多个窗口,则需要在每个窗口中执行此操作.如果您创建新窗口,请键入Ctrl A:setenv DISPLAY localhost:13`回车在屏幕本身中设置环境变量,以便新窗口.

如果您愿意,可以通过取消设置DISPLAY或运行emacsclient -nw来打开终端框架.

¹SSH使用从10开始的显示数字,仅为本地显示留下数字0-9.在典型情况下,显示器12表示这是通过SSH打开的第三个GUI连接.
²事实上,如果由于网络问题而断开连接但很快就重新连接,很可能远程机器还没有注意到网络问题 – 它只知道自从客户端发送任何内容以来已经有一段时间了,但是这只是正常的不活动 – 在这种情况下,就远程机器而言,显示器12仍在使用中.

如果您有多个SSH跃点,并且从本地计算机到中间计算机的连接被中断并恢复,则在恢复时,中间计算机上的显示编号已更改,但是从中间计算机到最终计算机的SSH连接仍然转发原始显示号码.

在这种情况下,如果仅在最终机器上运行Screen,并将中间机器用作proxy,则最简单.

Host node[0-9]*
ProxyCommand ssh -W %h:%p host1

到你的〜/ .ssh / config并运行ssh node005.然后你不必担心中间机器.

如果必须在中间计算机上运行Screen,则必须在更新DISPLAY变量后重新启动从host1到node005的SSH连接. (您也可以将TCP连接从旧显示号码转发到新显示号码,但只有在此期间未重复使用旧显示号码时才能使用.)

转载注明原文:ssh – emacsclient连接被拒绝 - 代码日志