如何使用emacsclient连接到远程emacs实例?


44

我希望能够在一台计算机上运行emacs:

server $ emacs --daemon

然后从另一个连接到它:

local $ emacsclient -c server

这可能吗?如果是这样,怎么办?


1
只是一个提示:如果您不需要保持远程Emacs会话的运行,而只想使用Emacs编辑远程主机上的文件,则可以尝试使用TRAMP,它可以透明地通过网络编辑文件。
辣椒粉

@paprika我认为OP希望在本地使用远程emacs配置。因此,TRAMP可能不合适。这就是我在免责声明前面加上答案的原因。
Vamsi 2014年

3
一直有讨论,在计算器上关于这个问题:stackoverflow.com/questions/12546722/...
崩溃内核转储

Answers:


21

您不能使用emacsclient连接到在远程计算机上运行的Emacs实例。此客户端-服务器概念与(本地)进程有关,与网络节点无关。但是,您可以使用各种网络技术登录到远程计算机,连接到在此运行的emacs服务器,并在本地显示emacsclient的屏幕。根据所使用的操作系统,可以通过SSH(终端/ X转发),VNC,RDP等完成联网。

更新
正如某些人指出的那样,emacsclient实际上确实具有通过TCP连接到服务器的选项。但是,emacsclient绝不打算远程使用,TCP套接字选项是与非UNIX系统(即,没有UNIX域套接字的操作系统,例如Windows)兼容所必需的。


4
根据这篇文章,您的说法并不完全正确。你可以再详细一点吗?。
DJJ

5
@paprika:否,用于TCP连接的身份验证机制是专门针对远程访问情况设计的。我在Windows端推动使用TCP,以便该代码在POSIX上用于远程连接也很有用,从而减少了Windows特定的代码,并在POSIX端添加了功能。
Stefan

9

可能不是您要的,但是假设您已经使用X-forwarding进行了ssh设置,则可以在服务器上启动emacsclient并将其转发到远程DISPLAY。(免责声明:直接输入到Webform中的代码)

 local> ssh server -f emacsclient -c --display=$DISPLAY

不,这与问题无关。
heroxbd

4

这可能不是您想要的,但以防万一,看看是否可以以某种方式帮助您。

我通常在用Vagrant引导的虚拟机中工作,我的~/.emacs.d目录在我的计算机(本地)和虚拟机(远程)之间同步,将以下内容放入Vagrantfile文件中:

config.vm.synced_folder "~/.emacs.d", "/home/vagrant/.emacs.d"

另外,我的Emacs配置会在启动时自动启动服务器:

(require 'server)
(setq server-use-tcp t
      server-socket-dir "~/.emacs.d/server")
(unless (server-running-p)
    (server-start))

因此,当我在虚拟机中启动Emacs服务器时,可以使用以下命令连接到它:

ssh -Y -i ~/.vagrant.d/insecure_private_key "<virtual machine hostname>" 'emacsclient -c -f ~/.emacs.d/server/server'

虚拟机主机名是我在〜/ .ssh / config中配置的虚拟机的主机名:

Host <virtual machine hostname>
  HostName 127.0.0.1
  User vagrant
  Port 2222
  UserKnownHostsFile /dev/null
  StrictHostKeyChecking no
  PasswordAuthentication no
  IdentityFile /home/anler/.vagrant.d/insecure_private_key
  IdentitiesOnly yes
  LogLevel FATAL
  ForwardAgent yes

注意:在虚拟机内部启动Emacs服务器之前,请检查该~/.emacs.d/server/server文件是否不存在(如果我只是将其删除),否则将无法正常工作。


刚意识到您正在远程服务器中调用emacsclient。在这种情况下,您不必显式传递服务器文件,因为emacsclient将自动连接到它找到的第一个服务器。
Vamsi 2014年

如果已在文件中正确设置了身份文件,则无需在命令行中指定私钥.ssh/config文件。您只需要指定即可Host。如有疑问,您可以使用命令的输出:vagrant ssh-config来设置~/.ssh/config文件。
亚历山德拉·德·奥利维拉

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.