如何在从Linux SSH到Mac OS X(带有XForwarding)时运行Emacs?

6
在工作中,我可以选择使用Windows或Mac两种笔记本电脑。作为一个Linux用户,我认为MacBook Pro会很适合我。因此,我把MacBook Pro带回家后发现它没有右Ctrl键,并且底部面板非常恼人。所以我说,没问题,稍后我会解决这些问题,现在我会将其用作服务器,并从我的Xfce工作站环境远程ssh连接到它。好吧... 我花了大约一天的时间尝试弄清楚如何从我的Fedora工作站ssh到Mac,并运行emacs并让它显示在我的Linux工作站上(XForwarded)。就像这样:

enter image description here

我已经安装了XQuartz并更改了/etc/sshd_config/private/etc/sshd_config的内容为:
X11Forwarding yes
XAuthLocation /opt/X11/bin/xauth

请注意,xeyes可用,xclock也是,太好了!!!

enter image description hereenter image description here

显然,X转发工作正常,因为其他GUI应用程序已经在远程显示了。但是关于Emacs,就算了吧。

/usr/bin/emacs 中的默认Emacs仅以 -nw 模式运行。然后我安装了最新的Emacs 24.3 (安装路径为 /Applications/Emacs.app/Contents/MacOS/Emacs)。这一次,如果我直接登录到笔记本电脑上(即使用笔记本电脑键盘),则通过ssh运行Emacs会显示在笔记本电脑的屏幕上!我该怎么办?如果我退出登录,则会出现以下情况:

_RegisterApplication(), FAILED TO establish the default connection to the WindowServer, _CGSDefaultConnection() is NULL.

我感到非常困惑。其他 X 应用程序为什么能够正常工作?Emacs 有什么特殊之处吗?

问题标题说“从Linux到Mac OS X”,但在详细的问题描述中,您正在Mac上运行emacs并在Linux上显示它。我建议将问题标题更改为“从Mac OS X到Linux”。无论如何,在看到下面的“sudo port install emacs +x11”答案之前,我也尝试了许多其他方法数小时,才解决了这个问题。 - giardia
1
感谢您的建议,@giardia。我明白你在说什么。我将标题从“如何在Linux到Mac时在"ssh -X"中运行Emacs”改为“如何在从Linux连接到Mac时运行Emacs…”。我认为这样更清晰明了。通过使用“SSH”作为动词并对其进行屈折变化,我们产生了一个实际上正确的英语句子形式。我认为这是最好的方法。 - Velimir Mlaker
2个回答

2
< p > Emacs.app二进制文件是建立在Mac OS X的窗口系统(我们称之为“ns”)之上的,与X11无关,因此您无法将其转发到另一个主机。 相反,您需要在Mac上安装另一个Emacs,该Emacs是建立在X11窗口系统上的(因此您可以通过Xquartz本地使用它(它允许X11客户端使用本地的Mac OS X显示),或者像任何其他X11客户端一样远程使用它)。< / p> < p > 最简单的方法可能是自己构建:获取 emacs-24.3.tar.gz 源代码,并使用 ./configure --with-x; make 进行编译。< / p>

PS:@VelimirMlaker - 您也可以在任何计算机上运行emacs,并通过SSH连接到远程文件系统。 连接路径看起来像:/ssh:user@host#sshport:/remote/path/to/open - Cheeso
1
这似乎不起作用。我已经使用“--with-x”进行了干净的构建,但是生成的emacs二进制文件仍然坚持运行本地GUI。期间发生了什么变化吗? - robert
请查看此链接 https://emacs.stackexchange.com/questions/28840/os-x-emacs-difference-between-x11-vs-ns-vs-cocoa - 必须指定 --with-ns=no - robert
@robert:嗯...我本来以为--with-x就足够了,所以我认为这很可能是一个需要报告的错误。 - Stefan
我花了很长时间尝试各种组合,包括 "--without-dbus"、"--with-x"、"--with-x-toolkit=motif" 和 "--with-ns=no"。这些组合在本地屏幕上成功地创建了一个工作中的 X11 Emacs,但在使用端口转发远程连接时并未创建新的 X11 窗口。 - giardia

2

使用Mac Ports时,需要选择x11或gtk变体,如下所示:

sudo port install emacs +x11

或者那样:
sudo port install emacs +gtk

我尝试了“brew”版本,甚至它也没有起作用! - Michael
1
我尝试了"sudo port install emacs +x11",没有任何问题就成功了。在尝试了Homebrew、Fink、编译源代码等多个小时后,终于找到了解决方法。非常感谢您的回答,@mariusm!! - giardia
1
"sudo port install emacs +x11" 今天仍然有效,可以在 Mac OS 13 Ventura、M2 处理器上使用,使用的软件版本为 MacPorts 2.8.1、Xquartz 2.8.5、emacs 28.2。 - giardia

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接