好的,所以 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)
...