假设我在某个远程服务器上运行了一个Emacs-Server,并拥有运行应用程序所需的所有库和软件。
然后我想要几个客户端连接到远程机器,使用Emacs-client。是否每个客户机都需要完整的Emacs安装,或者是否有一个最小的安装,仅足以与远程服务器通信,所有操作都在远程服务器上进行?
这个(Emacs-)客户端安装可以如此之小,以至于几乎所有的软件更新都可以在服务器上完成,而不影响Emacs-客户端吗?
是否有理由不远程运行客户机,而仅仅使用本地显示?这样,您在本地机器上所需要的几乎所有东西就是ssh客户端和X Window服务器。
ssh -X (user)@(server) "emacsclient -c"
编辑注释:
该命令启动一个新客户端以连接到现有的Emacs服务器(它假设该服务器已经运行)。如果没有现有的服务器,您可以使用"emacsclient -a '' -c"
来自动启动emacs --daemon
,但我不知道您是否希望连接的用户启动服务器。
事实上,老实说,我对整个多用户方面很不确定,因为我以前从未这样做过。上面的身份验证由ssh处理,但是当服务器和客户端由不同的用户启动时,可能会有后续的权限问题需要处理,或者类似的问题。
这种方法应该可能使用Windows/Cygwin作为客户端和/或服务器,因为Cygwin提供Emacs, OpenSSH和X.org包。(我经常使用Windows/Cygwin作为运行在Linux上的Emacs的本地显示。)但是,它可能更难设置,并且当您使用Cygwin时,任何权限问题可能都不同。
我不太确定如果没有Cygwin,这将如何工作。NTEmacs当然不会与X.org对话,所以我想您在这种情况下是基于终端的。(可能还有其他选项,但是Cygwin听起来像是在Windows上使用所有Emacs、SSH和X的最佳集成方法)。
最后,我想你可能会得到你的"连接拒绝"错误,因为本地主机没有运行一个sshd守护进程?我想说的是,ssh的配置不在这个问题的范围之内,但是网上有很多关于这个的资源。
根据您想要实现的目标,您可以使用Emacs和Screen的组合。通过在远程机器上从Screen启动Emacs并与之分离,您可以随后从没有Emacs的另一台机器重新连接。再说一次,这对你是否有效取决于你想做什么;然而,对于许多Emacs用例,这是非常有效的。如果您不熟悉以这种方式使用Screen,这里有一些阅读材料:
screen - The Terminal Multiplexer
我不确定这是否可能。emacsclient使用tramp连接到远程服务器,仅通过查看tramp elisp文件(41)中require
的数量,这种情况似乎不太可能发生。你可以自己试一下:
zgrep -oE "(require '[a-z-]+)" *el.gz | sed -e 's%[a-z0-9-]+.el.gz:%%g' | sort | uniq -cu | wc -l
我不是emacsclient的专家,但我不认为它的设计是为了做你正在寻找的。我认为一般的用例是emacsclient允许您将使用emacs打开文件的新请求重定向到持久的emacs进程,以避免在启动时间上可能产生的一些开销。你似乎在寻找更多真正的客户/服务器关系。
我认为为了达到你的目标,你可能需要看看emacs之外的东西,可能是一个项目——emacsRemoteClient。它可以归结为一两个模型;您想要编辑的文件需要将其路径发送到服务器机器,以便emacs可以进行某种远程随机访问。然后在本地生成xwindow(使用本地X环境或在windows上需要X服务器)…或者,将文件传输到服务器上的某个临时位置,并再次在本地生成远程x窗口(随后同步TMP &本地文件)。
有这样的东西会很酷…但怀疑这需要一些工作。也许我们只需要一个用javascript编写的emacs版本,它可以存在于云中或浏览器中……哦,在浏览器中有emacs键绑定;-)
表示