我需要通过 ssh 从 Linux 机器远程运行 Mac 上的程序。该程序的奇怪之处在于它有一个命令行界面,但它总是创建一个 GUI 窗口,即使这不是必需的。由于我从 Linux 机器登录,因此出现以下错误:
<Error>: kCGErrorFailure: Set a breakpoint @ CGErrorBreakpoint() to catch errors as they are logged.
_RegisterApplication(), FAILED TO establish the default connection to the WindowServer,
_CGSDefaultConnection() is NULL.
couldn't allocate new Mac window
我能以某种方式让它认为它连接到了 Mac 上的 WindowServer 吗?(再说一次,我不需要看到那个窗口)
答案1
您误诊了问题:从错误消息来看,该程序正试图在 Mac 控制台上打开一个窗口,但由于您没有坐在键盘前,因此它无权访问该窗口(想象一下,如果其他人坐在键盘前,就会突然弹出一个窗口)。
Linux 运行 X11,而您的 Mac 运行的是 Window Server(除非您也设置了 X11)。如果您在 ssh 终端中启动 emacs,在 DISPLAY 环境变量的帮助下,它可能会成功在您的 Linux 机器上弹出一个窗口。
但你的程序并没有这样做。也许它会,如果你定义适当地设置 DISPLAY 变量。Ssh 可以使用 -X 选项自动执行该操作。当您可以让普通的 X 程序(如 emacs 或 xterm)在您的机器上弹出一个窗口时,您就会知道它设置正确。如果您需要远程运行 GUI 程序,这是唯一的方法。
但是既然您说您实际上并不需要 GUI:请阅读程序的文档并找出是否有可以抑制它的命令行选项。