emacsclient 连接被拒绝

emacsclient 连接被拒绝

我在守护进程模式下运行 emacs,但与运行它的服务器断开了连接。重新连接后,当我运行时

emacsclient -nc

我收到错误

连接本地主机端口 6012:连接被拒绝

错误:显示localhost:12.0打不开

该守护进程似乎仍在运行,但我不知道如何连接到它,有什么建议吗?

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

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

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

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

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

echo $DISPLAY

回报

本地主机:18.0

我进入屏幕会话并运行

export DISPLAY=localhost:18.0

甚至在屏幕会话中再次运行 echo $DISPLAY

本地主机:18.0

现在 emacsclient -nc 返回

错误:显示localhost:18.0打不开

现在,运行屏幕会话的计算机正在使用相同的显示器,但仍然没有连接。

请注意,我也尝试过

 export display=localhost:18

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

 screen -S ohnoplus-five

然后连接到node005

ssh node005

然后我从屏幕上分离,而不注销 node005 并重新附加

屏幕-r ohnoplus-5

来自主机1

为了响应 Gills 的建议,我运行了 export DISPLAY=localhost18.0,这是由 echo $DISPLAY 在 host1 上返回的显示,而不是我的本地笔记本电脑。

答案1

远程 GUI (X11) 连接通过 TCP 端口 6000+n在哪里n是显示编号。因此,这两条消息指的是同一问题:某些程序尝试连接到显示器 12 但失败。

Emacsclient 不建立 X11 连接,而 Emacs 则建立。因此,如果您看到此消息,则意味着 Emacsclient 设法联系 Emacs 并告诉它打开一个新框架。如果 Emacsclient 认为 X11 显示器可用,则请求 GUI 框架,否则请求终端框架。设置环境变量后DISPLAY,Emacsclient 认为 X11 显示可用。

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

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

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

1 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,则必须在更新变量后重新启动从 host1 到 node005 的 SSH 连接DISPLAY。 (您还可以将 TCP 连接从旧显示号码转发到新显示号码,但这仅在旧显示号码在此期间未被重用的情况下才有效。)

相关内容