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). Heavy weight wm's, like Enlightenment, may produce a noticeable slow down. Even light weight wm's, like twm, rob your CPU of clock cycles (and in twm's case, even full screen games will have a frame around the window). To run a game without a wm, modify .xinitrc, which tells X what to run upon starting, in your home directory. 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. Note that this is for people who use `startx' to start X.

I never use things like gdm or run-level 5 (so I'm not positive here), but I suspect that if you do, you'll need to do things a bit differently. My best guess is to go to single user mode (run-level 1) by:

       # telinit 1
			

then edit .xinitrc, then go back to run-level 5 by

       # telinit 5
			

Then when you stop playing, go to run-level 1, modify .xinitrc then go back to run-level 5. I don't use this stuff, so I'm not sure, but you may need to kill gdm. I'd appreciate some feedback on this.