4. XFree86 and You

If you're going to game under X, it's crucial that you know a bit about X. The "X Window User HOWTO", and especially "man XF86Config" are required reading. Don't short change yourself; read them. They have an extremely high "information to space" ratio. Many problems can be fixed easily if you know your way around XF86Config (or XF86Config-4).

4.1. Getting information about your X system

Whether you're trying to diagnose an X problem or requesting help from a mailing list or Usenet newsgroup, you'll want to have as much information available as possible. These are a set of tools you can use to obtain that information.

4.1.1. Probeonly

One of the best diagnostic tools and sources of information about your X system is probeonly output. To use it, kill X if it's already running and from a console, type:

    X -probeonly 2> X.out

Yes, that's a single dash; so much for standards. The output of X goes to stderr, so we have to redirect stderr with "2>" to a file named X.out. This file will have almost everything there is to know about your X system. It's crucial that you know the difference between the various markers you'll see in probeonly output:

    (--) probed              (**) from config file    (==) default setting
    (++) from command line   (!!) notice              (II) informational
    (WW) warning             (EE) error               (??) unknown.

Here's an example of some information I gleaned from my output:

I'm running at 16 bpp color:

    (**) TDFX(0): Depth 16, (--) framebuffer bpp 16

X has detected what my videocard chipset and videoram are:

    (--) Chipset 3dfx Voodoo5 found
    (--) TDFX(0): VideoRAM: 32768 kByte Mapping 65536 kByte

4.1.2. Getting info about your setup: xvidtune

xvidtune is your friend when your X screen is shifted a little bit too far to the right, or if the vertical length is too small to fit on your monitor. However, it's a great diagnostic tool also. It'll give you:

  • the hsync/vsync range specified in your XF86Config file

  • the 4 horizontal and 4 vertical numbers which defines your videomode (the 1st horizontal/vertical numbers gives the screen resolution). These 8 numbers will tell you which modeline your X uses. See the XFree86 Video Timings Howto for more information. Note that explicit modelines are no longer necessary, since XFree 4.0.1 and up computes modetimings automatically based on your monitor's and video card's capabilities. However, there may be times when you'll want to play around with mode timings, like for weird hardware or if want to tweak your display.

  • the "dot clock" your videocard is running at.

4.1.3. Getting info about your setup: xwininfo

xwininfo tells you all sorts of information about X windows. And actually, your "background" or "root" window is considered a window too. So when xwininfo asks you to click on the window you want the information on, click on your background. It'll tell you things like screen and window resolution, color depth, window gravity state (which gives a hint to the window manager about where to place new windows), backing store usage and more.

4.1.4. Other sources of information

xdpyinfo gives cool stuff, like X version and loaded extensions (invaluable when trying to see what's missing, like GLX, DRI, XFree86-VidMode, etc.).

4.1.5. Getting information about your 3D system

glxinfo gives lots of useful information about OpenGL like whether direct rendering enabled, the currently installed versions of glx and mesa, vendor/renderer strings, the GL library files being used and more.

4.2. Playing Games In X Without a Window Manager

When playing a game under X, you should consider starting X without a window manager (WM). Heavyweight WMs, like Enlightenment, or full-blown desktop environments like GNOME or KDE, may produce a noticeable slow down. Even lightweight WMs, like twm, rob your CPU of clock cycles (and in twm's case, even full screen games will have a frame around the window). Running a game without a WM or DE depends on how you access X. If you usually log in to a Virtual Console and start X with "startx" try the following:

Modify ~/.xinitrc, which tells X what to run upon starting. Here is what my .xinitrc looks like:

      #quake3 +set r_gldriver libGR.so.1
      #exec ut
      #lsdldoom -server 2
      #exec tribes2
      exec /usr/bin/enlightenment

You'll usually see a window or desktop manager being executed from this file (GNOME or KDE). Comment out the lines containing the WM or desktop manager with a pound sign (#) and place your game on a new line with any command line arguments you want to pass. If the game is not located in your $PATH, give its full path name.

If you log directly into X using gdm, then things are a little different. These instructions are for gdm 2.4 or greater. They *may* work with kde, but I cannot say for certain.

First, check your gdm.conf (usually in /etc/X11/gdm or /etc/gdm) file for a line that says begins "SessionDesktopDir=blah". One of the directories listed as options should be "/usr/share/xsessions", and is the directory which will be used in this example. As root, change to the "/usr/share/xsessions" directory and take a look at its contents. It should contain some .desktop files, each corresponding to an entry you'll see in gdm's Session menu, e.g gnome.desktop, enlightenment.destop. This example will show you how to log in to Doom3. Copy any of the desktop files to "doom3.desktop" and open the new file in your favourite text editor. The file will be full of alternative languages, so cut out everything you don't want and make the file look like this:

      [Desktop Entry]
      Name=DOOM III
      Comment=iD's Doom III
      #if game is not in path, remember to put the full path here
      # no icon yet, only the top three are currently used

Save the file and log out of your window manager. At the gdm login screen, you should now see "DOOM III" as an option in "Sessions". Naturally you can add a .desktop file for each game you have installed