3

我在 TCP 模式下配置并启动了一个 emacs 服务器:

  1. 添加(setq server-host "10.16.184.33")(setq server-use-tcp t).emacs
  2. 跑了emacs --daemon

在同一台主机上,runningemacsclient -t会在当前终端中弹出一个 emacs 框架,runningemacsclient -c会弹出一个新的图形客户端框架,正如预期的那样。

在另一台主机上,runningemacsclient -t -f ~/.emacs.d/server/server似乎成功连接到远程 emacs 服务器,但终端中没有创建框架:

$ emacsclient -t -f ~/.emacs.d/server/server
emacsclient: connected to remote socket at 10.16.184.33

此时,emacsclient 正在前台运行,并且 Ctrl-c 使用 SIGTERM 停止它。

变量的值server-client显示远程 emacs 客户端已连接:

server-clients's value is
(#<process server <10.16.184.33:52710>> #<process server <10.16.177.8:59460>>)

我检查过的事情:

  • Emacs 和 emacsclient 的版本:全部 24.3
  • 当交换哪些机器是服务器和远程客户端时,会出现同样的问题,除了......
  • emacsclient 打印一条额外的错误消息

    emacsclient: connected to remote socket at 10.16.177.8
    *ERROR*: Could not open file: /dev/pts/26
    

还有什么要检查或配置的想法吗?

4

1 回答 1

6

没有什么可以“检查或配置”的。您根本无法emacsclient远程使用,因为两个进程共享框架,由于显而易见的原因,该框架无法远程工作。

如果客户端连接到 Emacs 服务器,它实际上并不会自己创建框架。相反,它只是告诉服务器要创建什么样的框架,即是GUI框架还是终端框架。然后服务器根据客户端的请求和参数创建帧。

具体来说,在 TTY 客户端(即emacsclient -t)的情况下,服务器会尝试在客户端的 TTY 上创建框架。显然,如果服务器在不同的系统上运行,这将不起作用。TTY 是本地的,不能远程访问。

仅供参考,Emacs 服务器的“TCP 模式”从未用于远程访问。对于不支持本地 Unix 套接字的系统,即 Windows,这只是一种解决方法。

你甚至不想尝试让它工作,因为它非常不安全。作为本地协议,Emacs 服务器既不支持流量加密也不支持身份验证。通过运行可远程访问的 Emacs 服务器,您允许任何其他系统在您的机器上执行任意 Emacs Lisp

远程使用 Emacs 的正确方法是 SSH。在远程系统上设置 SSH 服务器,然后通过 SSH 连接到系统并emacsclient -t在远程 shell 中启动。

于 2013-09-03T18:11:22.863 回答