TITLE: Setting up XFree86 4.0+ DRI. LFS VERSION: Any AUTHOR: Marc Heerdink SYNOPSIS: This hint explains how 3D rendering in X can be enabled. HINT: version 3.0 01/23/2002 ================= TABLE OF CONTENTS ================= 1 Introduction 2 Required Files 3 3Dfx Cards 3.1 3Dfx Specific Files 3.2 Link-Only X Installation 3.3 Installing Glide 3 3.4 3Dfx Troubleshooting 4 Matrox Cards 4.1 Matrox Specific Files 4.2 Preparing X 5 The Final X Installation 5.1 Zlib Installation 5.2 X Installation 6 The Glut Library 7 Configuration 7.1 Kernel Configuration 7.1.1 DRI 7.1.2 AGP 7.1.3 MTRR 7.1.4 Check If It Works 7.2 XFree Configuration 8 Testing 9 Generic Troubleshooting 10 What next? 10.1 Image Libraries 10.1.1 Needed Files 10.1.2 Libpng 10.1.3 Jpeg 10.1.4 Libungif 10.1.5 Tiff 10.1.6 Lcms 10.1.7 Libmng 10.2 Freetype 10.2.1 Needed files 10.2.2 Freetype 1 10.2.3 Freetype 2 10.2.4 Ttmkfdir 10.3 Choosing A Window Manager 10.4 Get Some Applications 10.5 Where To Go Next? 11 Outroduction =============== 1. INTRODUCTION =============== Since XFree86 4.0, DRI is included with the normal XFree86 releases. It provides a way to access the 3D graphics cards found in many modern Personal Computers, such as the Matrox G-series, ATI Radeon/Rage cards and the 3Dfx Voodoo-series cards. Installing DRI can be quite a pain (especially obtaining and building the required helper liraries), so I decided to write a hint on it. This document is, AFAIK, the only in-depth manual on how to set up DRI rendering with XFree86 4.0 and up. Unfortunately, Direct Rendering isn't available for all 3D video cards out there. Generally, any recent 3Dfx, Matrox, ATI or Intel on-board video card is more or less supported. An up-to-date list can always be found on http://www.xfree86.org/. Every card has a slightly different installation procedure, but the 3Dfx procedure is by far the most complicated. This hint contains detailed instructions on how to set up DRI for 3Dfx cards using CVS software. I can't guarantee that everything will work smoothely if you follow these instructions, because I don't own a 3Dfx card anymore. If you have additions, comments, success reports or any other information that you feel would make a good addition to this hint, please mail me at . The only card this hint is currently tested on, is a Matrox G400 Singe Head with 32 MB onboard memory. It should work on other cards that do not require special steps (such as ATI cards), but if you had any complications with these cards, please mail me the steps to overcome the trouble so I can include them in this hint. ================= 2. REQUIRED FILES ================= Sources for X: ftp://ftp.xfree86.org/pub/XFree86/4.2.0/source/X420src-1.tgz ftp://ftp.xfree86.org/pub/XFree86/4.2.0/source/X420src-2.tgz ftp://ftp.xfree86.org/pub/XFree86/4.2.0/source/X420src-3.tgz Sources for Zlib: ftp://ftp.info-zip.org/pub/infozip/zlib/zlib-1.1.3.tar.gz DRI host.def: http://www.linuxfromscratch.org/~gimli/host.def Sources for Mesa3D: http://prdownloads.sourceforge.net/mesa3d/MesaDemos-4.0.1.tar.bz2 http://prdownloads.sourceforge.net/mesa3d/MesaLib-4.0.1.tar.bz2 ============= 3. 3DFX CARDS ============= It took me a week to figure out how to enable DRI on 3Dfx cards, because it isn't the most easy procedure one can think of. We'll build X twice for the 3Dfx cards, so it's a good idea to use a fast machine to do the compiling. ======================= 3.1 3DFX SPECIFIC FILES ======================= You can either get my glide3x source tarball, or the latest sources from CVS. To get them from CVS, you'll have to install the cvs program available from http://www.cvshome.org/. Installing it is beyond the scope of this document. The tarball containing today's (01-23-2002) CVS sources (2.8 MB) is available from: http://www.linuxfromscratch.org/~gimli/glide3x-cvs-20020123.tar.bz2 If you want the CVS sources and if you have CVS installed, run the following commands to get the required files and to set up the directory for building Glide: cvs -d:pserver:anonymous@cvs.glide.sourceforge.net:/cvsroot/glide login && cvs -d:pserver:anonymous@cvs.glide.sourceforge.net:/cvsroot/glide -z3 co glide3x && cvs -d:pserver:anonymous@cvs.glide.sourceforge.net:/cvsroot/glide -z3 co swlibs && cvs -d:pserver:anonymous@cvs.glide.sourceforge.net:/cvsroot/glide logout && mv swlibs/ glide3x/ ============================ 3.2 LINK-ONLY X INSTALLATION ============================ We'll have to build a minimal X installation to link Glide against. Glide is needed for a properly working DRI driver for 3Dfx cards. Since it should be a very minimal installation, you just need the sources in the first tarball for X. Extract the sources with this command (while you're in the /usr/src directory): tar xzvf /path/to/X420src-1.tgz To build X, we'll need a special host.def. I suggest you copy paste this file because it's pretty long. Put this in /usr/src/xc/config/cf/host.def (NOTE: The "#"s at the beginning of lines are _not_ comments): (TODO: Does this still work with 4.2.0?) ------------------------------------------------- #define DefaultCCOptions -w #define TermcapLibrary -lncurses #define XF86CardDrivers vga #define XInputDrivers void #define BuildServersOnly YES #define XVirtualFrameBufferServer NO #define BuildFontServer NO #define BuildFonts NO #define BuildMITMiscExt NO #define BuildTestExt NO #define BuildSyncExt NO #define BuildXF86MiscExt NO #define BuildXF86RushExt NO #define BuildBigReqsExt NO #define BuildEVI NO #define BuildDBE NO #define BuildDBElib NO #define BuildDPMS NO #define BuildFontCache NO #define BuildXIE NO #define BuildXIElib NO #define BuildXKB NO #define BuildRECORD NO #define BuildRECORDlib NO #define BuildXCSecurity NO #define BuildAppgroup NO #define BuildCup NO #define BuildDPSLibraries NO #define BuildRenderLibrary NO #define BuildXF86DRI NO #define BuildPexExt NO #define BuildGlxExt NO #define BuildXinerama NO #define BuildRender NO #define BuildScreenSaverLibrary NO #define BuildXvLibrary NO #define BuildGLXLibrary NO #define BuildXF86VidModeExt NO #define BuildXF86MiscLibrary NO #define BuildXF86BigfontExt NO #define BuildFreeType NO #define BuildXTrueType NO #define BuildCID NO #define BuildType1 NO #define BuildSpeedo NO #define LinuxFBDevSupport NO #define UseX86Emu NO #define XF1Bpp NO #define XF4Bpp NO #define XF8_32Bpp NO #define XF8_16Bpp NO #define XF24_32Bpp NO #define XFShadowFB NO #define XF86VgaHw NO #define XF86FBDevHw NO #define XF86XAA NO #define XF86Ramdac NO #define XF86I2C NO #define XF86DCC NO #define XF86RAC NO #define XF86Int10 NO #define XF86AFB NO ------------------------------------------------- Now that we have the host.def, it's time to build X. Enter the following commands to build X: cd /usr/src/xc && make World The build will take about 10 minutes on a fast system. Note that the build isn't functional since some essential stuff was removed from it. It serves our purposes though. Enter the following commands to prepare the environment for compiling Glide: cd /usr && ln -s src/xc/exports X11R6 && cd include && ln -s ../X11R6/include/X11 && echo "/usr/X11R6/lib" >>/etc/ld.so.conf && ldconfig NOTE: Don't remove /usr/src/xc yet! We'll do that later. ====================== 3.3 INSTALLING GLIDE 3 ====================== There is a bug in Glide 3 which forces you to use automake < 1.5. If you're using a newer version, like 1.5 which is currently used in the book, you should install automake 1.4-p5 next to it. First, get the older automake from ftp://ftp.gnu.org/gnu/automake/automake-1.4-p5.tar.gz Extract the tarball, and run these commands to install automake in a temporary location: ./configure --prefix=$HOME/automake-temp && make INSTALL="install -c -D" install && cp /usr/share/aclocal/libtool.m4 ~/automake-temp/share/aclocal Copy the glide3x directory that was created during the CVS checkout over to /usr/src, and put the swlibs directory (from the checkout) in the glide3x directory. Enter the /usr/src/glide3x directory and enter the following commands to generate a configure script: ~/automake-temp/bin/aclocal && ~/automake-temp/bin/automake && autoconf Now we can configure glide. Replace with "h3" for a Voodoo Banshee or Voodoo 3, or with "h5" for the Voodoo 4/5 series. Run these commands: ./configure --prefix=/usr --enable-fx-glide-hw= \ --enable-fx-build-dri --enable-shared --enable-static && ./ltconfig ltmain.sh The final step is to compile glide. Replace with your machine type. To find out what machine you are using, run "uname -m". Run these commands to compile and install glide: make GLIDE_DEBUG_GCFLAGS="-O3 -march=" -f makefile.autoconf all && make GLIDE_DEBUG_GCFLAGS="-O3 -march=" -f makefile.autoconf install Now we have glide compiled and installed, we can trash the symlinks created in chapter 3.2 and the temporary automake installation: rm -f /usr/X11R6 && rm -f /usr/include/X11 && rm -rf ~/automake-temp Make sure you remove the /usr/src/xc and /usr/src/glide3x directories as well, we won't need them any more. ======================== 3.4 3DFX TROUBLESHOOTING ======================== * Q1: I get this message when I build Glide: ------------------------------------------------------------------ linhwc.c:64: X11/Xlib.h: No such file or directory linhwc.c:65: X11/extensions/xf86dga.h: No such file or directory linhwc.c:66: X11/extensions/xf86vmode.h: No such file or directory ------------------------------------------------------------------ * A1: Either you forgot to create the symlink from /usr/include/X11 to /usr/X11R6/include/X11 in chapter 3.2, or you removed the /usr/src/xc directory before you started building glide. In the first case, scroll back to chapter 3.2 and create the link, in the second case you'll have to build the link-only X installation again :(. * Q2: Building Glide fails with the --enable-amd3d flag! * A2: Yes it does. Remove it to build Glide without problems. This problem is due to a missing .S file, because 3Dnow! support for Glide hasn't been ported to Linux (yet?). =============== 4. MATROX CARDS =============== A friend of mine had a G400 long before I had one. I had some experience installing DRI for that card before I got mine, so it took me only 60 minutes (the X build) to set it up. The Matrox DRI drivers are listed on dri.sourceforge.net as development/unstable. Don't let this mislead you, because I found them pretty fast (80 fps in Q3A) and pretty stable as well (crashed only afted 8 hours of spinning the XMMS OpenGL Plugin). We'll use the Matrox HAL library in our X build. This library is not opensource, but it's a library that enables some features that are not supported by default with the stock X drivers, such as multi head and flat panel output. This library is not required for 3D rendering. ========================= 4.1 MATROX SPECIFIC FILES ========================= Matrox HAL Library: ftp://ftp.matrox.com/pub/mga/archive/linux/2001/beta_133_143/mga-133_143-source.tgz =============== 4.2 PREPARING X =============== Start by extracting all three source tarballs for X into /usr/src. We'll have to modify the source tree somewhat to enable the HAL library. Extract mga-133_143-source.tgz to /usr/src as well. Now run the following commands to install the HAL library (from the /usr/src directory): cp mgasource/mga-1.4.3/mga/HALlib/* \ xc/programs/Xserver/hw/xfree86/drivers/mga/HALlib =========================== 5. THE FINAL X INSTALLATION =========================== We've come to the point that we're ready to install X. If you didn't already do so, extract the X420src-1.tgz, X420src-2.tgz and X420src-3.tgz files into /usr/src. You should have a /usr/src/xc directory, with the HAL Library installed into it if you're using a Matrox card (see chapter 4). ===================== 5.1 ZLIB INSTALLATION ===================== Extract zlib-1.1.3 in /usr/src. Enter the newly created zlib-1.1.3 directory and run the following commands to install zlib: sed s/\\$\(OBJS\)$/\\$\(OBJS\)\ \\$\(OBJA\)/ Makefile.in >tmp~ mv tmp~ Makefile.in cp contrib/asmmatch.S . CFLAGS="-O3 -march= -DASMV" ./configure --prefix=/usr && make OBJA=match.o && make install && CFLAGS="-O3 -march= -DASMV" ./configure --prefix=/usr --shared && make OBJA=match.o && make install Notes: Replace with your architecture, such as 586 for an Intel Pentium 1 or 686 for a Pentium II/III or Athlon. Replace with your machine type. You can find out both these values by running "uname -m"; is the full output, is the output minus the first "i". ================== 5.2 X INSTALLATION ================== Copy the host.def you downloaded in chapter 2.1 to the X configuration directory (/usr/src/xc/config/cf/) and open it in a text editor. Read through the file and adjust the settings as necessary. If you want more control (the defines included in this host.def should normally suffice), use xf86site.def as a starting point. When you've finished editing host.def, you can start the build process for XFree86. Enter the /usr/src/xc directory, and run the following command to build X: make World |tee -i World.LOG By using tee, we can both save the output of the make command to a file (World.LOG) and print the output to the screen at the same time. This allows you to follow the build process, but if any errors occured you'll have them handy in a file. Building will take about 60 minutes on a fast machine, or 60 hours on a slow machine. I suggest you visit slashdot, get yourself a cup of tea or do something else interesting instead of following the build process closely. It's very annoying watching those lines scroll by and we're creating a log file anyway. When the build is finished, open World.LOG in a text pager and search for "***". If they're found, you had an error while building X and you'll probably want to solve that. If it's not found, add /usr/X11R6/lib to /etc/ld.so.conf (if not already present) and run these commands to install X: make install && make install.man && cd /usr && ln -s X11R6 X11 && cd /usr/include && ln -s ../X11R6/include/X11 && cd /var && ln -s ../usr/X11R6/lib/X11 && ldconfig Lucky you! You just built yourself a DRI X installation! Remove the sources for X if you like, because we won't need them any more. =================== 6. THE GLUT LIBRARY =================== Unfortunately not everything we need comes with X. About all programs that use OpenGL need the library as well, so we'll install it here. 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. Install the glut library from Mesa using these commands (as usual, replace with your architecture): CFLAGS="-O3 -march=" CXXFLAGS=$CFLAGS \ ./configure --prefix=/usr/X11R6 --enable-shared --enable-static && cd src-glut && make && make install && cd ../include/GL && install -m 444 -o root glut.h /usr/X11R6/include/GL 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: cd demos && for FILE in *.c; do echo $FILE DEMO="`echo $FILE |sed s/\.c$//`" gcc -w -I/usr/X11R6/include -I../util -L/usr/X11R6/lib -lGL -lGLU \ -lOSMesa -lglut -o ${DEMO} ${FILE} done You'll see that building one of the demos fails, the others work though. Now you've got a bunch of accellerated demos. ================ 7. CONFIGURATION ================ Cool. DRI and the helper libraries are installed. Now what do we have to do to make everything working? This chapter explains how you should configure essential software for DRI. ======================== 7.1 KERNEL CONFIGURATION ======================== The kernel provides some options that affect the behaviour of DRI. I'll explain the purpose of each of them here. These explanations are based on the 2.4 kernel series, that should be used for DRI. ========= 7.1.1 DRI ========= The first and most important is kernel support for DRI and the 3Dfx cards. The options for this can be found in the section "Character Devices" of the kernel configuration (make menuconfig). At the bottom, there's an option: [ ] Direct Rendering Manager (XFree86 4.1.0 and higher DRI support) (Taken from the kernel 2.4.17 menuconfig) This option has to be enabled for DRI to work. Press space if you don't have a "*" between the square brackets. If this option is enabled, you'll get a submenu: < > 3dfx Banshee/Voodoo3+ < > 3dlabs GMX 2000 < > ATI Rage 128 < > ATI Radeon < > Intel I810 < > Matrox g200/g400 < > SiS (Taken from the kernel 2.4.17 menuconfig) Select "3dfx Banshee/Voodoo3+" for a 3Dfx card, and "Matrox g200/g400" for a Matrox card. You can compile the driver either as a module ("M") or directly into the kernel ("*"); the X server will load the module as needed. ========= 7.1.2 AGP ========= The kernel also provides support for the AGP buses found on many recent motherboards. The reason this was implemented relatively late, is that the AGP bus is actually a slightly improved PCI bus (that's why AGP cards have a PCI device ID). The interface to the AGP bus is called "agpgart". The implementation depends on the motherboard chipset you are using. The options for agpgart can be found in the "Character Devices" section of the kernel configuration. Almost at the bottom, you see this: < > /dev/agpgart (AGP Support) (Taken from the kernel 2.4.17 menuconfig) There should be a "*" between the <> signs, so press space until it's there. A submenu will show up: [ ] Intel 440LX/BX/GX and I815/I830M/I840/I850 support [ ] Intel I810/I815/I830M (on-board) support [ ] VIA chipset support [ ] AMD Irongate, 761, and 762 support [ ] Generic SiS support [ ] ALI chipset support [ ] Serverworks LE/HE support (Taken from the kernel 2.4.17 menuconfig) Select your chipset from the list, and press "space" so that a "*" appears in the square brackets. If you don't know what chipset you're using, enable all of these chipsets, the correct one will be recognized at boot time. ** If you're using a PCI type card, you won't (of course) have to do this! ** ========== 7.1.3 MTRR ========== MTRR stands for "Memory Type Range Register". This is a register in the processor to control processor access to memory ranges, thus it improves performance of PCI and AGP cards dramatically. If MTRRs are enabled, X will detect them automatically and use them. Intel processors have MTRRs if they are Pentium Pro or newer. AMD processors have MTRR support from the K6-2. If you don't know what processor you're using, or if it's neither an Intel nor an AMD processor, you can safely enable MTRR support, because it won't be used if it's not supported by your processor. You can find the MTRR option in the "Processor type and features" section of the kernel configuration. The option to enable it looks like this: [ ] MTRR (Memory Type Range Register) support (Taken from the kernel 2.4.17 menuconfig) ======================= 7.1.4 CHECK IF IT WORKS ======================= If you have modified your kernel configuration at the points I told you about, it's time to compile and install the new kernel. When the system has booted with the new kernel, we can test if everything works. Let's start by running: dmesg |less This will open the kernel boot messages in the text pager less. For each of the modifications that I discussed, search for a specific string in the dmesg output. I'll give some examples: * MTRR Support can be found by searching for "mtrr". My system tells me: mtrr: v1.40 (20010327) Richard Gooch (rgooch@atnf.csiro.au) mtrr: detected mtrr type: Intel * AGP Support can be found by searching for "agpgart". This is what I get: Linux agpgart interface v0.99 (c) Jeff Hartmann agpgart: Maximum main memory to use for agp memory: 321M agpgart: Detected Via Apollo Pro KT133 chipset agpgart: AGP aperture is 64M @ 0xd0000000 * DRI Support can only be found if the module for your card is directly compiled into the kernel (or if the X server has been started with DRI enabled). Search for "drm" to get something like: [drm] AGP 0.99 on VIA Apollo KT133 @ 0xd0000000 64MB [drm] Initialized mga 3.0.2 20000928 on minor 63 for Matrox cards or [drm] AGP 0.99 on VIA Apollo KT133 @ 0xd6000000 16MB [drm] Initialized tdfx 1.0.0 20000928 on minor 63 for 3Dfx cards. If all of these match, the kernel part is OK. ======================= 7.2 XFREE CONFIGURATION ======================= The next step to get DRI to work, is configuring XFree. This can be done in a very fast and easy way. Run (as root): XFree86 -configure This will detect the video card you're using, the mouse type (if you have a /dev/mouse device or symlink), the keyboard and even the monitor if your monitor supports that. The configuration file it generates is pretty usable (although some people want you to believe it's horrible), but it needs some adjustments. The configuration file is temporary saved in /root/XF86Config.new. Open this file in a text editor, and make the following changes: * In Section "Files": The default X installation has more FontPaths than there are in this file. Add every directory in /usr/X11R6/lib/X11/fonts to the FontPaths listed here. * In Section "Module": Add 'Load "type1"' and 'Load "freetype"' to enable support for Type 1 and TrueType fonts. Make sure the "GLcore", "dbe", "glx" and "dri" drivers are loaded! * Configure the sections "InputDevice" to fit your preferences. * In Section "Monitor": If these values weren't autodetected, you'll have to add both "HorizSync" and "VertRefresh" manually. Consult your monitor handbook for these values. Be careful, you might destroy your Monitor when these settings are wrong. * In Section "DRI": Add "Mode 0666" to this section to enable Direct Rendering for everybody, so it can be used by other users than only root. * In Section "Screen": Add a definition for "DefaultDepth" to the main section (eg. between the "Monitor" definition and the first subsection). !This should be 16 for DRI to work! It looks like this: DefaultDepth 16 Add in each of the subsections "Display" some screen resolutions: Modes "1600x1200" "1280x1024" "1280x960" "1024x768" "800x600" "640x480" The first resolution in the "Modes" definition in the subsection for the default color depth is the resolution that's going to be the default. If you have made these changes, it's safe to test your configuration. By default, a log file will be created under /var/log (usually XFree86.0.log). Open this file and browse to the end of it. There should be these lines near the end: (II) TDFX(0): [DRI] installation complete (==) TDFX(0): Direct rendering enabled or (II) MGA(0): [DRI] installation complete (==) MGA(0): Direct rendering enabled by now, you can probably guess which one is for which card. ========= 8 TESTING ========= If you have followed this entire hint, you probably want to see it working (why would you otherwise go through all this pain). I have made a small selection of programs that can be useful in testing the DRI subsystem. * glxinfo. This utility is part of a standard XFree installation. If you run it, you should get "direct rendering: Yes" as the second line of the output. * xdpyinfo. This program comes with the standard XFree installation. Check in the output for "GLX", "SGI-GLX" and "XFree86-DRI". If all three are preset, the extensions were loaded successfully. * The OpenGL Spectrum Analyzer that comes with XMMS (http://www.xmms.org/). This doesn't work in 3dfx fullscreen mode on the 3Dfx cards since Glide 2 isn't installed. You can have phun with it in a small window too, so who cares. * Tuxracer (http://tuxracer.sourceforge.net/). A must-have for every 1337 h4x0r and for everybody who likes a funny game. I love it! You'll need some additional libraries (SDL, SDL_mixer and tcl) to get this to work, but it's really worth it... :PP * Quake III Arena. It heavily uses the OpenGL subsystem, so this is both a very good test and a very good benchmark. If you have the windows version, get the linux version @ ftp://ftp.idsoftware.com/pub/idstuff/quake3/linux/ (~12 MB). Untar it into a directory (/usr/games/quake3, /opt/quake3 or whatever) and add the pak0.pak from the CD and the pak1.pak and pak2.pak from Quake III 1.17. Then run quake3.x86 and let the fragging begin :) * The OpenGL screensavers in the xscreensaver distribution (http://www.jwz.org/xscreensaver/). You'll need the GLE library (http://www.linas.org/gle/) for an optimal working xscreensaver. * The Mesa demo programs; for instructions see chapter 6. ========================== 9. GENERIC TROUBLESHOOTING ========================== * Q1: The XFree logfile tells me that DRI is disabled, but I've done everything right and I'm using 24 bit colors by default! * A1: You need 16 bit color for most cards for DRI to work. * Q2: Compiling X fails with a message about undefined/missing targets. What should I do?? * A2: This problem is caused by a broken imake. It will be recompiled next time you start the build. So the only thing you can do is restart the build and pray that imake will work this time... * Q4: I have another problem! * A4: Mail me I'll do my best to provide you with a solution. ============== 10. WHAT NEXT? ============== I have received some complaints from people who didn't know what to do next, after they have finished this hint. I'll try to give you some guidelines what you can do with your brand new X installation. This section is mainly intended for newbies, eg. it has nothing to do with the main subject of this hint: setting up DRI. If you don't feel like a newbie and you've set up a full X workstation before, don't even try to read this because it will probably be very boring for you. This part is mainly intended to fill the gap between this hint and other hints, that deal with specific applications and libraries. Those applications and libraries depend on some very common libraries, such as a font handling library and image libraries. These are the libraries you'll be installing in this chapter, because some of them are not really straightforward to install. Another problem many newbies are facing is that they don't know what window manager they should use. I'm not going into detail here (because if I did, this part would be much longer than the hint itself), but I'll try to give you some ideas. Last but not least, I'll try to give you some references to other hints which you will probably find useful. These references are stated between the lines, but I'm sure you'll notice them if you read carefully. Good luck, soldier! :) ==================== 10.1 IMAGE LIBRARIES ==================== Image libraries are, as the name suggests, libraries that have to do with reading from, writing to and manipulating images. Each format has it's own image library. The libraries we'll be installing are the ones for the most common image types and the ones that are usually found on all linux systems. If a library is not listed here, don't think your linux system will be unable to read them! Specific libraries are only needed for images that are a) complicated or b) that have Afganic licenses, so they can't be easily copy-pasted in any program. One useful addition to this list might be "libmng," a library for animated PNG images if you're planning to install KDE. =================== 10.1.1 NEEDED FILES =================== http://www.libpng.org/pub/png/src/libpng-1.2.1.tar.gz http://www.ijg.org/files/jpegsrc.v6b.tar.gz http://www.ibiblio.org/pub/Linux/libs/graphics/libungif-4.1.0.tar.gz ftp://ftp.remotesensing.org/pub/libtiff/tiff-v3.5.7.tar.gz http://www.littlecms.com/lcms-1.08.tar.gz http://www.libmng.com/download/libmng-1.0.3.tar.gz ============= 10.1.2 LIBPNG ============= Extract the libpng-1.2.1.tar.gz tarball into /usr/src. Now enter the following commands to install libpng: sed -e 's&ZLIBLIB=\.\./zlib&ZLIBLIB=/usr/lib&' \ -e 's&ZLIBINC=\.\./zlib&ZLIBLIB=/usr/include&' \ scripts/makefile.linux >Makefile && make && make install =========== 10.1.3 JPEG =========== Extract the jpegsrc.v6b.tar.gz tarball into /usr/src. Enter the newly created /usr/src/jpeg-6b directory. Enter the following commands to install jpeg: ./configure --enable-shared --enable-static && make && make install =============== 10.1.4 LIBUNGIF =============== Extract the libungif-4.1.0.tar.gz tarball into /usr/src. Enter the newly created /usr/src/libungif-4.1.0 directory. Enter the following commands to install libungif: ./configure && make && make install =========== 10.1.5 TIFF =========== Extract the tiff-v3.5.5.tar.gz tarball into /usr/src. Enter the newly created /usr/src/tiff-v3.5.5 directory. Open configure in a text editor and find these lines: DIRS_LIBINC= # dirs to search for ancillary includes DIR_JPEGLIB= # dir for IJG -ljpeg DIR_GZLIB= # dir for zlib -lgz Change them to: DIRS_LIBINC=/usr/local/include # dirs to search for ancillary includes DIR_JPEGLIB=/usr/local/lib # dir for IJG -ljpeg DIR_GZLIB=/usr/lib # dir for zlib -lgz Now find these: JPEG=no # configure JPEG support ZIP=no # configure ZIP/Deflate support And change to: JPEG=yes # configure JPEG support ZIP=yes # configure ZIP/Deflate support Finally, find this line in Makefile.in: @${ECHO} "= "man; cd man; ${MAKE} -${MAKEFLAGS} install and remove it. Now run these commands to install tiff: ./configure (press enter when promped "are these ok?") make && make install && install -m 0755 -o root libtiff/libtiff.so.3.5.7 /usr/local/lib/libtiff.so.3.5.7 As always, run "ldconfig" to initialize the new libraries (make sure /usr/local/lib is in /etc/ld.so.conf). =========== 10.1.6 LCMS =========== Extract the lcms-1.08.tar.gz tarball into /usr/src. Now enter the following commands to install lcms: make BASEDIR=/usr/local && make BASEDIR=/usr/local install && mkdir /usr/local/include/lcms && ln -s ../lcms.h /usr/local/include/lcms ============= 10.1.7 LIBMNG ============= Extract the libmng-1.0.3.tar.gz tarball into /usr/src. Now enter the following commands to install lcms: ./configure && make && make install && rm -r /usr/local/include/lcms ============= 10.2 FREETYPE ============= Freetype is the true-type font handling library. These true-type fonts are the fonts that are used on Windows systems. They provide excellent scalability with a decent quality. Freetype comes in two flavours, freetype 1 and freetype 2. These two versions are not compatible, freetype 2 is an entirely new project. To make sure every program can find the freetype version it requires, it's a good idea to install them both. =================== 10.2.1 NEEDED FILES =================== http://prdownloads.sourceforge.net/freetype/freetype-1.3.1.tar.gz http://prdownloads.sourceforge.net/freetype/freetype-2.0.6.tar.gz http://www.joerg-pommnitz.de/TrueType/ttmkfdir.tar.gz ================= 10.2.2 FREETYPE 1 ================= Extract the freetype-1.3.1.tar.gz tarball into /usr/src. Enter the newly created /usr/src/freetype-1.3.1 directory and enter the following commands to install freetype 1: ./configure --enable-static --enable-shared && make && make install ================= 10.2.3 FREETYPE 2 ================= Extract the freetype-2.0.6.tar.gz tarball into /usr/src. Enter the newly created /usr/src/freetype-2.0.6 directory and enter the following commands to install freetype 2: make setup && make && make install Don't forget to run ldconfig after you've installed a library! Make this a habit! =============== 10.2.4 TTMKFDIR =============== To be able to use TTF fonts with XFree86, you'll have to create fonts.scale files to be able to generate the fonts.dir files. A nice utility to create these fonts.scale files is ttmkfdir. Extract the tarball into /usr/src, and run the following commands to install ttmkfdir into /usr/X11R6/bin: mkdir ttmkfdir && tar xzvf /path/to/ttmkfdir.tar.gz && cd ttmkfdir && make clean && make FREETYPE_INCL="/usr/local/include/freetype" \ FREETYPE_LIB="-L/usr/local/lib -lttf" && install -m 0755 -o root ttmkfdir /usr/X11R6/bin When you've added TTF files to the TTF folder, you can run the following commands to update the fonts.dir file: ttmkfdir >fonts.scale && mkfontdir ============================== 10.3 CHOOSING A WINDOW MANAGER ============================== In this chapter I'm going to help you choose a WM (Window Manager). A WM is, as the name suggests, a program that manages your windows. To be more specific, a WM takes care all window handling issues, such as creating a window on the screen, drawing the window on the screen, and destroying it. Many window managers have much additional functionality, such as the ability to launch your programs or set the background. Before you start thinking that everything is a wm, I'll give you some theory. In Linux, two sorts of "Window Managers" exist: the real WMs and the Desktop Environments (DEs from now on). These DEs do a lot more than just managing your windows. A little list: DE features: - taskbar ala Windows - integrated configuration program - desktop look'n'feel - own program collection A DE consists of many different programs and libraries, while a WM generally consists of only one or two programs that depend on other, common libraries. There are currently two big DEs that you should take a look at: Gnome and KDE. KDE provides a feeling just like Windows, has its own toolkit and a variety of programs, has its own office suite, has its own browser and is the stabler of the two. Gnome on the other hand, does not have its own window manager (this is a pro - freedom of choice), is more slick in presentation, is faster and is based on a more widely used toolkit. I personally prefer Gnome, because it's the least Windows-like of the two. As always, make your own choice. There are hints available for both DEs at the LFS hint section. So far the DEs. Now we get to the real stuff, the WMs. If you didn't run away searching for a DE hint, you're my friend. DEs are for lamers and weenies, real 1337 h4x0rs use real window managers ;-). There is a wide variety of window managers available (search freshmeat for an idea) so I'll discuss the most common window managers. A good WM for newbies to start with is IceWM. It's not hard to install, features a taskbar and fine themeability. It's pretty fast and easy to use. Use this one if you want to focus on learning linux, not on learning to use a WM. Another wide-spread WM is WindowMaker. This one is also a very popular newbie-WM, although many more experienced linux users seem to like it too. This WM doesn't work very straightforward but is not hard to learn. It features a program launch menu, multiple desktops and slick graphics. A similar graphics implementation is used by BlackBox. This WM is very well known for its speed. Additionally, it's often referred to as the second most beautiful so it may be the right WM for you. It's not the easiest WM though, because the WM is very limited; you'll have to edit menus with a text-editor for example. Some features: multiple desktops, themeability and speed. The last in row is the king of them all, IMO: Enlightenment. This WM is the most beautiful of all WMs in the world. The whole environment consists of pictures, the themes are built from pictures. Many great artists have put together astonishing themes for this WM. A list of features: launch menu, iconbox (minimized-apps-collector), desktop pagers, multiple desktops, virtual screens, own configuration dialogs, advanced session control and image backgrounds. Don't let this list of pros convince you easily, there are also many downsides to Enlightenment. To name a few: you need a _very_ fast pc to keep things going smoothly, hard to learn, application menus have to be manually edited and too many configuration options to learn them all. Many features can only be accessed through the keyboard. This one is both a beaty and a beast. ========================== 10.4 GET SOME APPLICATIONS ========================== This section is not written yet. ====================== 10.5 WHERE TO GO NEXT? ====================== This section is not written yet. ================ 11. OUTRODUCTION ================ Because this didn't really fit in the other chapters, I'll put it here. If you have a 3Dfx card, you can run: export FX_GLIDE_SWAPINTERVAL=0 to have the frame send rate of your videocard not in sync with the your monitors refresh rate. This may increase framerate, but decrease smoothness of gameplay. It's worth a try... Now it's time to play with your DRI X server ;) I won't put any more annoying stuff in here, but I want you to know that I'd like to get some feedback on this hint. It isn't easy to write it, because I don't know if what works here, works on other systems too. If you completed this hint successfully, I'd like you to drop me a line, and if you have encountered errors, please feel free to annoy me with them. The E-Mail address still is: - Have fun! Marc