远程emacs客户端连接,但不在终端中创建新帧

Joe*_*yle 3 emacs emacsclient

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

  1. 新增(setq server-host "10.16.184.33")(setq server-use-tcp t)到的.emacs
  2. 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
Run Code Online (Sandbox Code Playgroud)

此时,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>>)
Run Code Online (Sandbox Code Playgroud)

我检查过的事情:

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

    emacsclient: connected to remote socket at 10.16.177.8
    *ERROR*: Could not open file: /dev/pts/26
    
    Run Code Online (Sandbox Code Playgroud)

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

lun*_*orn 6

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

如果客户端连接到Emacs服务器,则它实际上不会创建帧本身.相反,它只是告诉服务器要创建哪种帧,即GUI帧还是终端帧.然后,服务器根据客户端的请求和参数创建帧.

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

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

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

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