X11 和 Mountain Lion:如何使用 MacPorts xorg-server?

X11 和 Mountain Lion:如何使用 MacPorts xorg-server?

好的,所以 X11 不再包含在 Mountain Lion 中。没关系,没什么大不了的。每个人都说要获取 X11 的 XQuartz 软件包。

不过,我是一名开发人员,有大量软件通过 MacPorts 进行管理。我想安装 xorg-server 包,而不是 XQuartz 包,这样我就可以享受所有包管理的好处(更新、配置管理、在一个地方安装额外的软件等...)

问题是,在 OS X 10.7 及以下版本中,launchd 代理会拦截 X11 显示的请求并在 OS X 上启动 X11。要替换自动启动的 X11,需要卸载 Apple X11 plist 并加载 MacPorts X11 plist,这会改变谁来设置 $DISPLAY 变量以及启动哪个 X11 守护进程。

看起来 X11 仍然通过 xorg-server 包启动。理论上,任何尝试连接 X11 或 dbus 的行为都会导致 launchctl 启动 MacPorts X11 守护进程。

这部分还可以,参见:

echo $DISPLAY
/tmp/launch-K8CDIi/org.macports:0

但是,Apple 的旧启动代理 plist 似乎不再存在,它本来是用来启动 X11 的:会弹出一个对话框让您安装 XQuartz,而该对话框会拦截 X11 应用程序的启动。我不知道该如何替换该死的“您想安装 XQuartz 吗”消息,因为它们似乎不受启动守护进程的控制。我有一个安装良好的 X11 等待使用,但是对于 DISPLAY 请求有一些拦截,而 launchd 不再发生这种情况。我该如何告诉 Mountain Lion,它是一只坏猫,它应该停止要求我安装我已经安装的东西?

答案1

我放弃了,并选择了简单的方法,即在安装软件包后安装 XQuartz,我只需要注销并再次登录,然后我就可以启动通过 MacPorts 安装的 Gimp 2.8。

我也是一名开发人员,但我只是使用 X11 来运行 Gimp,所以不需要进一步研究其他选项,所以我的建议是接受它并且不要再浪费时钟周期 ;-)

答案2

修复方法如下:

sudo mv /usr/X11 /usr/X11.xstub
sudo ln -s /opt/X11 /usr/X11 

(假设您已在默认 macports 位置安装了 xorg-server)

至于为什么会发生这种情况,这是因为 OSX 安装中的所有内容都指向 xstub 或 libxstub,从而弹出该对话框。

应用程序倾向于直接链接到 /usr/X11/lib 中的库,因此它们会触发弹出窗口,例如:

ldd /Applications/Games/Hotline\ Miami.app/Contents/MacOS/HotlineMiami.app/Contents/MacOS/HotlineMiami 
    ...
    /usr/X11/lib/libGL.1.dylib (compatibility version 1.2.0, current version 1.2.0)
    ...       

链接到 libxstub:

ldd /usr/X11/lib/libGL.1.dylib
    ...
    /usr/X11/lib/libxstub.dylib (compatibility version 1.0.0, current version 1.0.0)
    ...

相关内容