FreeBSD Porter 手册
上一页 | 第6章 　特殊情况 | 下一页

# 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, gl` 和 `linux`。 为了实现向前兼容， 当使用 `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 中 `Makefile` 或 `Imakefile` 提到 Motif 库的地方改为 `${MOTIFLIB}`。

有两种比较常见的情况：

- 如果 port 中将 Motif 在其 `Makefile` 或 `Imakefile` 表达为 `-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

上一页 | 起始页 | 下一页
使用 `perl` | 上一级 | 使用 GNOME

若您有关于 FreeBSD ports 系统的问题， 请发送电子邮件至 <ports@FreeBSD.org>。
关于此文档的任何问题， 请致函 <doc@FreeBSD.org>。