From: geyer@polyhymnia.iwr.uni-heidelberg.de (Helmut Geyer)
Newsgroups: comp.os.linux.announce,comp.os.linux.help,comp.os.linux.admin,
comp.windows.x.i386unix
Subject: The Linux XFree86-HOWTO
Date: 31 Oct 1993 16:36:04 GMT
Approved: linux-announce@tc.cornell.edu (Matt Welsh)
Message-ID: <2b0phk$nsm@samba.oit.unc.edu>

Archive-name: linux/howto/xfree86
Last-modified: 31 October 1993

The Linux XFree86 HOWTO, version 1.0
-------------------------------------------------------------------------------
by Helmut Geyer (geyer@kalliope.iwr.uni-heidelberg.de)
with help from Dirk Hohndel (hondel@informatik.uni-wuerzburg.de)
           and David E. Wexelblat (dwex@aib.com)

This document describes how to obtain, install and configure XFree86-2.0
for Linux systems. XFree86 is an enchanced version of the X Window System, 
version 11 release 5, with support for many versions of UNIX running on Intel 
80386/486 platforms, including Linux. It support a great amount of video 
hardware for these systems and includes many bugfixes beyond the MIT standard 
release of X. 

This document is intended to help Linux users install and configure 
XFree86 v2.0, which was released on 31 October 1993. It is furthermore 
intended to answer some basic questions about X and programs using X.

Please read this file and the referenced documentation files BEFORE installing
and starting XFree86. IF YOU ARE NOT CAREFUL, YOU MIGHT DAMAGE YOUR HARDWARE.

This file comes WITHOUT ANY WARRANTY OF FITNESS. If you damage anything
following these informations, you are on your own. For a complete 
description of the features and the installation please look at the 
documentation files and manuals that come with XFree86 (residing in
/usr/X386/lib/X11/etc and its subdirs as well as in /usr/X386/man). 
The most important files will be pointed out to you in this HOWTO. Note that 
this HOWTO gives not complete information on setting up XFree86, but that you 
have to get the documentation files for XFree86 (from the file 
xf86-doc-2.0.tar.gz). 

Other man pages from the stock X11R5 distribution can be found in 
xf86-man-2.0.tar.gz. These manfiles come as sources for the nroff program. 
To read them you will need a working man program as well as the groff package 
for formatting them. Note that it is often required to read manpages, so you 
should install the groff package anyway. (I think it is no good idea that 
in many distributions this package is considered optional). 

New versions of this document will be posted to comp.os.linux.announce, as
well as archived on sunsite.unc.edu:/pub/Linux/HOWTO.

Contents:

   0. Introduction - What are X11R5 and XFree86?
   1. Supported Hardware
   2. Where do I get XFree86 and what do I need to run it? 
   3. Configuring XFree86
   4. tinyX - a package for systems with low memory
   5. X related packages
   6. Compiling programs that use X
   7. Programming in X
   8. Finding Information on X on the net
Appendix: Some Questions & Answers

0. Introduction - What are X11R5 and XFree86?

    X11R5 is a windowing system for UN*X like operating systems.
    The X Windowing System is issued by the MIT Consortium (look at the
    X(1) manpage for more information) and is put under a very liberal
    copyright, that  allows any use of source code provided that the original 
    copyright notices are included.
    As X is THE standard windowing system for UN*X operating systems,
    there are a lot of applications using it (both free and commercial).

    XFree86 is a port of X11R5 that supports several versions of Intel-based
    Unix and Unix-like operating systems.  The XFree86 servers are partly 
    derived from X386 1.2, which was the X server distributed with X11R5, 
    but many of them are newly developed. The accelerated servers that are 
    the most important change since XFree86-1.3 are completely new. This 
    release consists of many new features and performance improvements as 
    well as many bug fixes.  The release is available as source patches 
    against the MIT X11R5 code, as well as binary distributions for many 
    architectures.

    Note that while the source and installation trees retain the name 'X386'
    name (for simplicity of maintenance of the source tree), there is no
    connection between XFree86 and the commercial X386 product sold by SGCS.
    The XFree86 Core Team maintains technical contacts with SGCS in an effort
    to keep user-affecting changes to the workings of the products from
    diverging too radically.  There is no direct involvement of either group
    in the workings of the other.

    You will find more information on the XFree86-2.0 release and the 
    XFree86 project in the file README from the documentation tarfile. 

1. Supported Hardware

    As this is the most often asked question, this will be the first section.
    Currently XFree86 (Version 2.0) supports the following chipsets in the 
    XF86_SVGA server (note that it depends on the chipset, whether a card 
    is working and not on the vendor with Diamond notably excluded, cf 
    the remark at the end of this paragraph):

    nonaccelerated chipsets:
        Tseng ET3000, ET4000AX, ET4000/W32
        Western Digital/Paradise PVGA1
        Western Digital WD90C00, WD90C10, WD90C11, WD90C30
        Genoa GVGA
        Trident TVGA8800CS, TVGA8900B, TVGA8900C, TVGA8900CL, TVGA9000
        ATI 28800-4, 28800-5, 28800-a
        NCR 77C22, 77C22E
        Cirrus Logic GLGD5420, CLGD5422, CLGD5424, CLGD6205, CLGD6215, 
                     CLGD6225, CLGD6235
        Compaq AVGA
        OAK OTI067, OTI077
    accelerated chipsets:
        Cirrus CLGD5426, CLGD5428
        Western Digital WD90C31
    
    These chipsets are all supported in 256 color (XF86_SVGA) and in monochrome
    mode (XF86_Mono) with the exception of the ATI and Cirrus chipsets, which 
    are only supported in 256 color mode. Note that the ET4000/W32 is only 
    supported as a ET4000 clone and none of the accelerated functions are used.
    
    The monochrome server also supports generic VGA cards (using 64k of the 
    video memory as a single bank), the Hercules card and the Hyundai HGC-1280.

	There is an (experimental) additional server that works on generic VGA
	hardware: XF86_VGA16, a 16 color server.

    XFree86-2.0 supports the following accelerated chipsets with seperate 
    servers:
        S3  86C911, 86C924, 86C801, 86C805, 86C928 supported by 
            the XF86_S3 server
        ATI mach8   supported by the XF86_Mach8 server
        ATI mach32  supported by the XF86_Mach32 server
        IBM 8514/a and true clones supported by the XF86_8514 server

     No other chipsets are supported; not Weitek P9000, not TIGA, not
     IIT AGX, not Microfield, etc.  Support for some of these will likely
     be provided in future XFree86 releases.  TIGA will never be supported,
     as it requires licensing materials from TI (and may disallow source
     distributions); Microfield boards will never be supported, as they
     use proprietary and undocumented custom microcode interfaces.


    NOTE further: The following is a statement of the XFree86 Core Team 
         concerning graphic cards by Diamond:
         
            All Diamond cards are NOT supported by XFree86 even if they 
    	have a supported chipset (with the exception of the Cirrus chipsets
    	that have an internal clock generator). The reason for this
    	is that Diamond has changed the mechanism used to select pixel clock
    	frequencies, and will only release programming information under
    	non-disclosure.  We are not willing to do this (as it would mean
    	that source cannot be provided).  We have had discussions with
    	Diamond over this, and they do not intend to change this policy.
    	Hence we will do nothing to support Diamond products going forward
    	(i.e. don't send us a program to run set their clocks).  XFree86 
        DOES NOT SUPPORT DIAMOND HARDWARE.  It is possible to make some
        of it work, but we will not assist in doing this.

    The author of this HOWTO does support this statement completely. If you 
    have read this and bought nevertheless a card from Diamond, you will 
    damage the idea of free software as Diamond does not support the efforts 
    of a free X11 server. 

    However, if you are stuck with a card from Diamond, there is a compilation 
    of the needed things to get XFree86 running on some of these cards. It is 
    called the Diamond-FAQ and can be obtained from tsx-11 or sunsite in the 
    docs directories.

    Do not ask the XFree86 team about Diamond hardware.  You will
    simply annoy them, and get no information.

    For some of these chipsets there are specific README files (to be found in 
    /usr/386/lib/X11/etc). If there is one for the chipset you use, read it!!
    In these READMEs the specific options that can be used to configure the 
    server are explained. 
    
    More information on the servers can be found in their manpages.

    Later more on configuring the servers.

2. Where do I get XFree86 and what do I need to run it??

    This section is dedicated to the Linux binary distribution so all file 
    names and site names are for Linux only. If you read this file and are 
    not using Linux, you should get your hands on the announcement of
    XFree86-2.0 for you OS. In it you will find all necessary information
    on obtaining it.

    You can get the binary distribution of XFree86-2.0 for Linux via 
    anonymous FTP from 
      tsx-11.mit.edu:/pub/linux/packages/X11/XFree86-2.0
	  or
       sunsite.unc.edu:/pub/Linux/X11/XFree86-2.0 
    and all MIRRORS of these two.
     
    You can find an incomplete list of sites mirroring these in the 
    BBS-list that gets regularly posted to comp.os.linux.announce or can be
    found on both sites in the docs directory. 
        	
    The distribution consists of several gzipped tarfiles (some are too big to
    fit on one floppy disk, you may have to split them):

    XF86_8514.tar.gz        An accelerated server for cards using IBM8514 chips
    XF86_Mach32.tar.gz      An accelerated server for cards using Mach32 chips
    XF86_Mach8.tar.gz       An accelerated server for cards using Mach8 chips
    XF86_Mono.tar.gz        A Monochrome server
    XF86_S3.tar.gz          An accelerated server for cards using S3 chips
    XF86_SVGA.tar.gz        An SVGA server (most chipsets use this)
    XF86_VGA16.tar.gz       A server for 16 colour graphics modes
    xf86-svr-2.0.tar.gz     All of the above servers
    xf86-bin-2.0.tar.gz     Client programs
    xf86-cfg-2.0.tar.gz     XDM configuration files and chooser
    xf86-fnt-2.0.tar.gz     Fonts (all of them)
    xf86-kit-2.0.tar.gz     Linkkit for building your own X servers
    xf86-lib-2.0.tar.gz     Dynamic libraries, bitmaps and minimal fonts
    xf86-man-2.0.tar.gz     Manual pages (both client + programmer)
    xf86-pex-2.0.tar.gz     PEX libraries and sample clients
    xf86-prg-2.0.tar.gz     Static libs, dynamic stubs, configs and
                            include files
    xf86-doc-2.0.tar.gz     Documentation and release notes for XFree86 2.0

    You will need libc 4.4.1 or newer to run XFree86-2.0. For the accelerated
    servers you need Linux 0.99pl13 or newer (a working complete mmap
    is needed for these).

    The SVGA, VGA16 and Mono servers will work on Linux 0.99pl12 and newer.
    Furthermore you will need to install David Engel's shared dynamic linker
    ld.so version 1.3 or newer.

    You will need a main memory of at least 8 MB and a virtual memory of at 
    least 16 MB (i.e. main memory + swap). It is possible to run X on a 4 MB 
    machine if you take some precautions on memory usage (look at section 4, 
    where a package for low memory systems is described). Note that you should
    nevertheless have 16 MB of virtual memory. (So if you have 4 megs of 
    physical RAM, and 12 megs of swap, you're okay.) It is recommended that
    you have *at least* 8 megs of physical RAM, as swap is very slow. 
    With only 4 megs of physical RAM, performance will suffer greatly.

    If you want to run memory-hog programs from within X (as e.g. gcc) you 
    should at least have 16 MB of main memory and another 16MB of swap.

    You will need about 17 MB of drive space for the complete installation 
    without LinkKit, 21 MB with LinkKit. By deleting those servers that you 
    don't need and removing the LinkKit after linking your own server, you 
    can save several MB diskspace. A more concise listing on the needed disk 
    space can be found in the release notes by Simon Cooper.

    Before installing XFree86, you should make a backup of all files that 
    you changed. They may not be usable, but they still hold a lot of 
    information you might want to preserve. (This includes your old XConfig
    files.)

    To install the binary distribution you have to do the following as 
    root in the / directory with all needed tarfiles from above. 
    To get all permission right you should use umask 022.
    
    gzip -dc tarfilename | tar xvvof -

    WARNING: This will overwrite all files from an older XFree86 version,
    of course not the Xconfig file (if you did not link it to Xconfig.sample,
    which you should NOT do). In other words, if Xconfig.sample is linked
    to your Xconfig, it will be overwritten. 

    After installing it, you will have to set it up correctly to match 
    your system. This is described in section 3.

2.1 What do I do if I want to compile it myself?

    This is explained in the INSTALL, README and the README.Linux coming with 
    XFree86. You should do that, however, only if you want to have some 
    special changes to the standard distribution, as you will need a lot of 
    CPU time and disk space to do this. If you only want to change the 
    configuration of a server, you should use the Link Kit, as this 
    is much easier to handle and will not need that much resources by far. 

    For adding drivers to the SVGA server you will only need the Link Kit.
    The Link Kit comes with documentation on writing drivers for SVGA. You
    can find it in the directory /usr/X386/lib/Server/VGADriverDoc.

3. Configuring XFree86

   From version 2.0 on all documentation files for XFree86 are combined in one
   tarfile, xf86-doc-2.0.tar.gz. You have to get this file and look through 
   those files to configure XFree86 correctly. The following steps are 
   intended as a guide to these files.

   There is a very good introduction to configuring XFree86 in the 
   README.Config coming with XFree86-2.0. Start there to configure XFree86
   and follow the instructions step by step. 

   Furthermore you MUST read the manpages for Xconfig, XFree86 and the server 
   you want to set up (one of XF86_SVGA, XF86_Mono, XF86_VGA16, XF86_S3, 
   XF86_Mach8, XF86_Mach32 or XF86_8514). Just look in section 1, which server 
   supports the chipset of your graphic card and use this. 

   If you are not sure, which chipset your graphic card has (this should only 
   happen, if you do not have a manual for your card), you can try to identify 
   it by running SuperProbe, a graphic hardware detection program that comes 
   with XFree86-2.0. You should, however, rely on the information of your 
   manuals and not on that of SuperProbe (even if it is in most cases correct).
   Note that if SuperProbe does not detect your chipset correctly, the
   XFree86 servers will neither. Note further that SuperProbe detects far more 
   hardware than XFree86 servers support.

   There is a list of accelerated graphic cards that are reported to work
   with XFree86-2.0 in the file AccelCards. Look through it to see, whether 
   your card is already in the database. While other boards not listed may 
   well work, The XFree86 team gives no assurances of that.

   If you were running XS3, you should look into README.XS3, as some things
   did change while incorporating the XS3 server into XFree86.

  For configuring you will need the following information on your system:

    1. The specifications of your monitor (i.e. which vertical and horizontal
       frequences can it handle and which video bandwidth has it). This is 
       the most important thing of all as you can toast your monitor using 
       incorrect video modes and you will need these specifications to check 
       the modes.
    2. You need the name of the chipset (confer the remarks above). Note
       that there are some companies using "s3" as a synonym for "accelerated"
       chipset, so this is often not true. Please check it out in your
       manuals.
    3. Amount of video memory supplied by your card (this is usually detected
       correctly, but it is better to have the exact number and compare it 
       with the detected)
    4. Which dot-clocks are available for your card, or is your dot-clock 
       programmable. This is the hardest part for the graphic card setup.
       how to obtain these is described in the README.config.
    5. What kind of protocol uses your mouse and which device is it
       connected to. The available mouse protocols are listed in the manpage 
	   for Xconfig. The standard names of the busmice devices for Linux are
       /dev/bmouseatixl for the ati busmouse
       /dev/bmouselogitec for the Logitech busmouse (NOTE: this uses the 
                                busmouse protocol, NOT the Logitech protocol)
       /dev/bmousems for the microsoft busmouse
       /dev/bmouseps2 (or /dev/ps2aux)  for a ps/2 mouse
       The other supported mice are serial mice and therefore connected
       to one of the serial ports (named /dev/ttyS? or /dev/ttyS?? for Linux).

       So now procede as in README.Config. If your Monitor is not listed
       in the modeDB.txt file, you should try one of the generic modes.
       ENSURE THAT THE SPECS OF THE MODES ARE WITHIN THE SPECS OF YOUR MONITOR.
       If you want to tune these modes or to compute a mode of your own,
       you MUST read VideoModes.doc and follow the instructions there.
       Before trying a mode, compute the specs of this mode and again look
       if your monitor does support it. Here will be no further description of
       computing VideoModes, as you should not do this without having read
       VideoModes.doc. 

    WARNING: Do NOT EVER share Xconfig files with people who do not have 
       EXACTLY the same Configuration (i.e. graphic card AND monitor). By 
       doing this you could toast your monitor. It isn't so hard to figure 
       out modes (that is, for multisync monitors) and  you surely shouldn't 
       ever use a mode that you didn't check by yourself that it is within 
       your monitor's specs.

3.1 Configuring the keyboard for non-US-layout

    If you do not change the standard settings, the server will start up with 
    an US-american keyboard layout regardless which keyboard layout was
    configured for the kernel. If you want to have a different layout,
    look at the xmodmap(1) manpage. There are example Xmodmaps
    available at sunsite.unc.edu:/pub/Linux/X11/misc for several languages 
    and keyboard layouts.

4.  tinyX - a XFree86 based package for low memory systems

    If you have not enough memory to run the stock XFree86 distribution,
    you might try to get this package. It is based on XFree86, so the 
    difficult parts of the configuration (setting up the Xconfig file)
    is identical. At the moment tinyX is based on XFree86-1.3, but that will
    probably change soon.
    You can find tinyX on sunsite.unc.edu in the /pub/Linux/X11 hierarchy.
    You untar it as root from / , make sura that the server has the correct
    file permissions (it has to be run setuid root) and setup a Xconfig file 
    as described in 3 after reading the README for tinyX.
    In this package is a list of hints for saving memory space included.
    So you probably try to follow some of these instructions, too.
    

5.  X - related packages

    There are a lot of packages that are related to X. I mention two here,
    because they have a great influence on the look-and-feel of X.

    - The xview3L5.1.tar.gz package 
      This package is a port of SUN(TM)'s xview3.2 package by Kenneth
      Osterberg to Linux. It includes the xview toolkit, a set of
      extensions to X. It will give you the look-and-feel of the Open 
      Look(TM) extension to X  (many will know that from open windows
      from SUN(TM)).
      To install it, untar the tarfile as root in some directory (e.g.
      /usr/src), read the documentation that comes with it (most important
      the README and run the INSTALL script. Note that you need about 
      25MB free disk space to install it completely (with examples). This is 
      partly due to the fact, that for some time all files are twice on the 
      disk. After running the INSTALL script and removing the xview3L5.1 
      directory you will need about 11 MB (including all examples). If you
      do not want to install the examples , you will need about 9 MB. If you 
      do not want to compile or program any program that uses xview, you can 
      spare another 2.5 MB.
      For running Xview you will need at least 8 MB of RAM, better 16 MB. To
      run xview with XFree86-2.0 you should get the ld.so package version 1.3
      or newer.

    - There is a port of Motif(TM) to Linux. This is commercial software,
      so you will have to pay for it. You can find an advertisement from 
      Metrolink (the company that provided the port to Linux) on
      tsx-11:/pub/linux/advertisements.

    These packages provide different window managers than the standard twm
    that comes with XFree86. There are several further window managers
    that you can find on sunsite:/pub/Linux/X11/Window-managers.
    All these use different setups, so you have to read the documentation
    on the window managers to set them up correctly.
    
    There are a lot of programs available for X. Look through the 
    /pub/Linux/X11 hierarchy at sunsite.unc.edu or at the usr.X11 
    directories of /pub/linux/binaries and /pub/linux/sources at 
    tsx-11.mit.edu for many of them.


6.  Compiling Programs that use X

    If you have the source code for a program that uses X11, usually it will
    be shipped with an Imakefile instead of a Makefile. What to do now?
    
    Run "xmkmf" in the directory that containes the Imakefile. If there is a 
    hierarchy of directories with Imakefiles, you usually only have to run
    xmkmf in the root directory of that hierachy. You can configure the 
    rest by typing make Makefiles. This will build the Makefiles in all 
    directories in the hierachy. Then you should run "make depend". Don't
    be afraid if include files like stddef.h, varargs.h, ...  are not found,
    they are gcc proprietary heare files and therefore not in the standard
    include directories (the Imakefiles use makedepend, not gcc -M).
    After that you can make the program by running make and you can install
    it (usually in /usr/X386/bin) by running "make install", installing of
    the manpages is done by running make "install.man". Of course, before even 
    making xmkmf, you should have read the documentation that comes usually 
    with such packages. 

7.  Programming in X

    If you want to write programs that use the X Window System, you should
    get some books on the X Window System. Most Subroutines provided by X 
    are documented in a manpage (residing in /usr/X386/man/man3), but these 
    will not provide enough information on programming in X if you do not 
    know some generals about X.
    
    There is a rather complete series on X by O'Reilly, called "The definitive 
    Guides to the X Window System", consisting of many volumes (you will 
    probably not need all of them). For more information check out the 
    O'Reilly and Associates Catalog from anonymous FTP on ftp.ora.com.
    I suggest reading Volume 1, "Xlib Programming Manual", and Volume 4,
    "X Toolkit Intrinsics Programming Manual", if you are serious about writing
    X apps. As it turns out Xt (volume 4) is used for most X applications,
    and you only need low-level Xlib stuff (volume 1) for certain things.

8. Finding information on X on the net.

    For general X questions you should read the FAQ and the Xt-FAQ from the 
    comp.windows.x newsgroup (you can achieve them 
	from ftp.x.org in the directory /contrib or 
	from rtfm.mit.edu in /pub/usenet_by_hierarchy/comp/windows/x 
	by anonymous ftp). 
	This is the newsgroup for general X questions.

    If you have questions on the XFree86 package and cannot find an answer 
    in the documentation files (XFree86, Xconfig, XF86_* manpages or the
    README files in /usr/X386/lib/X11/etc) you may want to post a question
    in a newsgroup. The appropriate newsgroup for that purpose is 
    comp.windows.x.i386unix, as this newsgroup is dedicated to the XFree86
    system.

    There are some other newsgroups that cover X related topics:
      comp.windows.x.apps - for X applications
      comp.windows.x.intrinsics - for X intrinsic 
      comp.windows.x.motif - for the Motif(TM) extension to X
      comp.windows.open-look - for OpenLook(TM) and the xview extensions to X

    Note that some of these groups have FAQ lists that are posted regularly to 
    the groups. As always with regular postings these can be obtained from 
    rtfm.mit.edu via anonymous ftp.

    Please do not post X related questions to any newsgroup of the 
    comp.os.linux.* hierarchy. You will get better answers to your
    questions in those newsgroups dedicated to those questions, as nearly 
    all those questions are not linux-specific. 

Appendix: Some Questions & Answers

Q: I used XS3 up to now, what changed in XFree86-2.0
A: The most important things that changed, are described in the README.XS3
   file coming with XFree86-2.0

Q: Is there support for 16-bit or 24-bit colour modes?
A: No, there is only support for 1-bit, 4-bit and 8-bit colour in the moment.
   The 4-bit server is in addition in an experimental stage, so there
   are bugs and problems using it. Most of the known problems are
   mentioned in the manpage.

Q: I have a Logitech serial mouse but it does not work with the Logitech
   keyword.
A: The Logitech keyword is for older Logitech serial mice, more recent 
   Logitech serial mice use the MouseMan or MicroSoft keyword.
   Logitech serial mice plugged into a ps/2 port use the ps/2 keyword.

Q: My server is unable to find some of the fonts.
A: First check that the directories in the font path in 
   /usr/X386/lib/X11/Xconfig are named correctly and contain fonts. If that
   is the case, running mkfontdir in all of those directories may help you.

Q: I had a normal SVGA card up to now with 1 MB of video RAM. With it
   I could do a virtual resolution of 1152x900 or 1024x1024. Why does
   it not work on my new s3 card?
A: All but the most recent revisions of the s3 chips cannot use a line
   length of 1152, so a length of 1280 is used for this resolution. 
   Furthermore the s3 server needs 1k for the cursor, so a virtual 
   resolution using 1MB will not work.
   NOTE, that you will need some memory on the graphics card for font
   and pixmap caching if you want to get maximum performance from your
   graphic card. So the memory is NOT wasted, but will get you a great
   performance boost. Try running some font or pixmap specific
   mode of x11perf with maximal allowed virtual resolution (e.g. 
   1024x1023) and with 1024x768 and compare the results!
   Recommended resolutions are 1024x768 and 1152x800 for 1MB cards.
   The latter resolution leaves not too much memory to the font cache,
   so you will have a performance loss using large fonts.
   For normal use with fonts <= 18 points it should be OK, though.

Q: I have a Diamond Viper card. Why does it not work?
A: In addition to being a diamond product, this card is based on the
   P9000 chip by Weitek. This chip is not yet supported by XFree86, so
   you have only a chance to get it working with one of the generic 
   servers (i.e. Mono or VGA16). You will have nevertheless the clock
   setting problem that prevents the other diamond cards from working.

Q: Are there some notes on tuning the performance of my X system?
A: Yes there are. They are posted monthly to the comp.windows.x
   newsgroup and can also be found on rtfm.mit.edu in the 
   appropriate subdirectory.


------------------------------------------------------------------------------
Helmut Geyer                              geyer@kalliope.iwr.uni-heidelberg.de

From: geyer@polyhymnia.iwr.uni-heidelberg.de (Helmut Geyer)
Newsgroups: comp.os.linux.announce,comp.os.linux.help,comp.os.linux.admin,
comp.windows.x.i386unix
Subject: The Linux XFree86-HOWTO
Date: 6 Nov 1993 01:12:28 GMT
Approved: linux-announce@tc.cornell.edu (Matt Welsh)
Message-ID: <2betls$nv9@samba.oit.unc.edu>

Archive-name: linux/howto/xfree86
Last-modified: 5 November 1993

$Id: XFree86-HOWTO,v 1.1 1993/11/05 05:49:47 geyer Exp $

The Linux XFree86 HOWTO, version 1.1
-------------------------------------------------------------------------------
by Helmut Geyer (geyer@kalliope.iwr.uni-heidelberg.de)
with help from Dirk Hohndel (hohndel@informatik.uni-wuerzburg.de)
           and David E. Wexelblat (dwex@aib.com)

This document describes how to obtain, install and configure XFree86-2.0
for Linux systems. XFree86 is an enchanced version of the X Window System, 
version 11 release 5, with support for many versions of UNIX running on Intel 
80386/486 platforms, including Linux. It support a great amount of video 
hardware for these systems and includes many bugfixes beyond the MIT standard 
release of X. 

This document is intended to help Linux users install and configure 
XFree86 v2.0, which was released on 31 October 1993. It is furthermore 
intended to answer some basic questions about X and programs using X.

Please read this file and the referenced documentation files BEFORE installing
and starting XFree86. IF YOU ARE NOT CAREFUL, YOU MIGHT DAMAGE YOUR HARDWARE.

This file comes WITHOUT ANY WARRANTY OF FITNESS. If you damage anything
following these informations, you are on your own. For a complete 
description of the features and the installation please look at the 
documentation files and manuals that come with XFree86 (residing in
/usr/X386/lib/X11/etc and its subdirs as well as in /usr/X386/man). 
The most important files will be pointed out to you in this HOWTO. Note that 
this HOWTO gives not complete information on setting up XFree86, but that you 
have to get the documentation files for XFree86 (from the file 
xf86-doc-2.0.tar.gz). 

Other man pages from the stock X11R5 distribution can be found in 
xf86-man-2.0.tar.gz. These manfiles come as sources for the nroff program. 
To read them you will need a working man program as well as the groff package 
for formatting them. Note that it is often required to read manpages, so you 
should install the groff package anyway. (I think it is no good idea that 
in many distributions this package is considered optional). 

New versions of this document will be posted to comp.os.linux.announce, as
well as archived on sunsite.unc.edu:/pub/Linux/HOWTO.

Contents:

   0. Introduction - What are X11R5 and XFree86?
   1. Supported Hardware
   2. Where do I get XFree86 and what do I need to run it? 
   3. Configuring XFree86
   4. tinyX - a package for systems with low memory
   5. X related packages
   6. Compiling programs that use X
   7. Programming in X
   8. Finding Information on X on the net
Appendix: Some Questions & Answers

0. Introduction - What are X11R5 and XFree86?

    X11R5 is a windowing system for UN*X like operating systems.
    The X Windowing System is issued by the MIT Consortium (look at the
    X(1) manpage for more information) and is put under a very liberal
    copyright, that  allows any use of source code provided that the original 
    copyright notices are included.
    As X is THE standard windowing system for UN*X operating systems,
    there are a lot of applications using it (both free and commercial).

    XFree86 is a port of X11R5 that supports several versions of Intel-based
    Unix and Unix-like operating systems.  The XFree86 servers are partly 
    derived from X386 1.2, which was the X server distributed with X11R5, 
    but many of them are newly developed. The accelerated servers that are 
    the most important change since XFree86-1.3 are completely new. This 
    release consists of many new features and performance improvements as 
    well as many bug fixes.  The release is available as source patches 
    against the MIT X11R5 code, as well as binary distributions for many 
    architectures.

    Note that while the source and installation trees retain the name 'X386'
    name (for simplicity of maintenance of the source tree), there is no
    connection between XFree86 and the commercial X386 product sold by SGCS.
    The XFree86 Core Team maintains technical contacts with SGCS in an effort
    to keep user-affecting changes to the workings of the products from
    diverging too radically.  There is no direct involvement of either group
    in the workings of the other.

    You will find more information on the XFree86-2.0 release and the 
    XFree86 project in the file README from the documentation tarfile. 

1. Supported Hardware

    As this is the most often asked question, this will be the first section.
    Currently XFree86 (Version 2.0) supports the following chipsets in the 
    XF86_SVGA server (note that it depends on the chipset, whether a card 
    is working and not on the vendor with Diamond notably excluded, cf 
    the remark at the end of this paragraph):

    nonaccelerated chipsets:
        Tseng ET3000, ET4000AX, ET4000/W32
        Western Digital/Paradise PVGA1
        Western Digital WD90C00, WD90C10, WD90C11, WD90C30
        Genoa GVGA
        Trident TVGA8800CS, TVGA8900B, TVGA8900C, TVGA8900CL, TVGA9000
        ATI 28800-4, 28800-5, 28800-a
        NCR 77C22, 77C22E
        Cirrus Logic GLGD5420, CLGD5422, CLGD5424, CLGD6205, CLGD6215, 
                     CLGD6225, CLGD6235
        Compaq AVGA
        OAK OTI067, OTI077
    accelerated chipsets:
        Cirrus CLGD5426, CLGD5428
        Western Digital WD90C31
    
    These chipsets are all supported in 256 color (XF86_SVGA) and in monochrome
    mode (XF86_Mono) with the exception of the ATI and Cirrus chipsets, which 
    are only supported in 256 color mode. Note that the ET4000/W32 is only 
    supported as a ET4000 clone and none of the accelerated functions are used.
    
    The monochrome server also supports generic VGA cards (using 64k of the 
    video memory as a single bank), the Hercules card and the Hyundai HGC-1280.

	There is an (experimental) additional server that works on generic VGA
	hardware: XF86_VGA16, a 16 color server.

    XFree86-2.0 supports the following accelerated chipsets with seperate 
    servers:
        S3  86C911, 86C924, 86C801, 86C805, 86C928 supported by 
            the XF86_S3 server
        ATI mach8   supported by the XF86_Mach8 server
        ATI mach32  supported by the XF86_Mach32 server
        IBM 8514/a and true clones supported by the XF86_8514 server

     No other chipsets are supported; not Weitek P9000, not TIGA, not
     IIT AGX, not Microfield, etc.  Support for some of these will likely
     be provided in future XFree86 releases.  TIGA will never be supported,
     as it requires licensing materials from TI (and may disallow source
     distributions); Microfield boards will never be supported, as they
     use proprietary and undocumented custom microcode interfaces.


    NOTE further: The following is a statement of the XFree86 Core Team 
         concerning graphic cards by Diamond:
         
            All Diamond cards are NOT supported by XFree86 even if they 
    	have a supported chipset (with the exception of the Cirrus chipsets
    	that have an internal clock generator). The reason for this
    	is that Diamond has changed the mechanism used to select pixel clock
    	frequencies, and will only release programming information under
    	non-disclosure.  We are not willing to do this (as it would mean
    	that source cannot be provided).  We have had discussions with
    	Diamond over this, and they do not intend to change this policy.
    	Hence we will do nothing to support Diamond products going forward
    	(i.e. don't send us a program to run set their clocks).  XFree86 
        DOES NOT SUPPORT DIAMOND HARDWARE.  It is possible to make some
        of it work, but we will not assist in doing this.

    The author of this HOWTO does support this statement completely. If you 
    have read this and bought nevertheless a card from Diamond, you will 
    damage the idea of free software as Diamond does not support the efforts 
    of a free X11 server. 

    However, if you are stuck with a card from Diamond, there is a compilation 
    of the needed things to get XFree86 running on some of these cards. It is 
    called the Diamond-FAQ and can be obtained from tsx-11 or sunsite in the 
    docs directories.

    Do not ask the XFree86 team about Diamond hardware.  You will
    simply annoy them, and get no information.

    For some of these chipsets there are specific README files (to be found in 
    /usr/386/lib/X11/etc). If there is one for the chipset you use, read it!!
    In these READMEs the specific options that can be used to configure the 
    server are explained. 
    
    More information on the servers can be found in their manpages.

    Later more on configuring the servers.

2. Where do I get XFree86 and what do I need to run it??

    This section is dedicated to the Linux binary distribution so all file 
    names and site names are for Linux only. If you read this file and are 
    not using Linux, you should get your hands on the announcement of
    XFree86-2.0 for you OS. In it you will find all necessary information
    on obtaining it.

    You can get the binary distribution of XFree86-2.0 for Linux via 
    anonymous FTP from 
      tsx-11.mit.edu:/pub/linux/packages/X11/XFree86-2.0
	  or
       sunsite.unc.edu:/pub/Linux/X11/XFree86-2.0 
    and all MIRRORS of these two.
     
    You can find an incomplete list of sites mirroring these in the 
    BBS-list that gets regularly posted to comp.os.linux.announce or can be
    found on both sites in the docs directory. 
        	
    The distribution consists of several gzipped tarfiles (some are too big to
    fit on one floppy disk, you may have to split them):

    XF86_8514.tar.gz        An accelerated server for cards using IBM8514 chips
    XF86_Mach32.tar.gz      An accelerated server for cards using Mach32 chips
    XF86_Mach8.tar.gz       An accelerated server for cards using Mach8 chips
    XF86_Mono.tar.gz        A Monochrome server
    XF86_S3.tar.gz          An accelerated server for cards using S3 chips
    XF86_SVGA.tar.gz        An SVGA server (most chipsets use this)
    XF86_VGA16.tar.gz       A server for 16 colour graphics modes
    xf86-svr-2.0.tar.gz     All of the above servers
    xf86-bin-2.0.tar.gz     Client programs
    xf86-cfg-2.0.tar.gz     XDM configuration files and chooser
    xf86-fnt-2.0.tar.gz     Fonts (all of them)
    xf86-kit-2.0.tar.gz     Linkkit for building your own X servers
    xf86-lib-2.0.tar.gz     Dynamic libraries, bitmaps and minimal fonts
    xf86-man-2.0.tar.gz     Manual pages (both client + programmer)
    xf86-pex-2.0.tar.gz     PEX libraries and sample clients
    xf86-prg-2.0.tar.gz     Static libs, dynamic stubs, configs and
                            include files
    xf86-doc-2.0.tar.gz     Documentation and release notes for XFree86 2.0
    xf86-doc2-2.0.tar.gz    This file contains the manpage for Xconfig that
                            has mistakenly been left out of the -doc- file.

    You will need libc 4.4.1 or newer to run XFree86-2.0. For the accelerated
    servers you need Linux 0.99pl13 or newer (a working complete mmap
    is needed for these).

    The SVGA, VGA16 and Mono servers will work on Linux 0.99pl12 and newer.
    Furthermore you will need to install David Engel's shared dynamic linker
    ld.so version 1.3 or newer. You can find the most recent version
    on all mirrors of tsx-11 in the /pub/linux/packages/GCC directory.

    You will need a main memory of at least 8 MB and a virtual memory of at 
    least 16 MB (i.e. main memory + swap). It is possible to run X on a 4 MB 
    machine if you take some precautions on memory usage (look at section 4, 
    where a package for low memory systems is described). Note that you should
    nevertheless have 16 MB of virtual memory. (So if you have 4 megs of 
    physical RAM, and 12 megs of swap, you're okay.) It is recommended that
    you have *at least* 8 megs of physical RAM, as swap is very slow. 
    With only 4 megs of physical RAM, performance will suffer greatly.

    If you want to run memory-hog programs from within X (as e.g. gcc) you 
    should at least have 16 MB of main memory and another 16MB of swap.

    You will need about 17 MB of drive space for the complete installation 
    without LinkKit, 21 MB with LinkKit. By deleting those servers that you 
    don't need and removing the LinkKit after linking your own server, you 
    can save several MB diskspace. A more concise listing on the needed disk 
    space and the contents of the distribution files can be found in the 
    release notes by Simon Cooper. These can be found in the README files
    residing in the XFree86-2.0 directory.

    Before installing XFree86, you should make a backup of all files that 
    you changed. They may not be usable, but they still hold a lot of 
    information you might want to preserve. (This includes your old XConfig
    files.)

    To install the binary distribution you have to do the following as 
    root in the / directory with all needed tarfiles from above. 
    To get all permission right you should use umask 022.
    
    gzip -dc tarfilename | tar xvvof -

    WARNING: This will overwrite all files from an older XFree86 version,
    of course not the Xconfig file (if you did not link it to Xconfig.sample,
    which you should NOT do). In other words, if Xconfig.sample is linked
    to your Xconfig, it will be overwritten. 

    After installing it, you will have to set it up correctly to match 
    your system. This is described in section 3.

2.1 What do I do if I want to compile it myself?

    This is explained in the INSTALL, README and the README.Linux coming with 
    XFree86. You should do that, however, only if you want to have some 
    special changes to the standard distribution, as you will need a lot of 
    CPU time and disk space to do this. If you only want to change the 
    configuration of a server, you should use the Link Kit, as this 
    is much easier to handle and will not need that much resources by far. 

    For adding drivers to the SVGA server you will only need the Link Kit.
    The Link Kit comes with documentation on writing drivers for SVGA. You
    can find it in the directory /usr/X386/lib/Server/VGADriverDoc.

3. Configuring XFree86

   From version 2.0 on all documentation files for XFree86 are combined in one
   tarfile, xf86-doc-2.0.tar.gz. You have to get this file and look through 
   those files to configure XFree86 correctly. The following steps are 
   intended as a guide to these files.

   There is a very good introduction to configuring XFree86 in the 
   README.Config coming with XFree86-2.0. Start there to configure XFree86
   and follow the instructions step by step. 

   Furthermore you MUST read the manpages for Xconfig, XFree86 and the server 
   you want to set up (one of XF86_SVGA, XF86_Mono, XF86_VGA16, XF86_S3, 
   XF86_Mach8, XF86_Mach32 or XF86_8514). Just look in section 1, which server 
   supports the chipset of your graphic card and use this. 

   If you are not sure, which chipset your graphic card has (this should only 
   happen, if you do not have a manual for your card), you can try to identify 
   it by running SuperProbe, a graphic hardware detection program that comes 
   with XFree86-2.0. You should, however, rely on the information of your 
   manuals and not on that of SuperProbe (even if it is in most cases correct).
   Note that if SuperProbe does not detect your chipset correctly, the
   XFree86 servers will neither. Note further that SuperProbe detects far more 
   hardware than XFree86 servers support.

   There is a list of accelerated graphic cards that are reported to work
   with XFree86-2.0 in the file AccelCards. Look through it to see, whether 
   your card is already in the database. While other boards not listed may 
   well work, The XFree86 team gives no assurances of that.

   If you were running XS3, you should look into README.XS3, as some things
   did change while incorporating the XS3 server into XFree86.

  For configuring you will need the following information on your system:

    1. The specifications of your monitor (i.e. which vertical and horizontal
       frequences can it handle and which video bandwidth has it). This is 
       the most important thing of all as you can toast your monitor using 
       incorrect video modes and you will need these specifications to check 
       the modes.
    2. You need the name of the chipset (confer the remarks above). Note
       that there are some companies using "s3" as a synonym for "accelerated"
       chipset, so this is often not true. Please check it out in your
       manuals.
    3. Amount of video memory supplied by your card (this is usually detected
       correctly, but it is better to have the exact number and compare it 
       with the detected)
    4. Which dot-clocks are available for your card, or is your dot-clock 
       programmable. This is the hardest part for the graphic card setup.
       how to obtain these is described in the README.config.
    5. What kind of protocol uses your mouse and which device is it
       connected to. The available mouse protocols are listed in the manpage 
	   for Xconfig. The standard names of the busmice devices for Linux are
       /dev/bmouseatixl for the ati busmouse
       /dev/bmouselogitec for the Logitech busmouse (NOTE: this uses the 
                                busmouse protocol, NOT the Logitech protocol)
       /dev/bmousems for the microsoft busmouse
       /dev/bmouseps2 (or /dev/ps2aux)  for a ps/2 mouse
       The other supported mice are serial mice and therefore connected
       to one of the serial ports (named /dev/ttyS? or /dev/ttyS?? for Linux).

       So now procede as in README.Config. If your Monitor is not listed
       in the modeDB.txt file, you should try one of the generic modes.
       ENSURE THAT THE SPECS OF THE MODES ARE WITHIN THE SPECS OF YOUR MONITOR.
       If you want to tune these modes or to compute a mode of your own,
       you MUST read VideoModes.doc and follow the instructions there.
       Before trying a mode, compute the specs of this mode and again look
       if your monitor does support it. Here will be no further description of
       computing VideoModes, as you should not do this without having read
       VideoModes.doc. 

    WARNING: Do NOT EVER share Xconfig files with people who do not have 
       EXACTLY the same Configuration (i.e. graphic card AND monitor). By 
       doing this you could toast your monitor. It isn't so hard to figure 
       out modes (that is, for multisync monitors) and  you surely shouldn't 
       ever use a mode that you didn't check by yourself to be within your 
       monitor's specs. Even if you have exactly the same setup you should
       check all modes yourself before trying them. There are many people 
       who run their hardware out of specs which may not damage their hardware
       but could yours.

3.1 Configuring the keyboard for non-US-layout

    If you do not change the standard settings, the server will start up with 
    an US-american keyboard layout regardless which keyboard layout was
    configured for the kernel. If you want to have a different layout,
    look at the xmodmap(1) manpage. There are example Xmodmaps
    available at sunsite.unc.edu:/pub/Linux/X11/misc for several languages 
    and keyboard layouts.

4.  tinyX - a XFree86 based package for low memory systems

    If you have not enough memory to run the stock XFree86 distribution,
    you might try to get this package. It is based on XFree86, so the 
    difficult parts of the configuration (setting up the Xconfig file)
    is identical. At the moment tinyX is based on XFree86-1.3, but that will
    probably change soon.
    You can find tinyX on sunsite.unc.edu in the /pub/Linux/X11 hierarchy.
    You untar it as root from /, make sure that the server has the correct
    file permissions (it has to be run setuid root) and setup a Xconfig file 
    as described in 3 after reading the README for tinyX.
    You should get all XFree documentation from the XFree86 directory though,
    as this is not included in tinyX.
    In this package is a list of hints for saving memory space included.
    So you probably try to follow some of these instructions, too.
    

5.  X - related packages

    There are a lot of packages that are related to X. I mention two here,
    because they have a great influence on the look-and-feel of X.

    - The xview3L5.1.tar.gz package 
      This package is a port of SUN(TM)'s xview3.2 package by Kenneth
      Osterberg to Linux. It includes the xview toolkit, a set of
      extensions to X. It will give you the look-and-feel of the Open 
      Look(TM) extension to X  (many will know that from open windows
      from SUN(TM)).
      To install it, untar the tarfile as root in some directory (e.g.
      /usr/src), read the documentation that comes with it (most important
      the README and run the INSTALL script. Note that you need about 
      25MB free disk space to install it completely (with examples). This is 
      partly due to the fact, that for some time all files are twice on the 
      disk. After running the INSTALL script and removing the xview3L5.1 
      directory you will need about 11 MB (including all examples). If you
      do not want to install the examples , you will need about 9 MB. If you 
      do not want to compile or program any program that uses xview, you can 
      spare another 2.5 MB.
      For running Xview you will need at least 8 MB of RAM, better 16 MB. To
      run xview with XFree86-2.0 you should get the ld.so package version 1.3
      or newer.

    - There is a port of Motif(TM) to Linux. This is commercial software,
      so you will have to pay for it. You can find an advertisement from 
      Metrolink (the company that provided the port to Linux) on
      tsx-11:/pub/linux/advertisements.

    These packages provide different window managers than the standard twm
    that comes with XFree86. There are several further window managers
    that you can find on sunsite:/pub/Linux/X11/Window-managers.
    All these use different setups, so you have to read the documentation
    on the window managers to set them up correctly.
    
    There are a lot of programs available for X. Look through the 
    /pub/Linux/X11 hierarchy at sunsite.unc.edu or at the usr.X11 
    directories of /pub/linux/binaries and /pub/linux/sources at 
    tsx-11.mit.edu for many of them.


6.  Compiling Programs that use X

    If you have the source code for a program that uses X11, usually it will
    be shipped with an Imakefile instead of a Makefile. What to do now?
    
    Run "xmkmf" in the directory that containes the Imakefile. If there is a 
    hierarchy of directories with Imakefiles, you usually only have to run
    xmkmf in the root directory of that hierachy. You can configure the 
    rest by typing make Makefiles. This will build the Makefiles in all 
    directories in the hierachy. Then you should run "make depend". Don't
    be afraid if include files like stddef.h, varargs.h, ...  are not found,
    they are gcc proprietary heare files and therefore not in the standard
    include directories (the Imakefiles use makedepend, not gcc -M).
    After that you can make the program by running make and you can install
    it (usually in /usr/X386/bin) by running "make install", installing of
    the manpages is done by running make "install.man". Of course, before even 
    making xmkmf, you should have read the documentation that comes usually 
    with such packages. 

7.  Programming in X

    If you want to write programs that use the X Window System, you should
    get some books on the X Window System. Most Subroutines provided by X 
    are documented in a manpage (residing in /usr/X386/man/man3), but these 
    will not provide enough information on programming in X if you do not 
    know some generals about X.
    
    There is a rather complete series on X by O'Reilly, called "The definitive 
    Guides to the X Window System", consisting of many volumes (you will 
    probably not need all of them). For more information check out the 
    O'Reilly and Associates Catalog from anonymous FTP on ftp.ora.com.
    I suggest reading Volume 1, "Xlib Programming Manual", and Volume 4,
    "X Toolkit Intrinsics Programming Manual", if you are serious about writing
    X apps. As it turns out Xt (volume 4) is used for most X applications,
    and you only need low-level Xlib stuff (volume 1) for certain things.

8. Finding information on X on the net.

    For general X questions you should read the FAQ and the Xt-FAQ from the 
    comp.windows.x newsgroup (you can achieve them 
	from ftp.x.org in the directory /contrib or 
	from rtfm.mit.edu in /pub/usenet_by_hierarchy/comp/windows/x 
	by anonymous ftp). 
	This is the newsgroup for general X questions.

    If you have questions on the XFree86 package and cannot find an answer 
    in the documentation files (XFree86, Xconfig, XF86_* manpages or the
    README files in /usr/X386/lib/X11/etc) you may want to post a question
    in a newsgroup. The appropriate newsgroup for that purpose is 
    comp.windows.x.i386unix, as this newsgroup is dedicated to the XFree86
    system.
    If you have a problem with the server and want to post a question to this 
    newsgrup, you should provide enough information for those that want to 
    help you. It is no good idea telling: XFree86 is not working, what do I
    have to do? Here some things that should be included in all postings 
    that are concerned with server problems:
      - which Operating System and which release of it are you running
      - which hardware do you have (at least bus type (ISA/EISA/VLB), graphic 
        card (including chipset and video RAM))
      - a concise decription of the problem
      - a printout of the server startup (you can generate that by redirecting
        the stderr output)
      - the used parts of the Xconfig (It is NOT a good idea to include all
        lines commented out by a leading #, as this then will be the largest
        part of your post)
    Furthermore you should say what steps of trouble-shooting you did (there
    are some mentioned in the XFree86 documentation files or in the Appendix).

    There are some other newsgroups that cover X related topics:
      comp.windows.x.apps - for X applications
      comp.windows.x.intrinsics - for X intrinsic 
      comp.windows.x.motif - for the Motif(TM) extension to X
      comp.windows.open-look - for OpenLook(TM) and the xview extensions to X

    Note that some of these groups have FAQ lists that are posted regularly to 
    the groups. As always with regular postings these can be obtained from 
    rtfm.mit.edu via anonymous ftp.

    Please do not post X related questions to any newsgroup of the 
    comp.os.linux.* hierarchy. You will get better answers to your
    questions in those newsgroups dedicated to those questions, as nearly 
    all those questions are not linux-specific. 

Appendix: Some Questions & Answers

Q: I used XS3 up to now, what changed in XFree86-2.0
A: The most important things that changed, are described in the README.XS3
   file coming with XFree86-2.0

Q: Is there support for 16-bit or 24-bit colour modes?
A: No, there is only support for 1-bit, 4-bit and 8-bit colour in the moment.
   The 4-bit server is in addition in an experimental stage, so there
   are bugs and problems using it. Most of the known problems are
   mentioned in the manpage.

Q: I have a Logitech serial mouse but it does not work with the Logitech
   keyword.
A: The Logitech keyword is for older Logitech serial mice, more recent 
   Logitech serial mice use the MouseMan or MicroSoft keyword.
   Logitech serial mice plugged into a ps/2 port use the ps/2 keyword.

Q: My server is unable to find some of the fonts.
A: First check that the directories in the font path in 
   /usr/X386/lib/X11/Xconfig are named correctly and contain fonts. If that
   is the case, running mkfontdir in all of those directories may help you.

Q: I had a normal SVGA card up to now with 1 MB of video RAM. With it
   I could do a virtual resolution of 1152x900 or 1024x1024. Why does
   it not work on my new s3 card?
A: All but the most recent revisions of the s3 chips cannot use a line
   length of 1152, so a length of 1280 is used for this resolution. 
   Furthermore the s3 server needs 1k for the cursor, so a virtual 
   resolution using 1MB will not work.
   NOTE, that you will need some memory on the graphics card for font
   and pixmap caching if you want to get maximum performance from your
   graphic card. So the memory is NOT wasted, but will get you a great
   performance boost. Try running some font or pixmap specific
   mode of x11perf with maximal allowed virtual resolution (e.g. 
   1024x1023) and with 1024x768 and compare the results!
   Recommended resolutions are 1024x768 and 1152x800 for 1MB cards.
   The latter resolution leaves not too much memory to the font cache,
   so you will have a performance loss using large fonts.
   For normal use with fonts <= 18 points it should be OK, though.

Q: I have a s3 card and it does not work properly. The screen gets
   distorted when dragging windows and it frequently locks up.
A: First try to use options nomemaccess or nolinear. If both does not help
   and you have a s3 928, try specifying chipset s3_generic in your 
   Xconfig. If nothing helps, it might be a incompatibility
   problem between your graphic card and your motherboard. Try to see if the
   card works in a different system, if you can get your hands.

Q: I have a Diamond Viper card. Why does it not work?
A: In addition to being a diamond product, this card is based on the
   P9000 chip by Weitek. This chip is not yet supported by XFree86, so
   you have only a chance to get it working with one of the generic 
   servers (i.e. Mono or VGA16). You will have nevertheless the clock
   setting problem that prevents the other diamond cards from working.

Q: Are there some notes on tuning the performance of my X system?
A: Yes there are. They are posted monthly to the comp.windows.x
   newsgroup and can also be found on rtfm.mit.edu in the 
   appropriate subdirectory.

Q: I want to reconfigure my XF86_S3 or XF86_VGA16 server using the LinkKit.
   After editing sited.def and running mkmf, make will not work. 
A: There is a little bug in the Imakefile for the LinkKit. You can either
   change the line 326 in the Imakefile from
   #if XF86SVGAServer || XF86MonoServer
   to
   #if XF86SVGAServer || XF86MonoServer || XF86VGA16Server || XF86S3Server
   or you can configure the XF86_Mono or XF86_SVGA server additionally for 
   building. Then all will work.

Comments or suggestions on this HOWTO are very welcome

------------------------------------------------------------------------------
Helmut Geyer                              geyer@kalliope.iwr.uni-heidelberg.de

From: geyer@polyhymnia.iwr.uni-heidelberg.de (Helmut Geyer)
Newsgroups: comp.os.linux.announce,comp.os.linux.help,comp.os.linux.admin,
comp.windows.x.i386unix,comp.answers,news.answers
Subject: The Linux XFree86 HOWTO
Date: 17 Nov 1993 05:44:20 GMT
Approved: linux-announce@tc.cornell.edu (Matt Welsh)
Message-ID: <2ccdnk$c6j@samba.oit.unc.edu>

Archive-name: linux/howto/xfree86
Last-modified: 17 November 1993

$Id: XFree86-HOWTO,v 1.2 1993/11/17 00:00:00 geyer Rel $

Comments or suggestions on this HOWTO are very welcome, i.e. if you feel that
something is missing or something is obsolete or wrong, please let me know.

The Linux XFree86 HOWTO, version 1.2
------------------------------------------------------------------------------
by Helmut Geyer (geyer@kalliope.iwr.uni-heidelberg.de) 
with help from Dirk Hohndel (hohndel@informatik.uni-wuerzburg.de)
           and David E. Wexelblat (dwex@aib.com)

This document describes how to obtain, install and configure XFree86-2.0 for
Linux systems. XFree86 is an enchanced version of the X Window System,
version 11 release 5, with support for many versions of UNIX running on
Intel i386/486 platforms, including Linux. It support a great amount of
video hardware for these systems and includes many bugfixes beyond the MIT
standard release of X.

This document is intended to help Linux users install and configure XFree86
v2.0, which was released on 31 October 1993. It is furthermore intended to
answer some basic questions about X and programs using X.

Please read this file and the referenced documentation files BEFORE
installing and starting XFree86. IF YOU ARE NOT CAREFUL, YOU MIGHT DAMAGE
YOUR HARDWARE.

This file comes WITHOUT ANY WARRANTY OF FITNESS. If you damage anything
following these informations, you are on your own. For a complete
description of the features and the installation please look at the
documentation files and manuals that come with XFree86 (residing in
/usr/X386/lib/X11/etc and its subdirs as well as in /usr/X386/man).  The
most important files will be pointed out to you in this HOWTO. Note that
this HOWTO gives not complete information on setting up XFree86, but that
you have to get the documentation files for XFree86 (from the file
xf86-doc-2.0.tar.gz).

Other man pages from the stock X11R5 distribution can be found in
xf86-man-2.0.tar.gz. These manfiles come as sources for the nroff program.
To read them you will need a working man program as well as the groff
package for formatting them. Note that it is often required to read
manpages, so you should install the groff package anyway. (I think it is no
good idea that in many distributions this package is considered optional).

New versions of this document will be posted to comp.os.linux.announce, as
well as archived on sunsite.unc.edu:/pub/Linux/HOWTO.

Contents:

   0. Introduction - What are X11R5 and XFree86?
   1. Supported Hardware
   2. Where do I get XFree86 and what do I need to run it? 
   3. Configuring XFree86
   4. tinyX - a package for systems with low memory
   5. X related packages
   6. Compiling programs that use X
   7. Programming in X
   8. Finding Information on X on the net
Appendix: Some Questions & Answers

0. Introduction - What are X11R5 and XFree86?

    X11R5 is a windowing system for UN*X like operating systems.  The X
    Windowing System is issued by the MIT Consortium (look at the X(1)
    manpage for more information) and is put under a very liberal copyright,
    that allows any use of source code provided that the original copyright
    notices are included.
    As X is THE standard windowing system for UN*X operating systems, there
    are a lot of applications using it (both free and commercial).

    XFree86 is a port of X11R5 that supports several versions of Intel-based
    Unix and Unix-like operating systems.  The XFree86 servers are partly
    derived from X386 1.2, which was the X server distributed with X11R5,
    but many of them are newly developed. The accelerated servers that are
    the most important change since XFree86-1.3 are completely new. This
    release consists of many new features and performance improvements as
    well as many bug fixes.  The release is available as source patches
    against the MIT X11R5 code, as well as binary distributions for many
    architectures.

    Note that while the source and installation trees retain the name 'X386'
    name (for simplicity of maintenance of the source tree), there is no
    connection between XFree86 and the commercial X386 product sold by SGCS.
    The XFree86 Core Team maintains technical contacts with SGCS in an
    effort to keep user-affecting changes to the workings of the products
    from diverging too radically.  There is no direct involvement of either
    group in the workings of the other.

    You will find more information on the XFree86-2.0 release and the
    XFree86 project in the file README from the documentation tarfile.

1. Supported Hardware

    As this is the most often asked question, this will be the first
    section.  Currently XFree86 (Version 2.0) supports the following
    chipsets in the XF86_SVGA server (note that it depends on the chipset
    whether a card is working and not on the vendor, with Diamond notably
    excluded, cf. the remark at the end of this paragraph):

    nonaccelerated chipsets:
        Tseng ET3000, ET4000AX, ET4000/W32
        Western Digital/Paradise PVGA1
        Western Digital WD90C00, WD90C10, WD90C11, WD90C30
        Genoa GVGA
        Trident TVGA8800CS, TVGA8900B, TVGA8900C, TVGA8900CL, TVGA9000
        ATI 28800-4, 28800-5, 28800-a
        NCR 77C22, 77C22E
        Cirrus Logic GLGD5420, CLGD5422, CLGD5424, CLGD6205, CLGD6215, 
                     CLGD6225, CLGD6235
        Compaq AVGA
        OAK OTI067, OTI077
    accelerated chipsets:
        Cirrus CLGD5426, CLGD5428
        Western Digital WD90C31
    
    These chipsets are all supported in 256 color (XF86_SVGA) and in
    monochrome mode (XF86_Mono) with the exception of the ATI and Cirrus
    chipsets, which are only supported in 256 color mode. Note that the
    ET4000/W32 is only supported as a ET4000 clone and none of the
    accelerated functions are used.
    
    The monochrome server also supports generic VGA cards (using 64k of the
    video memory as a single bank), the Hercules card and the Hyundai
    HGC-1280.

    There is an (experimental) additional server that works on generic VGA
    hardware: XF86_VGA16, a 16 color server.

    XFree86-2.0 supports the following accelerated chipsets with seperate
    servers:

        S3  86C911, 86C924, 86C801, 86C805, 86C928 supported by 
            the XF86_S3 server
        ATI mach8   supported by the XF86_Mach8 server
        ATI mach32  supported by the XF86_Mach32 server
        IBM 8514/a and true clones supported by the XF86_8514 server

     No other chipsets are supported; not Weitek P9000, not TIGA, not IIT
     AGX, not Microfield, etc.  Support for some of these will likely be
     provided in future XFree86 releases.  TIGA will never be supported, as
     it requires licensing materials from TI (and may disallow source
     distributions); Microfield boards will never be supported, as they use
     proprietary and undocumented custom microcode interfaces.


    NOTE further: The following is a statement of the XFree86 Core Team 
         concerning graphic cards by Diamond:
         
        All Diamond cards are NOT supported by XFree86 even if they
    	have a supported chipset (with  the exception of the Cirrus
        chipsets that have an internal clock generator). The reason
        for this is that Diamond has changed  the mechanism used to
        select  pixel   clock  frequencies, and  will only  release
        programming information under  non-disclosure.   We are not
        willing to do this (as it would mean  that source cannot be
        provided).  We have had discussions with Diamond over this,
        and they do not  intend to  change  this policy.  Hence  we
        will do nothing  to support Diamond products  going forward
        (i.e.  don't  send us a program  to run  set their clocks).
        XFree86 DOES NOT SUPPORT  DIAMOND HARDWARE.  It is possible
        to make some  of it work, but  we will not assist  in doing
        this.


    The author of this HOWTO does support this statement completely. If you
    have read this and bought nevertheless a card from Diamond, you will
    damage the idea of free software as Diamond does not support the efforts
    of a free X11 server.

    However, if you are stuck with a card from Diamond, there is a
    compilation of the needed things to get XFree86 running on some of these
    cards. It is called the Diamond-FAQ and can be obtained from tsx-11 or
    sunsite in the docs directories.

    Do not ask the XFree86 team about Diamond hardware.  You will simply
    annoy them, and get no information.

    For some of these chipsets there are specific README files (to be found
    in /usr/X386/lib/X11/etc). If there is one for the chipset you use, read
    it!!  In these READMEs the specific options that can be used to
    configure the server are explained.
    
    More information on the servers can be found in their manpages.

    Later more on configuring the servers.

2. Where do I get XFree86 and what do I need to run it??

    This section is dedicated to the Linux binary distribution so all file
    names and site names are for Linux only. If you read this file and are
    not using Linux, you should get your hands on the announcement of
    XFree86-2.0 for you OS. In it you will find all necessary information on
    obtaining it.

    You can get the binary distribution of XFree86-2.0 for Linux via 
    anonymous FTP from 
      tsx-11.mit.edu:/pub/linux/packages/X11/XFree86-2.0
	  or
       sunsite.unc.edu:/pub/Linux/X11/XFree86-2.0 
    and all MIRRORS of these two.
     
    You can find an incomplete list of sites mirroring these in the
    BBS-list that gets regularly posted to comp.os.linux.announce or can be
    found on both sites in the docs directory.
       
    The distribution consists of several gzipped tarfiles (some are too big
    to fit on one floppy disk, you may have to split them):

    XF86_8514.tar.gz      An accelerated server for cards using IBM8514 chips
    XF86_Mach32.tar.gz    An accelerated server for cards using Mach32 chips
    XF86_Mach8.tar.gz     An accelerated server for cards using Mach8 chips
    XF86_Mono.tar.gz      A Monochrome server
    XF86_S3.tar.gz        An accelerated server for cards using S3 chips
    XF86_SVGA.tar.gz      An SVGA server (most chipsets use this)
    XF86_VGA16.tar.gz     A server for 16 colour graphics modes
    xf86-svr-2.0.tar.gz   All of the above servers
    xf86-bin-2.0.tar.gz   Client programs
    xf86-cfg-2.0.tar.gz   XDM configuration files and chooser
    xf86-fnt-2.0.tar.gz   Fonts (all of them)
    xf86-kit-2.0.tar.gz   Linkkit for building your own X servers
    xf86-lib-2.0.tar.gz   Dynamic libraries, bitmaps and minimal fonts
    xf86-man-2.0.tar.gz   Manual pages (both client + programmer)
    xf86-pex-2.0.tar.gz   PEX libraries and sample clients
    xf86-prg-2.0.tar.gz   Static libs, dynamic stubs, configs and
                            include files
    xf86-doc-2.0.tar.gz   Documentation and release notes for XFree86 2.0
    xf86-doc2-2.0.tar.gz  This file contains the manpage for Xconfig that
                            has mistakenly been left out of the -doc- file.

    You will need libc 4.4.1 or newer to run XFree86-2.0. For the
    accelerated servers you need Linux 0.99pl13 or newer (a working complete
    mmap is needed for these).

    The SVGA, VGA16 and Mono servers will work on Linux 0.99pl12 and newer.
    Furthermore you will need to install David Engel's shared dynamic linker
    ld.so version 1.3 or newer. You can find the most recent version on all
    mirrors of tsx-11 in the /pub/linux/packages/GCC directory.

    You will need a main memory of at least 8 MB and a virtual memory of at
    least 16 MB (i.e. main memory + swap). It is possible to run X on a 4 MB
    machine if you take some precautions on memory usage (look at section 4,
    where a package for low memory systems is described). Note that you
    should nevertheless have 16 MB of virtual memory. (So if you have 4 megs
    of physical RAM, and 12 megs of swap, you're okay.) It is recommended
    that you have *at least* 8 megs of physical RAM, as swap is very slow.
    With only 4 megs of physical RAM, performance will suffer greatly.

    If you want to run memory-hog programs from within X (as e.g. gcc) you
    should at least have 16 MB of main memory and another 16MB of swap.

    You will need about 17 MB of disk space for the complete installation
    without LinkKit, 21 MB with LinkKit. By deleting those servers that you
    don't need and removing the LinkKit after linking your own server, you
    can save several MB of diskspace. A more concise listing on the needed 
    disk space and the contents of the distribution files can be found in the
    release notes by Simon Cooper. These can be found in the 00README file
    residing in the XFree86-2.0 directory.

    Before installing XFree86, you should make a backup of all files that
    you changed. They may not be usable, but they still hold a lot of
    information you might want to preserve. (This includes your old XConfig
    files.)

    To install the binary distribution you have to do the following as root
    in the / directory with all needed tarfiles from above.  To get all
    permission right you should use umask 022.
    
    gzip -dc tarfilename | tar xvvof -

    WARNING: This will overwrite all files from an older XFree86 version, of
    course not the Xconfig file (if you did not link it to Xconfig.sample,
    which you should NOT do). In other words, ionly if Xconfig.sample is
    linked to your Xconfig, it will be overwritten.

    After installing it, you will have to set it up correctly to match your
    system. This is described in section 3.

2.1 What do I do if I want to compile it myself?

    This is explained in the INSTALL, README and README.Linux files coming
    with XFree86. You should do that, however, only if you want to have some
    special changes to the standard distribution, as you will need a lot of
    CPU time and disk space to do this. If you only want to change the
    configuration of a server, you should use the Link Kit, as this is much
    easier to handle and will not need that much resources by far.

    For adding drivers to the SVGA server you will only need the Link Kit.
    The Link Kit comes with documentation on writing drivers for SVGA. You
    can find it in the directory /usr/X386/lib/Server/VGADriverDoc.

3. Configuring XFree86

    From version 2.0 on all documentation files for XFree86 are combined in
    one tarfile, xf86-doc-2.0.tar.gz. You have to get this file and look
    through those files to configure XFree86 correctly. The following steps
    are intended as a guide to these files.

    There is a very good introduction to configuring XFree86 in the
    README.Config coming with XFree86-2.0. Start there to configure XFree86
    and follow the instructions step by step.

    Furthermore you MUST read the manpages for Xconfig, XFree86 and the
    server you want to set up (one of XF86_SVGA, XF86_Mono, XF86_VGA16,
    XF86_S3, XF86_Mach8, XF86_Mach32 or XF86_8514). Just look in section 1,
    which server supports the chipset of your graphic card and use this.

    If you are not sure, which chipset your graphic card has (this should
    only happen, if you do not have a manual for your card), you can try to
    identify it by running SuperProbe, a graphic hardware detection program
    that comes with XFree86-2.0. You should, however, rely on the
    information of your manuals and not on that of SuperProbe (even if it is
    in most cases correct).

    Note that if SuperProbe does not detect your chipset correctly, the
    XFree86 servers will neither. Note further that SuperProbe detects far
    more hardware than XFree86 servers support.

    There is a list of accelerated graphic cards that are reported to work
    with XFree86-2.0 in the file AccelCards. Look through it to see, whether
    your card is already in the database. While other boards not listed may
    well work, The XFree86 team gives no assurances of that.

    If you were running XS3, you should itake a look at README.XS3, as some 
    things did change while incorporating the XS3 server into XFree86.

    For configuring you will need the following information on your system:

    1. The specifications of your monitor (i.e. which vertical and horizontal
       frequences can it handle and which video bandwidth has it). This is 
       the most important thing of all as you can toast your monitor using 
       incorrect video modes and you will need these specifications to check 
       the modes.
    2. You need the name of the chipset (confer the remarks above). Note
       that there are some companies using "s3" as a synonym for "accelerated"
       chipset, so this is often not true. Please check it out in your
       manuals.
    3. Amount of video memory supplied by your card (this is usually detected
       correctly, but it is better to have the exact number and compare it 
       with the detected)
    4. Which dot-clocks are available for your card, or is your dot-clock 
       programmable. This is the hardest part for the graphic card setup.
       How to obtain these is described in the README.config.
    5. The protocol your mouse uses and the device it is connected to. The 
       available mouse protocols are listed in the Xconfig manpage. The 
       standard names of the mouse devices for Linux are:
       /dev/bmouseatixl for the ATI XL busmouse (NOTE: the ATI GU busmouse
                                is in fact a logitech busmouse)
       /dev/bmouselogitec for the Logitech busmouse (NOTE: this uses the 
                                busmouse protocol, NOT the Logitech protocol)
       /dev/bmousems for the microsoft busmouse
       /dev/ps2aux (or /dev/bmouseps2) for a ps/2 or quickport mouse
       The other supported mice are serial mice and therefore connected
       to one of the serial ports (named /dev/ttyS? or /dev/ttyS?? for Linux).

    So now procede as in README.Config. If your Monitor is not listed in the
    modeDB.txt file, you should try one of the generic modes.  ENSURE THAT
    THE SPECS OF THE MODES ARE WITHIN THE SPECS OF YOUR MONITOR.  If you
    want to tune these modes or to compute a mode of your own, you MUST read
    VideoModes.doc and follow the instructions there.  Before trying a mode,
    compute the specs of this mode and again look if your monitor does
    support it. Here is no further description of computing VideoModes,
    as you should not do this without having read VideoModes.doc.


    WARNING: Do NOT EVER share Xconfig files with people  who do not have
       EXACTLY the same Configuration (i.e. graphic card AND monitor). By
       doing  this you could  toast your  monitor.  It isn't  so hard  to
       figure out modes (that is, for  multisync monitors) and you surely
       shouldn't ever use a mode that you  didn't check by yourself to be
       within your  monitor's specs.  Even if  you have  exactly the same
       setup  you should check      all  modes yourself   before   trying
       them. There are  many people who  run their hardware out of  specs
       which may not damage their hardware but could yours.

3.1 Configuring the keyboard for non-US-layout

    If you do not change the standard settings, the server will start up
    with an US-american keyboard layout regardless which keyboard layout was
    configured for the kernel. If you want to have a different layout, look
    at the xmodmap(1) manpage. There are example Xmodmaps available at
    sunsite.unc.edu:/pub/Linux/X11/misc for several languages and keyboard
    layouts.

4.  tinyX - a XFree86 based package for low memory systems

    If you have not enough memory to run the stock XFree86 distribution, you
    might try to get this package. It is based on XFree86, so the difficult
    parts of the configuration (setting up the Xconfig file) are
    identical. To run it you need at least 4 MB RAM and another 8 MB swap
    space.  There are now several tinyX versions, one for each of the
    different servers supplied by XFree86-2.0. Please read the above
    description of the servers to get the right version of tinyX. These
    packages are named like

        tinyX-YYY-2.0.tar.gz, where YYY denotes the server name (without
                               leading XF86_)

    You can find tinyX on sunsite.unc.edu in the /pub/Linux/X11 hierarchy.
    Please look in your neighbourhood for a Mirror of it (cf. the BBS-list
    that can be found on most linux sites).  You untar it as root from
    /. After this you have to setup a Xconfig file as described in section
    3.  The documentation and READMEs for tinyX as well as most of the
    XFree86-2.0 documentation files can be found in /readmes. Read the
    XFree86 documentation files _before_ setting up a Xconfig file as they
    are required for this.

    The tinyX documentation includes a lot of useful information on memory
    saving techniques. You should follow at least some of these suggestions,
    as running X while swapping constantly is no fun at all :-(.  If you are
    running out of memory your system will lock up completely (in many cases
    the only way out is to turn off power or to make a hard reset - both is
    very dangerous for your filesystem). So read these files before starting
    X so that this does not happen.

    As tinyX does not include all documentation available with XFree86-2.0, 
    you might notice that you are pointed to a file that is not included.
    In this case you must get the rest of the documentation files (and
    perhaps the manpages, too) from any XFree86-2.0 site (cf. 2.). If you 
    have enough disk space for that, this is highly recommended anyway.
	Note that XFree86 specific manpages (as the Server manpages,...)
	are not in the *-man-* but in the *-doc* files.


5.  X - related packages

    There are a lot of packages that are related to X. I mention two here,
    because they have a great influence on the look-and-feel of X.

    - The xview3L5.1.tar.gz package 

      This package is a port of SUN(TM)'s xview3.2 package by Kenneth
      Osterberg to Linux. It includes the xview toolkit, a set of extensions
      to X. It will give you the look-and-feel of the Open Look(TM)
      extension to X (many will know that from open windows from SUN(TM)).

      To install it, untar the tarfile as root in some directory (e.g.
      /usr/src), read the documentation that comes with it (most important
      the README and run the INSTALL script. Note that you need about 25MB
      free disk space to install it completely (with examples). This is
      partly due to the fact, that for some time all files are twice on the
      disk. After running the INSTALL script and removing the xview3L5.1
      directory you will need about 11 MB (including all examples). If you
      do not want to install the examples , you will need about 9 MB. If you
      do not want to compile or program any program that uses xview, you can
      spare another 2.5 MB.

      For running Xview you will need at least 8 MB of RAM, better 16 MB. To
      run xview with XFree86-2.0 you should get the ld.so package version
      1.3 or newer.

    - There is a port of Motif(TM) to Linux.
     
      This is commercial software, so you will have to pay for it. You can
      find an advertisement from Metrolink (the company that provided the
      port to Linux) on tsx-11:/pub/linux/advertisements.

    These packages provide different window managers than the standard twm
    that comes with XFree86. There are several further window managers that
    you can find on sunsite:/pub/Linux/X11/Window-managers.  All these use
    different setups, so you have to read the documentation on the window
    managers to set them up correctly.
    
    There are a lot of programs available for X. Look through the
    /pub/Linux/X11 hierarchy at sunsite.unc.edu or at the usr.X11
    directories of /pub/linux/binaries and /pub/linux/sources at
    tsx-11.mit.edu for many of them.


6.  Compiling Programs that use X

    If you have the source code for a program that uses X11, usually it will
    be shipped with an Imakefile instead of a Makefile. What to do now?
    
    Run "xmkmf" in the directory that containes the Imakefile. If there is a
    hierarchy of directories with Imakefiles, you usually only have to run
    xmkmf in the root directory of that hierachy. You can configure the rest
    by typing make Makefiles. This will build the Makefiles in all
    directories in the hierachy. Then you should run "make depend". Don't be
    afraid if include files like stddef.h, varargs.h, ...  are not found,
    they are gcc proprietary heare files and therefore not in the standard
    include directories (the Imakefiles use makedepend, not gcc -M).  After
    that you can make the program by running make and you can install it
    (usually in /usr/X386/bin) by running "make install", installing of the
    manpages is done by running make "install.man". Of course, before even
    making xmkmf, you should have read the documentation that comes usually
    with such packages.


7.  Programming in X

    If you want to write programs that use the X Window System, you should
    get some books on the X Window System.  Most Subroutines provided by X
    are documented in a manpage (residing in /usr/X386/man/man3), but these
    will not provide enough information on programming in X if you do not
    know some generals about X.
   
    There is a rather complete series on X by O'Reilly, called "The
    definitive Guides to the X Window System", consisting of many volumes
    (you will probably not need all of them). For more information check out
    the O'Reilly and Associates Catalog from anonymous FTP on ftp.ora.com.
    I suggest reading Volume 1, "Xlib Programming Manual", and Volume 4, "X
    Toolkit Intrinsics Programming Manual", if you are serious about writing
    X apps. As it turns out Xt (volume 4) is used for most X applications,
    and you only need low-level Xlib stuff (volume 1) for certain things.

8. Finding information on X on the net.

    For general X questions you should read the FAQ and the Xt-FAQ from the
    comp.windows.x newsgroup (you can achieve them
        from ftp.x.org in the directory /contrib or 
        from rtfm.mit.edu in /pub/usenet_by_hierarchy/comp/windows/x 
    by anonymous ftp). 
    This is the newsgroup for general X questions.

    If you have questions on the XFree86 package and cannot find an answer
    in the documentation files (XFree86, Xconfig, XF86_* manpages or the
    README files in /usr/X386/lib/X11/etc) you may want to post a question
    to a newsgroup. The appropriate newsgroup for that purpose is
    comp.windows.x.i386unix, as this newsgroup is dedicated to the XFree86
    system.  If you have a problem with the server and want to post a
    question to this newsgroup, you should provide enough information for
    those that want to help you. It is no good idea telling: XFree86 is not
    working, what do I have to do? Here some things that should be included
    in all postings that are concerned with server problems: 

      - which Operating System and which release of it are you running
      - which hardware do you have (at least bus type (ISA/EISA/VLB), graphic 
        card (including chipset, video RAM type (D/VRAM), size and speed))
      - a concise decription of the problem
      - a printout of the server startup (you can generate that by
        redirecting the stderr output)
      - the used parts of the Xconfig (It is NOT a good idea to include all
        lines commented out by a leading #, as this then will be the largest
        part of your post and most people will already know the copyright 
        statements :-)

    Furthermore you should say what steps of trouble-shooting you already 
    did (there are some mentioned in the XFree86 documentation files and in 
    the Appendix).

    There are some other newsgroups that cover X related topics:
      comp.windows.x.apps - for X applications
      comp.windows.x.intrinsics - for X intrinsic 
      comp.windows.x.motif - for the Motif(TM) extension to X
      comp.windows.open-look - for OpenLook(TM) and the xview extensions to X

    Note that some of these groups have FAQ lists that are posted regularly
    to the groups. As always with regular postings these can be obtained
    from rtfm.mit.edu via anonymous ftp.

    Please do not post X related questions to _any_ newsgroup of the
    comp.os.linux.* hierarchy. You will get better answers to your questions
    in those newsgroups dedicated to those questions, as nearly all those
    questions are not linux-specific.

Appendix: Some Questions & Answers

Q: I used XS3 up to now, what changed in XFree86-2.0
A: The most important things that changed, are described in the README.XS3
   file coming with XFree86-2.0

Q: Is there support for 16-bit or 24-bit colour modes?
A: No, there is only support for 1-bit, 4-bit and 8-bit colour in the moment.
   The 4-bit server is in addition in an experimental stage, so there
   are bugs and problems using it. Most of the known problems are
   mentioned in the manpage.

Q: I have a Logitech serial mouse but it does not work with the Logitech
   keyword.
A: The Logitech keyword is for older Logitech serial mice, more recent 
   Logitech serial mice use the MouseMan or MicroSoft keyword.
   Logitech serial mice plugged into a ps/2 port use the ps/2 keyword.

Q: My server is unable to find some of the fonts.
A: First check that the directories in the font path in 
   /usr/X386/lib/X11/Xconfig are named correctly and contain fonts. If that
   is the case, running mkfontdir in all of those directories may help you.

Q: I had a normal SVGA card up to now with 1 MB of video RAM. With it
   I could do a virtual resolution of 1152x900 or 1024x1024. Why does
   it not work on my new s3 card?
A: All but the most recent revisions of the s3 chips cannot use a line
   length of 1152, so a length of 1280 is used for this resolution. 
   Furthermore the s3 server needs 1k for the cursor, so a virtual 
   resolution using 1MB will not work.
   NOTE, that you will need some memory on the graphics card for font
   and pixmap caching if you want to get maximum performance from your
   graphic card. So the memory is NOT wasted, but will get you a great
   performance boost. Try running some font or pixmap specific
   mode of x11perf with maximal allowed virtual resolution (e.g. 
   1024x1023) and with 1024x768 and compare the results!
   Recommended resolutions are 1024x768 and 1152x800 for 1MB cards.
   The latter resolution leaves not too much memory to the font cache,
   so you will have a performance loss using large fonts.
   For normal use with fonts <= 18 points it should be OK, though.

Q: I have a s3 card and it does not work properly. The screen gets
   distorted when dragging windows and it frequently locks up.
A: First try to use options nomemaccess or nolinear. If both does not help
   and you have a s3 928, try specifying chipset s3_generic in your 
   Xconfig. If nothing helps, it might be a incompatibility
   problem between your graphic card and your motherboard. Try to see if the
   card works in a different system, if you can get your hands.

Q: I have a Diamond Viper card. Why does it not work?
A: In addition to being a diamond product, this card is based on the
   P9000 chip by Weitek. This chip is not yet supported by XFree86, so
   you have only a chance to get it working with one of the generic 
   servers (i.e. Mono or VGA16). You will have nevertheless the clock
   setting problem that prevents the other diamond cards from working.

Q: Are there some notes on tuning the performance of my X system?
A: Yes there are. They are posted monthly to the comp.windows.x
   newsgroup and can also be found on rtfm.mit.edu in the 
   appropriate subdirectory.

Q: I want to reconfigure my XF86_S3 or XF86_VGA16 server using the LinkKit.
   After editing sited.def and running mkmf, make will not work. 
A: There is a little bug in the Imakefile for the LinkKit. You can either
   change the line 326 in the Imakefile from
   #if XF86SVGAServer || XF86MonoServer
   to
   #if XF86SVGAServer || XF86MonoServer || XF86VGA16Server || XF86S3Server
   or you can configure the XF86_Mono or XF86_SVGA server additionally for 
   building. Then all will work.

Q: I have a SPEA/Video 7 Mercury card. It is 928 based but I cannot
   get it working correctly.
A: The Mercury uses a clock chip that is not yet supported by XFree86.
   So you cannot use it at the moment.

Q: I have a busmouse and am running selection. The server has problems with 
   recognizing the mouse.
A: Selection has some problems with busmice. XFree86 cannot open the mouse 
   device if selection is running on it. So kill selection before staring
   XFree86.

Q: The server dies with the message "Cannot find a free VT".
A: XFree86 needs a free VT to run on. So if you have put a getty process on
   every virtual console in you /etc/inittab, XFree86 will not be able
   to start. I suggest to let /dev/tty8 (for kernel messages) and /dev/tty7
   (for XFree86) free of a getty process.

------------------------------------------------------------------------------
Helmut Geyer                              geyer@kalliope.iwr.uni-heidelberg.de