我在TCP模式下配置并启动了emacs服务器:
(setq server-host "10.16.184.33")
和(setq server-use-tcp t)
添加到.emacs emacs --daemon
在同一台主机上,运行emacsclient -t
会在当前终端中显示一个emacs框架,正在运行emacsclient -c
会按预期显示一个新的图形客户端框架。
在另一台主机上,运行emacsclient -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>>)
我检查过的事情:
emacsclient会输出额外的错误消息
emacsclient: connected to remote socket at 10.16.177.8
*ERROR*: Could not open file: /dev/pts/26
还有哪些想法可以检查或配置?
答案 0 :(得分:6)
没有什么可以“检查或配置”。您根本无法远程使用emacsclient
,因为两个进程共享该帧,由于显而易见的原因,该帧无法远程工作。
如果客户端连接到Emacs服务器,它实际上并不创建框架本身。相反,它仅告诉服务器要创建什么类型的帧,即GUI帧还是终端帧。然后,服务器根据客户端的请求和参数创建帧。
具体而言,在TTY客户端(即emacsclient -t
)的情况下,服务器尝试在客户端的TTY上创建一个帧。显然,如果服务器在不同的系统上运行,这将不起作用。 TTY是本地的,无法远程访问。
仅供参考,Emacs服务器的“TCP模式”从未用于远程访问。它只是一种解决方案,适用于不支持本地Unix套接字的系统,即Windows。
你甚至不想尝试让它发挥作用,因为它非常不安全。作为本地协议,Emacs服务器既不支持流量加密也不支持身份验证。通过运行可远程访问的Emacs服务器,您允许任何其他系统在您的计算机上执行任意Emacs Lisp 。
远程使用Emacs的正确方法是SSH。在远程系统上设置SSH服务器,然后通过SSH连接到系统并在远程shell中启动emacsclient -t
。