cvs commit: hints xfree86-superhint.txt

timothy at timothy at
Sun Dec 15 19:15:19 PST 2002

timothy     02/12/15 22:15:19

  Added:       .        xfree86-superhint.txt
  Initial commit.
  Revision  Changes    Path
  1.1                  hints/xfree86-superhint.txt
  Index: xfree86-superhint.txt
  TITLE:		XFree86
  AUTHOR:		Sam Halliday <fommil AT yahoo DOT ie>
  		Dave Ayers <fogey AT mindspring DOT com>
  		Luke Guest <laguest AT nebulas DOT demon DOT co DOT uk>
  		Marc Heerdink <marc AT koelkast DOT net>
          This hint covers the building and initial configuration of an XFree86
  server and client (XWindows). The setup of DRI (graphics acceleration) is also
  shown for those who have such a capable card (for a recent list of supported
  cards, see
  	This hint is a combination of hints x11.txt, xfree86_41.txt,
  xfree86_42.txt, xfree86_4.2.0_dri.txt, nvidia_glx and dri.txt. For that
  reason, credits are due to
  		Matthias Benkmann <m DOT s DOT b AT gmx DOT net>
  		Ryan Strayer <rstrayer AT kc DOT rr DOT com>
  		manaveru <manaveru AT manaveru DOT net>
  		Sergey Ostrovsky <sostrovsky AT snip DOT net>
  Further credit must be given to
  		Jim Gifford <jim AT jg555 DOT com>
  for the bison fix.
  0.01	first release.
  0.02	suggestions by Matthias Benkmann.
  0.03	suggestions by Marc Heerdink.
  0.04	building of glut added, more from Matthias Benkmann.
  Software you need
  	This is the 3-part source code for XFree86, uncompress all 3 tarballs
  from the same location.
  XFree86 patch from 4.2.0 to 4.2.1:
  	This will update your source to the bugfixed patch release 4.2.1. This
  is highly reccomended.
  SHM Security Fix:
  	This patch applies to the 4.2.1 tree and fixes a security issue with
  xdm, X's graphical login.
  Jim Gifford's bison syntax patch:
  	This fixes some syntax issues in the source code which are only picked
  up by more recent versions of bison. It is a good idea to use this patch, even
  if you have an older version of bison.
  The ageing ttmkfdir tool
  	This is needed for making a fonts.scale file for TTF fonts.
  MesaLib and MesaDemos (for glut)
  Make sure you check all the MD5SUMs against the ones you download. Most trojan
  attempts of late have failed to do this, and this is therefore our only weapon
  against such attacks (which is flawed anyway if there is no GPG signature)
  ad43a8e9e39703322005cd6f7145b77f  X420src-1.tgz
  dae33268a9f2735b9678a81fb23e8d3e  X420src-2.tgz
  560899e175a02ab592185b69756f539e  X420src-3.tgz
  38adc94a4953a6b29e8619c25dda4887  4.2.0-4.2.1.diff.gz
  18eb56110c7f66895111bd9f3513b54e  4.2.1-mit-shm-security.patch
  dcf6aa4d28f5c52acf2bb57f49f53089  ttmkfdir.tar.gz
  ebfac20c7fe7943243bc54a4b755f50d  MesaDemos-5.0.tar.bz2
  df44d99ae97c5c0df631575757a96d86  MesaLib-5.0.tar.bz2
  Apply all the patches before proceeding
  This hint will start by showing how to quickly build XFree86, then how to
  configure the X server and check that it works. Next we set up the font
  server and add truetype font support and build glut. For those lucky ones
  out there, we set up graphics acceleration. The graphics acceleration
  appears in several sections; standard DRI, bleeding edge DRI, bad news about
  voodoo cards and finally setting up NVidia cards.
  Building XFree86
  XFree does not use the standard GNU tools for building and installing. It uses
  a load of C header files to allow us the power to define the parts which we
  need to compile...  good for future re-compiles. The many options are clear
  from browsing the files in config/cf. But for most peoples needs, the following
  should suffice.
  You may wish to tailor the DefaultGcc2i386Opt define to reflect your hardware,
  if you have a different architecture altogether from i*86, use DefaultGcc2AxpOpt
  or DefaultGcc2PpcOpt to define the optimisation flags for an Alpha or PPC,
  respectively. Set HasMTRRSupport, HasMMXSupport, HasKatmaiSupport and
  Has3DNowSupport to YES if you have a CPU capable of those instructions.
  You can see if your CPU has MTRR, MMX, or Katmai support by looking at the
  'flags' section of /proc/cpuinfo.
  This will add support for all graphics cards, feel free to choose only the
  modules you require if you are sure about your choice. If your card is not
  supported under DRI (graphics acceleration), then you should say NO to
  BuildXF86DRI and BuildXF86DRM. Please note this is a C header file not a
  bash script, so the # are not comments but the /* comments */ are.
  cat > config/cf/host.def << "EOF"
  /* LFS HINT XFree86-4.2.1 0.01 */
  #define DefaultGcc2i386Opt     -s -O3 -fomit-frame-pointer
  #define GccWarningOptions      -w -pipe
  #define TermcapLibrary         -lncurses
  #define HasZlib                YES
  #define HasNCurses             YES
  #define HasMTRRSupport         NO	/* Also to be enabled in the kernel */
  #define HasMMXSupport          NO       /* Any i586 or above                */
  #define HasKatmaiSupport       NO       /* PIII SSE instuctions             */
  #define Has3DNowSupport        NO       /* AMD instructions                 */
  #define XInputDrivers          mouse void
  #define XF86CardDrivers        /* build all drivers available */
                                 mga glint nv tga s3 s3virge sis rendition
                                 neomagic i740 tdfx savage cirrus vmware
                                 tseng trident chips apm GlideDriver fbdev
                                 i128 ati AgpGartDrivers DevelDrivers ark
                                 cyrix siliconmotion vesa vga
                                 XF86OSCardDrivers XF86ExtraCardDrivers
  #define BuildXF86DRI           YES
  #define BuildXF86DRM           YES
  #define DriDrivers             gamma tdfx mga i810 i830 r128 radeon sis
  #define BuildLinuxDocHtml      NO
  #define BuildLinuxDocPS        NO
  #define BuildAllSpecsDocs      NO
  #define BuildHtmlManPages      NO
  #define BuildSpecsDocs         NO
  /* future `update' compiles do not need these, in that case say NO */
  #define InstallXinitConfig     YES
  #define InstallXdmConfig       YES
  #define InstallFSConfig        YES
  OK.. thats the hard bit out of the way! Now we compile it and have a cuppa!
  	make World >xcompile.stdout 2>xcompile.stderr
  (some people may prefer to watch the screen tick by, but as the console is
  a slow device, this will actually slow down the compile, but if you insist
  then type 'make World 2>&1 | tee World.LOG' instead )
  For some bizarre reason, if make fails on any file in make World, the
  compile continues, and problems only manifest themselves in the make install.
  This is quite annoying as it may lead to an old 'working' X being overwritten
  by a new 'broken' one. For that reason I suggest anyone with an X install
  present already, make a backup of /usr/X11R6 at this stage.
  Once that is all done, type
  	make install 
  and then (optionally)
  I reccomend you look at the hint on man pages, since default man pages are
  uncompressed. Unfortunately it is not as simple as typing 'gzip -9 *' to
  compress the pages as there are symbolic links to consider also.
  At this stage, you are required to add the line '/usr/X11R6/lib' to
  /etc/ and run ldconfig. This updates the dynamic linker cache to
  respect the new X install. You should also add /usr/X11R6/bin to the global
  variable PATH in /etc/profile.
  Recent versions of XFree86 (such as this release) no longer require seperate
  compilation of Mesa or Freetype... which is good news! In fact, as those
  libraries are entangled into the standard XFree86 package, it is reccomended
  not to upgrade unless the XFree86 people do, as conflicts have and may still
  arise! (you have been warned)
  Configuring and Starting XFree86
  This is the important stage where you set the configuration file for XFree86,
  /etc/X11/XF86Config-4. It is quite tricky to get right the first time, and
  you are recommended to use the file from your host system. If you do not have
  the luxury of a previous config file, you may generate one called by typing
          XFree86 -configure
  and after browsing it, test it by typing
          XFree86 -xf86config $PWD/
  You won't get anything but a flimmering 640 x 480 screen with an
  annoying pattern and an X-shaped mouse cursor that you can move (if
  the mouse works). Press Ctrl-Alt-Backspace to exit, then move your
  config file to its final location
          mv /etc/X11/XF86Config-4
  Congratulations! You have just installed X. Now read the XFree86-HOWTO you get
  from It will give you an overview of how X is started. Read the
  scripts /usr/X11R6/bin/startx and /usr/X11R6/lib/X11/xinit/xinitrc which
  determine what happens when you type 'startx'. You will quickly notice that
  you may create your own user-custom .xinitrc file.
  You may also want to type
          man /usr/X11R6/man/man{1,5,7}/*
  which will let you read all manpages in a row (just press q to go to the
  next manpage). Once you're through you know more about X than 99% of the
  people out there ;-)
  You'll probably want to do some more configuring in XF86Config-4, you
  should read /usr/X11R6/lib/X11/ which is a well-commented
  The mouse setup is very important as incorrect settings result in a crashing
  (or freezing!) of X.
  [I was once at a conference where the only person who gave their talk using
  linux had removed their laptop mouse just for that startup...
  X crashed instantly.]
  It is most iportant that the Protocol and Device are true for your machine.
  This setup is for an IMPS/2 mouse. The Device should be /dev/ttyS0 if you
  have a COM1 style mouse
  Section "InputDevice"
      Identifier  "Mouse0"
      Driver      "mouse"
      Option "Protocol"    "IMPS/2"
      Option "Device"      "/dev/psaux"
  # uncomment the next line and edit if you want more 'action' from your mouse...
  #   Option "Resolution" "300"
  # uncomment the next 2 lines to enable the wheel on most mice...
  #    Option "Buttons" "5"
  #    Option "ZAxisMapping" "4 5"
  Some other things you will surely want to set are
  Section "InputDevice"
   Identifier  "Keyboard0"
   Driver      "keyboard"
   Option "XkbModel" "pc102"
   Option "XkbLayout" "<your layout>"
   Option "AutoRepeat"  "250 30"
  Section "Monitor"
   Identifier   "Monitor0"
   VendorName   "Iiyama"
   ModelName    "VisionMaster 450"
   HorizSync    27-102
   VertRefresh  50-160
  Of course you will need to enter the correct values for your monitor. If 
  you set the right values you don't need to fiddle with modelines anymore 
  (what a relief!) because XFree86 will choose an appropriate VESA mode with 
  a high refresh rate. Just specify what mode you want like this:
  Section "Screen"
   Identifier "Screen0"
   Device     "Card0"
   Monitor    "Monitor0"
   DefaultDepth 16
   SubSection "Display"
    Depth     16
    Modes   "1024x768"
    Virtual 1280 960
  This is all it takes to get a nice virtual screen of 1280x960 with a real 
  resolution of 1024x768 with eye-friendly 85Hz (on my system, it depends on 
  your monitor's capabilities of course).
  After finishing off the X configuration and optional sections, your next
  task will be finding a Window Manager you like using. XFree86 comes with a
  standard (and not user friendly) Window Manager called 'twm'. I personally
  recommend 'blackbox' (, which is a very
  light-weight program and is efficient to use. A lot of people prefer a
  totally integrated Desktop environment, such as KDE or Gnome.
  It is your choice!
  X Font Server (optional, recommended)
  The best way to utilise fonts under XFree86 is with a font server, which
  handles all the font aliases and matching instead of the actual X server
  itself. This server should be started in the initscripts, and it is left
  to your own discression as to when to load the font server.
  cat > /etc/rc.d/init.d/xfs << "EOF"
  source /etc/sysconfig/rc
  source $rc_functions
  case "$1" in
               echo "Starting X font server..."
               rm -fr /tmp/.font-unix
               loadproc /usr/X11R6/bin/xfs -port -1 -daemon -droppriv -user xfs
               echo "Stopping X font server..."
               killproc xfs
               $0 stop
               sleep 1
               $0 start
               statusproc xfs
               echo "Usage: $0 {start|stop|restart|status}"
               exit 1
  chmod 755 /etc/rc.d/init.d/xfs
  Now we setup the font server. The default config files /etc/X11/XftConfig
  and /etc/X11/fs/config keep all the font configuration. The defaults will work
  fine with this install, but I invite you to browse those files. It should
  be obvious how to add extra font directories.
  To make use of xfs, just add the FontPath line to your X config file something
  Section "Files"
          FontPath     "unix/:-1"
  TrueType Fonts (optional)
  This has recently become trivial to set up, all you require are some ttf fonts,
  and the tool ttmkfdir (or the mkttfdir perl script, provided by fttools).
  As you will only require the ttmkfdir program once, you may just use the binary
  in the tarball. [I cannot get this package to compile under gcc-3.2.1.] All this
  program does is make a fonts.scale file (I hope you read the man pages as
  suggested earlier!). Use it by
  	cd (your ttf directory)
  	ttmkfdir -o fonts.scale
  And your fonts should be ready to use. Just make sure your X config has the
  freetype module loaded, something like
  Section "Module"
  	Load  "freetype"
  Glut (optional, recommended)
  Unfortunately not everything we need comes with X. Almost all programs that
  use OpenGL need the glut library as well, so we'll install it. We'll use the
  version of glut that comes with Mesa, because it has been adapted to work with
  X. Mesa is a huge download though, especially since we're only using the glut
  library from it. Once you unpack both the Mesa files, enter the root directory
  and build _only_ glut by typing
  	./configure --prefix=/usr/X11R6
  	cd src-glut
  	make install
  There are some other useful things included with Mesa, such as the demos. If
  you want to build them to measure performance, run the following commands to
  build them, this is an example of how to build the 'gears' program using glut,
  there are many to choose from, building in a similar fashion:
  	cd ../demos
  	make -f Makefile.X11 CFLAGS="$CFLAGS -L/usr/X11R6/lib" gears
  Accelerated Graphics [DRI] (optional)
  The direct rendering infrastructure, also known as the DRI, is a framework for
  allowing direct access to graphics hardware in a safe and efficient manner. It
  includes changes to the X server, to several client libraries, and to the
  kernel. The first major use for the DRI is to create fast OpenGL implementations.
  Bleeding edge users may use the latest CVS version of DRI, details at the end,
  but most will be fine using the more stable XFree86. I have found CVS DRI to be
  quite buggy. (Although a debug build and gdb hanging around does a world of
  help for the developers!) You must have AGP compiled into your kernel, and
  there must be support for your AGP chipset as well as the graphics card itself.
  This is easy to get running (in theory), just ensure the lines
  Section "Module"
          Load  "glx"
          Load  "dri"
  are present in your /etc/X11/XF86Config-4. You may optionally set
  Section "DRI"
       Mode 0666
  so that you can control the permissions of DRI to users. The default is root
  access only, but we obviously want to use it as users.
  One last very important thing about DRI. Stock linux kernels come only prepared
  for XFree86-4.1, so we must copy our new kernel module (the DRM) to allow
  dynamic loading. If you built DRM, all the modules will be in
  	ls programs/Xserver/hw/xfree86/os-support/linux/drm/kernel
  For example, for a radeon card the relevant file is "radeon.o", this you must
  copy to your kernel modules directory under kernel/drivers/char/drm/
  Substitute your requirements for CARD and KERNELVERSION in this command:
  	cp programs/Xserver/hw/xfree86/os-support/linux/drm/kernel/CARD.o \
  	depmod -a
  If you run 'startx', a quick 'glxinfo' on the command line will show if DRI
  is working or not, you can see the acceleration in action by typing 'glxgears'
  DRI-CVS (optional, unstable, and not recommended)
  This must be downloaded by anonymous CVS.
  	mkdir DRI-CVS
  	cd DRI-CVS
  	export CVSROOT=:pserver:anonymous at
  	cvs login
  (hit ENTER when prompted for a password)
  	cvs -z3 co xc
  I recommend you make a local tarball of this directory, making use of
  cvs to update it in the future with
  	cd DRI-CVS
  	export CVSROOT=:pserver:anonymous at
  	cvs -z3 update -dA xc
  The DRI sources are a cut-down version of the latest XFree86, and we build it
  in a parallel linked directory, which we make by typing (from the DRI-CVS
  	ln -s xc XFree
  	mkdir build
  	cd build
  	lndir -silent -ignorelinks ../XFree
  	cd xc
  Observing the original notes about config/cf/host.def, we also build DRI
  with less harsh optimisations and enable debugging symbols.
  cat > config/cf/host.def << "EOF"
  #define DefaultGcc2i386Opt           -g -O2
  #define GccWarningOptions            -w -pipe
  #define BuildServersOnly             YES
  #define HasZlib                      YES
  #define HasMTRRSupport               NO
  #define HasMMXSupport                NO         /* Any i586 or above    */
  #define HasKatmaiSupport             NO         /* PIII SSE instuctions */
  #define Has3DNowSupport              NO         /* AMD instructions     */
  #define XInputDrivers                mouse void
  #define XF86CardDrivers        /* build all drivers available */
                                 mga glint nv tga s3 s3virge sis rendition
                                 neomagic i740 tdfx savage cirrus vmware
                                 tseng trident chips apm GlideDriver fbdev
                                 i128 ati AgpGartDrivers DevelDrivers ark
                                 cyrix siliconmotion vesa vga
                                 XF86OSCardDrivers XF86ExtraCardDrivers
  #define BuildXF86DRI                 YES
  #define BuildXF86DRM                 YES
  #define DriDrivers             gamma tdfx mga i810 i830 r128 radeon sis
  /* the following are to enable the dri tree to have its dependencies built */
  #define BuildLibrariesForXServers    NO
  #define BuildLibrariesForConfigTools NO
  #define BuildXIE                     NO
  #define BuildPexExt                  NO
  #define XprtServer                   NO
  	make World >dricompile.stdout 2>dricompile.stderr
  	make install
  copy over the kernel module and thats it!
  You may check which files have been updated by typing
  	find /usr/X11R6 -cnewer config/cf/host.def
  Voodoo Cards
  If you have a voodoo card, then tough luck as I am afraid support has been
  dropped. I found this out the hard way!
  NVIDIA ACCELERATED GRAPHICS (recomended for NVidia cards)
  NVidia has never released open sourced code for their 'unified' driver. If you
  have such a graphics card, i pitty you for having to put in proprietory code
  after you have spent so long building your own LFS. Go to
  and foillow the driver links to get the latest linux driver. You should get
  both the NVIDIA_kernel and NVIDIA_GLX tarballs.
  Unpack the NVIDIA-kernel file and enter the created directory.
  This will produce a module called NVdriver. Copy it to the appropriate kernel 
  modules directory, replace KERNELVERSION with your appropriate value
  	cp NVdriver /lib/modules/KERNELVERSION/drivers/char/agp/
  Add the device in /etc/modules.conf and refresh the modules dependencies.
  	echo alias char-major-195 NVdriver >> /etc/modules.conf
  	depmod -a
  Unpack the NVIDIA-GLX tarball and enter the created directory.
  This will install the Nvidia drivers in the correct locations.
  You will now edit the /etc/X11/XF86Config-4 file to use the new drivers. Ensure
  the following are present:
  	Section "Module"
  		Load  	"dri"		# Remove/comment this line
  		Load	"glx"		# Add this line if not present
  	Section	"Device"
  		Driver	"nv"		# Remove/comment this line
  		Driver	"nvidia"	# Add this line
  If you 'startx' and X locks at startup you'll need to edit os-registry.c and 
  heck the comments near lines that start something like '#if 0'.
  If 3D acceleration just is not working, you probably have some mesa libs lying
  around in /usr/lib. Remove the following files /usr/lib/libMesa*
  /usr/X11R6/lib/libMesa* and reinstall the GLX module. If you have 3D apps that
  require Mesa libs, you can simply create symlinks to GLX lib ( You
  also need to remove /usr/X11R6/lib/ and symlink it to
Unsubscribe: send email to listar at
and put 'unsubscribe hints' in the subject header of the message

More information about the hints mailing list