6.7 Using X11

6.7.1 X.Org components

The X11 implementation available in The Ports Collection is X.Org. If your application depends on X components, set USE_XORG to the list of required components. Available components, at the time of writing, are:

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.

Always up-to-date list can be found in /usr/ports/Mk/bsd.xorg.mk.

The Mesa Project is an effort to provide free OpenGL implementation. You can specify a dependency on various components of this project with USE_GL variable. Valid options are: glut, glu, glw, gl and linux. For backwards compatibility, the value of yes maps to glu.

Example 6-1. USE_XORG example

USE_XORG=   xrender xft xkbfile xt xaw
USE_GL=     glu

Many ports define USE_XLIB, which makes the port depend on all the 50 or so libraries. This variable exists for backwards compatibility, as it predates modular X.Org, and should not be used on new ports.

Table 6-5. Variables for ports that use X

USE_XLIB The port uses the X libraries. Deprecated - use a list of X.Org components in USE_XORG variable instead.
USE_IMAKE The port uses imake.
USE_X_PREFIX Deprecated. Today it is equivalent to USE_XLIB and can be replaced by it freely.
XMKMF Set to the path of xmkmf if not in the PATH. Defaults to xmkmf -a.

Table 6-6. Variables for depending on individual parts of X11

X_IMAKE_PORT Port providing imake and several other utilities used to build X11.
X_LIBRARIES_PORT Port providing X11 libraries.
X_CLIENTS_PORT Port providing X clients.
X_SERVER_PORT Port providing X server.
X_FONTSERVER_PORT Port providing font server.
X_PRINTSERVER_PORT Port providing print server.
X_VFBSERVER_PORT Port providing virtual framebuffer server.
X_NESTSERVER_PORT Port providing a nested X server.
X_FONTS_ENCODINGS_PORT Port providing encodings for fonts.
X_FONTS_MISC_PORT Port providing miscellaneous bitmap fonts.
X_FONTS_100DPI_PORT Port providing 100dpi bitmap fonts.
X_FONTS_75DPI_PORT Port providing 75dpi bitmap fonts.
X_FONTS_CYRILLIC_PORT Port providing cyrillic bitmap fonts.
X_FONTS_TTF_PORT Port providing TrueType® fonts.
X_FONTS_TYPE1_PORT Port providing Type1 fonts.
X_MANUALS_PORT Port providing developer oriented manual pages

Example 6-2. Using X11 related variables in port

# Use X11 libraries and depend on
# font server as well as cyrillic fonts.

USE_XLIB=      yes

6.7.2 Ports that require Motif

If your port requires a Motif library, define USE_MOTIF in the Makefile. Default Motif implementation is x11-toolkits/open-motif. Users can choose x11-toolkits/lesstif instead by setting WANT_LESSTIF variable.

The MOTIFLIB variable will be set by bsd.port.mk to reference the appropriate Motif library. Please patch the source of your port to use ${MOTIFLIB} wherever the Motif library is referenced in the original Makefile or Imakefile.

There are two common cases:

Note that MOTIFLIB (usually) expands to -L/usr/X11R6/lib -lXm or /usr/X11R6/lib/libXm.a, so there is no need to add -L or -l in front.

6.7.3 X11 fonts

If your port installs fonts for the X Window System, put them in X11BASE/lib/X11/fonts/local.

6.7.4 Getting fake DISPLAY using Xvfb

Some applications require a working X11 display for compilation to succeed. This pose a problem for the FreeBSD package building cluster, which operates headless. When the following canonical hack is used, the package cluster will start the virtual framebuffer X server. The working DISPLAY is then passed to the build.


6.7.5 Desktop entries

Desktop Entries (Freedesktop standard) can be easily created in your port using DESKTOP_ENTRIES variable. These entries do show up in application menus of compliant desktop environments like GNOME or KDE. The .desktop file will be created, installed, and added to the pkg-plist automatically. Syntax is:


The list of possible categories is available on the Freedesktop website. The StartupNotify indicates, if the application will clear the status in startup notification aware environment.


DESKTOP_ENTRIES=  "ToME" "Roguelike game based on JRR Tolkien's work" \
                  "${DATADIR}/xtra/graf/tome-128.png" \
                  "tome -v -g" "Application;Game;RolePlaying" \
For questions about the FreeBSD ports system, e-mail <ports@FreeBSD.org>.
For questions about this documentation, e-mail <doc@FreeBSD.org>.