假设我在某个远程服务器上运行了一个 Emacs 服务器,其中包含运行我的应用程序所需的所有库和软件。
然后我希望几个客户端使用 Emacs-client 连接到该远程机器。每个客户端是否都需要完整的 Emacs 安装,或者是否有一个足以与远程服务器通信的最小安装,所有操作都在哪里?
这个(Emacs-)客户端安装可以这么小,几乎所有的软件更新都可以在服务器上完成,而不影响 Emacs 客户端吗?
假设我在某个远程服务器上运行了一个 Emacs 服务器,其中包含运行我的应用程序所需的所有库和软件。
然后我希望几个客户端使用 Emacs-client 连接到该远程机器。每个客户端是否都需要完整的 Emacs 安装,或者是否有一个足以与远程服务器通信的最小安装,所有操作都在哪里?
这个(Emacs-)客户端安装可以这么小,几乎所有的软件更新都可以在服务器上完成,而不影响 Emacs 客户端吗?
根据您要实现的目标,您可以结合使用 Emacs 和 Screen。通过从远程机器上的 Screen 启动 Emacs 并从中分离,您可以随后从没有 Emacs 的不同机器重新连接。同样,这是否对您有用取决于您要做什么;但是,对于许多 Emacs 用例,这可能非常有效。如果您不熟悉以这种方式使用 Screen,这里有一些阅读材料:
是否有理由不远程运行客户端,而只使用本地显示?这样,您在本地机器上几乎只需要 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 的最佳集成方法)。
最后,我想您可能会因为 localhost 没有运行 sshd 守护程序而收到“连接被拒绝”错误?我会说 ssh 的配置超出了这个问题的范围,但是网上有很多资源。
我不确定这是否可能。emacsclient 使用 tramp 连接到远程服务器,仅通过查看require
tramp elisp 文件(41)中的 s 数量似乎不太可能。您可以使用以下方法自己尝试:
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 env 或需要 Windows 上的 x 服务器)。 ..或两个,将文件传输到服务器上的某个临时位置,然后再次在本地生成远程 x 窗口(然后同步 tmp 和本地文件之间的更改)。
有这样的东西会很酷......但怀疑它会涉及一些工作。也许我们只需要一个用 javascript 编写的 emacs 版本,它可以存在于云中或您的浏览器中……哦,在浏览器中拥有 emacs 键绑定;-)
-史蒂夫