6.7. 使用 X11

6.7.1. X.Org 组件

在 Ports 套件中提供的 X11 实现是 X.Org。 如果您的应用程序用到了 X 组件, 则应将 USE_XORG 设为所需要的那些组件。 目前可用的组件包括:

bigreqsproto compositeproto damageproto dmx dmxproto evieproto fixesproto fontcacheproto fontenc fontsproto fontutil glproto ice inputproto kbproto libfs oldx printproto randrproto recordproto renderproto resourceproto scrnsaverproto sm trapproto videoproto x11 xau xaw xaw6 xaw7 xaw8 xbitmaps xcmiscproto xcomposite xcursor xdamage xdmcp xevie xext xextproto xf86bigfontproto xf86dgaproto xf86driproto xf86miscproto xf86rushproto xf86vidmodeproto xfixes xfont xfontcache xft xi xinerama xineramaproto xkbfile xkbui xmu xmuu xorg-server xp xpm xprintapputil xprintutil xpr oto xproxymngproto xrandr xrender xres xscrnsaver xt xtrans xtrap xtst xv xvmc xxf86dga xxf86misc xxf86vm.

最新的列表, 可以在 /usr/ports/Mk/bsd.xorg.mk 中找到。

The Mesa Project 是一个致力于自由的 OpenGL 实现的计划。 您可以使用 USE_GL 变量来让 port 依赖其不同的组件。 可用的选项包括: glut, glu, glw, glew, gllinux。 为了实现向前兼容, 当使用 yes 时系统会自动将其映射为 glu

例 6.1. 使用 USE_XORG 的例子
USE_XORG=   xrender xft xkbfile xt xaw
USE_GL=     glu

许多 ports 会定义 USE_XLIB, 这会导致 port 依赖 50 多个动态连接库。 由于它出现于 X.org 模块化之前, 因此这个变量仅为向前兼容的原因提供, 新的 port 不应再使用它。

表 6.5. 用到 X 的 port 可以使用的变量
USE_XLIB此 port 用到了 X 库。 已过时 - 您应使用 USE_XORG 变量列出用到的 X.Org 组件, 而不是使用这个变量。
USE_IMAKE此 port 用到了 imake
USE_X_PREFIX已过时。 目前其作用与 USE_XLIB 相同, 并可以直接用后者替换。
XMKMF设置为 xmkmf 的完整路径名, 如果它不在 PATH 中的话。 默认值是 xmkmf -a

表 6.6. 用于表示对 X11 某些组件的依赖关系的变量
X_IMAKE_PORT用以提供 imake 以及许多其它用于联编 X11 的工具的 port。
X_LIBRARIES_PORT用以提供 X11 库的 port。
X_CLIENTS_PORT用以提供 X 客户的 port。
X_SERVER_PORT用以提供 X 服务的 port。
X_FONTSERVER_PORT用以提供字体服务的 port。
X_PRINTSERVER_PORT用以提供打印服务的 port。
X_VFBSERVER_PORT用以提供在虚拟帧缓存服务(virtual framebuffer server) 的 port。
X_NESTSERVER_PORT用以提供嵌套 X 服务的 port。
X_FONTS_ENCODINGS_PORT用以为字体提供编码的 port。
X_FONTS_MISC_PORT用以提供多种位图字体的 port。
X_FONTS_100DPI_PORT用以提供 100dpi 位图字体的 port。
X_FONTS_75DPI_PORT用以提供 75dpi 位图字体的 port。
X_FONTS_CYRILLIC_PORT用以提供西里尔位图字体的 port。
X_FONTS_TTF_PORT用以提供 TrueType® 字体的 port。
X_FONTS_TYPE1_PORT用以提供 Type1 字体的 port。
X_MANUALS_PORT用以提供面向开发人员的联机手册的 port。

例 6.2. 在变量中使用与 X11 有关的变量
# 使用某些 X11 库并依赖字体服务和西里尔字体。
RUN_DEPENDS=   ${LOCALBASE}/bin/xfs:${X_FONTSERVER_PORT} \
               ${LOCALASE}/lib/X11/fonts/cyrillic/crox1c.pcf.gz:${X_FONTS_CYRILLIC_PORT}

USE_XORG=      x11 xpm

6.7.2. 需要使用 Motif 的 port

如果您的 port 需要 Motif 库, 则应在 Makefile 中定义 USE_MOTIF。 默认的 Motif 实现是 x11-toolkits/open-motif。 用户可以通过设置 WANT_LESSTIF 变量来选择 x11-toolkits/lesstif 代替它。

bsd.port.mk 会将 MOTIFLIB 变量设置为到合适的 Motif 库的引用。 请使用补丁将您 port 中 MakefileImakefile 提到 Motif 库的地方改为 ${MOTIFLIB}

有两种比较常见的情况:

  • 如果 port 中将 Motif 在其 MakefileImakefile 表达为 -lXm, 则简单地将其替换为 ${MOTIFLIB}

  • 如果 port 在其 Imakefile 中使用 XmClientLibs, 则将其改为 ${MOTIFLIB} ${XTOOLLIB} ${XLIB}.

注意 MOTIFLIB (通常) 会展开为 -L/usr/X11R6/lib -lXm/usr/X11R6/lib/libXm.a, 所以不需要在其前加入 -L-l

6.7.3. X11 字体

如果 port 将为 X Window 系统安装字体, 将这些字体放到 LOCALBASE/lib/X11/fonts/local

6.7.4. 通过 Xvfb 来获得虚拟的 DISPLAY

某些应用程序必须在有可用的 X11 显示的时候才能成功编译。 当编译的机器没有控制台时, 这会带来问题。 为了解决这个问题, 如果定义了适当的变量, 联编基础设施会启动采用虚拟帧缓存的 X server。 此时, 编译过程中将会传出可用的 DISPLAY

USE_DISPLAY=  yes

6.7.5. 桌面项

通过利用 DESKTOP_ENTRIES 变量, 可以很容易地在您的 port 中创建桌面项 (Freedesktop 标准)。 这些项会在类似 GNOME 或 KDE 这样的符合这一标准的桌面环境中显示在应用程序菜单中。 这样做会自动创建、 安装 .desktop 文件, 并将其加入 pkg-plist。 其语法为:

DESKTOP_ENTRIES=  "NAME" "COMMENT" "ICON" "COMMAND" "CATEGORY" StartupNotify

您可以在 Freedesktop 网站上 找到可用的分类名称。 StartupNotify 表示应用程序在支持启动通知的环境中清除状态信息。

例子:

DESKTOP_ENTRIES=  "ToME" "Roguelike game based on JRR Tolkien's work" \
                  "${DATADIR}/xtra/graf/tome-128.png" \
                  "tome -v -g" "Application;Game;RolePlaying;" \
                  false

本文档和其它文档可从这里下载: ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.

如果对于FreeBSD有问题,请先阅读 文档,如不能解决再联系 <questions@FreeBSD.org>.

关于本文档的问题请发信联系 <doc@FreeBSD.org>.