README for XFree86 1.1 ---------------------- FEATURES -------- XFree86 is an enhanced version of X386 1.2, which was distributed with X11R5. This release consists of many bug fixes, speed improvements, and other enhancements. Here are the highlights of the enhancements: 1) The SpeedUp package from Glenn Lai is an integral part of XFree86, selectable at run-time via the Xconfig file. Some SpeedUps require an ET4000 based SVGA, and others require a virtual screen width of 1024. The SpeedUps suitable to the configuration are selected by default. 2) The fX386 packages from Jim Tsillas are included as the default operating mode if SpeedUp is not selected. This mode is now equivalent in performance to X386 1.1b (X11R4). 3) Support for LOCALCONN, compile-time selectable for server, clients, or both. This support is for both SVR3.2 and SVR4. For SVR4.0.4 with the 'Advanced Compatibility Package', local connections from SCO XSight/ODT clients are supported. 4) Support for the newer ET4000-based SVGAs which have high clocks and reported incorrect clock values with the standard version. This support is automatic and does not require any Xconfig options. Note that the Diamond SpeedStar 24 (as opposed to the 24X) is an ET4000 board that is NOT compatible with XFree86. 5) A command line option has been added to allow the selection of which VT the server will use, rather than having it try to find one on its own. 6) Integrated support for 386BSD, Mach386, and Linux (previous versions required a separate patch kit). 7) The server's configuration file (Xconfig) can how be specified with a command line option or an environment variable in addition to the standard methods. 8) A monochrome version of the server which will run on generic VGA cards is now included. This server uses just 64k of the memory on the VGA, and hence is limited to a virtual screen of approx. 800x600. 9) Drivers for ATI and Trident TVGA8900C SVGA chipsets. The ATI 8514/A chipset is NOT supported. Refer to the files README.ati and README.trident (in /usr/X386/lib/X11/etc) for details about the ATI and Trident drivers. 10) New configuration method which allows the server's drivers and font renderers to be reconfigured from both source and binary distributions. NOTE: XFree86 no longer has support for FAS on SVR4. Use SAS instead. Also included are a tutorial on monitor timing by Bob Crosson, and the current X386 mode database and a sample xdm configuration by David Wexelblat. Some of the bug fixes and changes are: 1) support for gcc2.? and selectable 486/386 optimisation. The building of SVR4 shared libraries is also supported with gcc-2.?. 2) Server now traps and exits cleanly if unexpected signals are received (a core is still generated for debugging). There is an Xconfig option to disable this trapping. 3) VT switching is more robust. The server will no longer crash nor will the screen get corrupted as a result of starting or exiting clients while switched away. Also, the screensaver is turned off when switching back so you don't return to a blank screen. These changes also ensure that xdm shuts down cleanly. 4) A bug that prevented changing mouse acceleration has been fixed. 5) Mark Snitily's polygon fill fix. 6) A cfb bitblt bank switching bug has been fixed. 7) The use of xdm with xqueue under SVR4 has been fixed. 8) Support for compressed bitmap fonts has been added (Thomas Eberhardt's code from the contrib directory on export.lcs.mit.edu). 9) Type1 Font code from MIT contrib tape has been included, and is compile-time selectable. There are contributed Type1 fonts in the contrib directory on export.lcs.mit.edu. 10) The maximum number of server connections is now correctly determined for SVR4 by making use of getrlimit(). 11) A bug in operation of XForceScreenSaver(ScreenSaverReset) has been fixed. 12) The default pointer button mapping has been fixed. 13) xterm no longer tries to open /dev/tty[psr]?? for SVR4. This speeds up the startup time for xterm, as well as keeping it from using the wrong pty's on SVR4.0.4. 14) xconsole fixes for /dev/osm (SVR4 and some SVR3.2) 15) Altered bsdinst.sh to run 'mcs -d' when stripping binaries, and to do the install with /usr/ucb/install (for SVR4). 16) Use of libucb.a eliminated. The ndbm routines are taken from sdbm (from the MIT contrib tape). 17) Bugs in some fill and stipple routines which showed up with virtual width!=1024 have been fixed. 18) A bug with XdmAuth which caused strange problems with some hardware has been fixed. 19) The xman scroll bug has been fixed. 20) The default keymap has been modified so that the key will behave as both Alt and Meta keys. Known Bugs: 1) There are some problems with some of the 'xset fp' operations (in particular 'xset fp rehash'). These seem to be caused by memory allocation/deallocation problems in the server's font code. 2) The Monochrome server has a number of graphics bugs. This server is still in the early stages of development. BUILDING XFree86 ---------------- 0. If you are using gcc-2.0 or gcc-2.1, get gcc-2.2.2. If you are using gcc-2.1 with SVR4, apply the following patch to 'fixinc.svr4', and rerun it. This problem is fixed in gcc-2.2. (gcc-2 is available from prep.ai.mit.edu and other sites archiving GNU source.) *** ORIG/fixinc.svr4 Fri Apr 17 22:18:06 1992 --- fixinc.svr4 Fri Apr 17 22:54:26 1992 *************** *** 156,162 **** s/#system(\([^)]*\))/defined(__\1__)/g s/#cpu(\([^)]*\))/defined(__\1__)/g /#[a-z]*if.*[ (]m68k/ s/\([^_]\)m68k/\1__m68k__/g - /#[a-z]*if.*[ (]__i386/ s/__i386/__i386__/g /#[a-z]*if.*[ (]i386/ s/\([^_]\)i386/\1__i386__/g /#[a-z]*if.*[ (]sparc/ s/\([^_]\)sparc/\1__sparc__/g /#[a-z]*if.*[ (]mc68000/ s/\([^_]\)mc68000/\1__mc68000__/g --- 156,161 ---- 1. You need the following: - about 60-70MB of free disk space is required for building XFree86. An additional 20-30MB is required to install the built binaries, - MIT X11R5 distribution with fixes 01-17 applied. If you don't want to build PEX and/or want to minimise disk usage, you can remove some or all of the following directories: mit/doc mit/hardcopy mit/demos/auto_box mit/extensions/lib/PEX mit/demos/beach_ball mit/extensions/server/PEX mit/demos/gpc mit/extensions/test/InsPEX mit/fonts/PEX mit/lib/CLX mit/server/ddx/dec mit/server/ddx/ibm mit/server/ddx/macII mit/server/ddx/mips mit/server/ddx/omron mit/server/ddx/snf mit/server/ddx/sun mit/server/ddx/tek mit/util/PEX The following large fonts in mit/fonts/bdf/misc can also be removed: k14.bdf hang*.bdf jiskan*.bdf - XFree86-1.1.diff.Z, XFree86-1.1.sh, sdbm.tar.Z (for SVR4 and some SVR3), and optionally Type1.tar.Z, Type1.patch1.Z, Type1.patch2.Z - gcc 2.? is *strongly* recommended for building server, libs, clients. In most cases it generates faster code than the standard compiler, and for those with a 486, its -m486 flag can provide an additional 5% improvement. - For SVR4 it is recommended that you increase the UFSNINODE kernel parameter to about 650 before attempting to build the distribution. While doing this, you may also want to change some of the parameters mentioned in the USING AND CONFIGURING section below. 2. If you need to use libsdbm.a, extract sdbm.tar.Z somewhere and build it. Install libsdbm.a in a directory your ld searches. (You could use /usr/local/lib, and with SVR4 add it to your LD_LIBRARY_PATH.) Install sdbm.h in /usr/include. ISC no longer requires a separate dbm library. It works fine with the existing dbm library (libdbm.a). Set HasNdbm to NO in site.def. 3. For SVR4 put /usr/X386/lib in your LD_RUN_PATH (and export it). 4. Go to the directory containing your 'mit' directory, and run: sh XFree86-1.1.sh This script makes some changes to the directory tree, and MUST be run before applying the patches. The patches can then be applied with: patch -p < XFree86-1.1.diff If you are installing in an unmodified tree there shouldn't be any problems. Check for any patch rejections and resolve them. If you've modified some files (e.g. x386.cf, site.def) you should rename them, and restore the standard versions before patching. If you don't have backups of the originals, individual files can be easily obtained from the /pub/R5untarred directory on export.lcs.mit.edu. If you are patching a tree that you've previously used, make sure you run 'make clean' from the 'mit' directory before applying the diffs. 5. If you want to include the Type1 font code, extract Type1.tar.Z in mit/fonts/lib/font, and then apply the Type1 patches (Some contributed fonts can be found in /pub/R5untarred/contrib/fonts/scaled/Type1 and /pub/R5untarred/contrib/fonts/Utopia on export.lcs.mit.edu.) 6. Have a look at config/site.def. Set the various parameters to suit your configuration. If it is your first build, you should set BuildFonts, InstallXdmConfig, InstallXinitConfig to YES (as well as InstallFSConfig if you are building the Font Server). If you have installed Type1.tar.Z, set BuildType1 to YES. If you want to build the large fonts in mit/fonts/bdf/misc set BuildLargeMiscFonts to YES. If you want to build the 100dpi fonts as well as the 75dpi fonts set Build100Dpi to YES. Make sure both HasNdbm and HasSdbm are set correctly for the [n]dbm library you are using. To build the colour server (X386) set X386Server to YES. To build the monochrome server (X386mono) set X386MonoServer to YES. If both are set, then both servers will be built. The drivers and font renderers you wish to include in the server are also selected in site.def. The choice of font renderers is made by setting the value of FontRenderers. Setting this in site.def overrides the BuildType1 parameter. The drivers used for the 256 colour server are set by the X386Vga256Drivers parameter. This should be a list of the driver names (in lower case). The ordering determines the order in which the drivers are probed at startup. The default is to include all supplied drivers. The drivers for the monochrome server are set with the X386Vga2Drivers parameter. The `generic' driver should always be last on the list because its probe will succeed for any VGA card. Note: a) it is not possible to have both the monochrome and colour drivers in the same server executable. b) When building both servers, the colour version is linked to /usr/X386/bin/X, and is thus the default server. To change this, remove and redirect the link after installing. 7. The server and client connection types to use should be chosen carefully. For SVR4, the default for the server is to use UNIXCONN (Unix-domain sockets) and the STREAMS based LOCALCONN for local connections, as well as TCPCONN. The default for SVR4 clients is UNIXCONN and TCPCONN. If you want to add LOCALCONN for clients, set ClientLocalConnSysv4 in config/site.def. For SVR3.2, the default for both the server and clients is to use the STREAMS based LOCALCONN. If HasSockets is set, TCPCONN is also used. For Esix 3.2D (and perhaps others if you don't have TCP/IP installed), HasSockets should not be set. (The Esix 3.2D implementation of TCP/IP is not compatible with most networking code.) - If you need to have the X386 server work with clients compiled with vendor-supplied libraries, or with older versions of X386, you should define the SERVER_LOCALCONN flag (this is done by default for SYSVs). - If you need to have clients built with XFree86 libraries work with a vendor-supplied server, define CLIENTS_LOCALCONN (this is the default for SVR3.2, and can be set for SVR4 by defining ClientLocalConnSysv4). For SVR4, CLIENTS_LOCALCONN is not advised unless your application truly calls for it. The UNIX-domain socket normally used is faster than the STREAMS-pipe used by LOCALCONN. For 386BSD, Mach386 and Linux, the default for both server and clients is to use UNIXCONN and TCPCONN. LOCALCONN is not applicable to these systems. If you want to change the setting of ConnectionFlags directly, add something like the following to the AfterVendorCF section of config/site.def: #undef ConnectionFlags #define ConnectionFlags YOUR_CHOICE_OF_FLAGS 8. Go the 'mit' directory. For SVR4, run: make World BOOTSTRAPCFLAGS='-DSVR4 -DSYSV386' > World.Log 2>&1 & For 386BSD, Mach386 and Linux, run: make World BOOTSTRAPCFLAGS= > World.Log 2>&1 & For SVR3, run: make World BOOTSTRAPCFLAGS='-DSYSV -DSYSV386 -DVENDOR' > World.Log 2>&1 & where VENDOR is one of: ISC, ESIX, ATT, SCO. For ISC 3.0, run: make World BOOTSTRAPCFLAGS='-DSYSV -DSYSV386 -DISC -DISC30' > \ World.Log 2>&1 & Note for ISC 2.2: A limit in the hash table with ISC's 'make' will cause it to die in the middle of mit/lib/X. You have the option of picking up the latest GNU make (which may or may not work) or of eliminating the list of dependencies from the Makefile. (If you proceed with ISC's make, it might be advisable to add 'WORLDOPTS=' to your make World command line so that it won't try and continue after the problems in mit/lib/X.) To eliminate the dependency list go to the mit/lib/X directory and execute: make Makefile Then return to the mit directory and execute: make >> World.Log 2>&1 & 9. If all goes well, that'll finish successfully in anything from two to eight hours depending on your CPU/RAM/OS/compiler/disks. You should check World.Log to see if there were any problems. If there weren't any then you can do a 'make install' and a 'make install.man'. Make sure you have enough space in /usr/X386 for the install to succeed. If you want to install on a filesystem other than /usr, make a symbolic link to /usr/X386 before installing. To install the binary Link Kit (in /usr/X386/lib/Server), run: make install.linkkit 10. If you have problems building on ISC 2.2, you can contact Jim Tsillas at . USING AND CONFIGURING XFree86 ----------------------------- 1. Add /usr/X386/bin to your PATH and /usr/X386/man to your MANPATH. For SVR4, you may also want to add /usr/X386/lib to your LD_LIBRARY_PATH, but this is not required for running clients providing they were built with LD_RUN_PATH set correctly. If you are going to be building clients it is a good idea to have /usr/X386/lib in LD_RUN_PATH. 2. Check through the /usr/X386/lib/X11/etc/x386install script (not required for Mach386 and Linux). If it looks OK for your system, run it. For SVR4, you may want to increase some kernel parameters (either by running idtune, or editing /etc/conf/cf.d/stune, and rebuilding the kernel with idbuild): [HS]FNOLIM hard/soft limit for number of open files MAXUP max number of processes per user ARG_MAX max length of an arg list 3. Set up an Xconfig file. The default location for this file is in /usr/X386/lib/X11. There is a sample file installed in that directory called Xconfig.sample, and this should be used as a starting point. 4. Decide which mouse driver to use. For SVR4 the best choice depends on which version you are using. If you have a bus mouse then Xqueue is probably the only option. For a serial mouse the options are as follows: Esix 4.0.3 Xqueue often works. It is possible to use the standard asy driver directly, but the mouse operation is "jerky". Microport SVR4 [34].1 Xqueue works fine, and the asy driver can also be used directly giving smooth mouse operation. Any SVR3.2 Use the asy driver directly To use Xqueue, uncomment the Xqueue line in your Xconfig file, and comment out the Keyboard entry and the mouse related lines. You must have the mouse driver package installed, and must run mouseadmin to set it up for your mouse. If mouseadmin won't work try doing 'touch /dev/gmse' before running it. (Note that mouseadmin will need to be rerun after rebuilding a kernel unless you add an appropriate entry to /etc/conf/node.d/gmse.) The default Xconfig file is set up for using the asy driver directly. All that needs to be done is to replace the line: Logitech "/dev/tty00" with one that suits your mouse (see the X386 man entry for the available options). If you have problems with both Xqueue and your standard asy driver with SVR4, then you should install SAS. When using SAS, set up Xconfig as you would for the standard driver. SAS is available from rapfast.Unibase.SK.CA, and there is also a copy on ftp.physics.su.oz.au. Note: rapfast is connected to the net via a SLIP line, so it's probably quicker to get it from somewhere else. When using SAS for a serial mouse, you will get smoother operation if you change EVENT_TIME from 80 to 30 in sas.h. A couple of details which aren't spelled out in the SAS README are: - An example of the line you should add to /etc/ap/chan.ap is: MAJOR 0 255 ldterm ttcompat where MAJOR is replaced by the major number used for SAS devices. To determine what that is, check /etc/conf/cf.d/mdevice after rebuilding the kernel. The major number is the sixth field in the line starting with 'sas'. This file must be updated before rebooting with the new kernel. - The installation instructions omit the following: 3a) Disable the asy driver by either running 'kconfig' or editing /etc/conf/sdevice.d/asy. 3b) Rebuild the kernel by running /etc/conf/bin/idbuild 5. Check that the FontPath in your Xconfig is set correctly. If you have installed Type1 fonts, select the path that includes them. If you are using 100dpi fonts the default path should be modified accordingly. If you are not using Speedo fonts, remove that directory from the font path. Make sure you have a fonts.scale file in any directory containing Type1 or Speedo fonts. When you run mkfontdir in that directory, these entries will be added to the fonts.dir file. 6. The server now supports compressed pcf fonts. If you compress any of these fonts, you must rerun mkfontdir in the directories containing them. 7. Make sure there are appropriate ModeDB entries in your Xconfig file. For details about this, read through the XConfig.Notes and modeDB.txt files in /usr/X386/lib/X11/etc. 8. The default Xconfig is set up to make use of SpeedUp. If your SVGA card is not based on the ET4000, or if your virtual width is not 1024, then some of the SpeedUps will be automatically disabled (with a warning message written on the console). Most of the major SpeedUps require the ET4000 but are no longer restricted to a virtual width of 1024. 9. If you want to use xdm with SVR4, extract the files from the shar file in /usr/X386/lib/X11/etc/XdmConf.svr4 into a temporary directory. The README file tells where the individual files should be installed. Be sure to read through each file and make any site-specific changes that you need. NOTE: Some SVR4 versions (one example is Esix 4.0.3) have a default inittab which runs 'vtgetty' on the console. This does not work well when starting xdm at boot time. The problem is that when you logout from a vtgetty session it wants to close all the VTs -- including the one xdm is using for the server. It is recommended that you use 'getty'. If you change /etc/inittab, remember to also change /etc/conf/cf.d/init.base or you will lose the changes when you next rebuild the kernel. 10. If you want to change the number of VTs available on SVR4, just edit the file /etc/default/workstations and change the number there. The device nodes will be created/deleted next time you reboot. RECONFIGURING THE SERVER (SOURCE DISTRIBUTION) ---------------------------------------------- To build the monochrome server after building the colour server (or vice versa) do the following: 1. Change the settings of X386Server and X386MonoServer in site.def to what you want, and update the driver selection if required. 2. From mit/config, run: make Makefiles 3. From mit/server, run: make Makefile make Makefiles make depend make To relink the server with a different set of drivers and/or font renderers do the following: 1. Make sure the source for the drivers/renderers is in the correct place. Driver source should be in subdir of mit/server/ddx/x386/vga256/drivers for colour drivers and mit/server/ddx/x386/vga2/drivers for mono drivers. Font renderer source should be in a subdir of mit/fonts/lib/font. 2. Modify site.def to specify which drivers you wish to include. 3. From mit/server, run: make reloadX386 or make reloadX386mono This will automatically rebuild everything required and relink the server. RECONFIGURING THE SERVER (BINARY DISTRIBUTION) ---------------------------------------------- If you have installed the server Binary Link Kit, it is possible to reconfigure the drivers and font renderers in the server. To do this, go to the configuration directory (/usr/X386/lib/Server) and do the following: 0. If you are using a Binary Link Kit distributed as part of a binary distribution (for SYSV), you may need to install libsdbm.a. For systems which don't use gcc as their native C compiler, you may also need to install libgcc.a. Refer to the README supplied with the binary distribution you are using for more details. 1. Edit the site.def file to define which servers you want to build, and the drivers and font renderers you want included. - To build the 256 colour server, set X386Server to YES. - To build the monochrome server, set X386MonoServer to YES. - Set X386Vga256Drivers to the list of drivers you want to include in the 256 colour server. - Set X386Vga2Drivers to the list of drivers you want to include in the monochrome server. - Set FontRenderers to the list of font renderers you want to include in the server. Note: the ordering of drivers determines the order the probing is done in. The 'generic' driver should be the last one included in the monochrome server because its probe always succeeds. 2. If you are including a driver that it not part of the standard distribution, put the .o file in drivers/vga256/ if it is for the 256 colour server, or in drivers/vga2/ if it is for the monochrome server. If you are adding an additional font renderer, put the library in renderers/. 3. To build the Makefile, run ./mkmf 4. Run 'make' to link the server(s) as configured. 5. Run 'make install' to install the new server(s). 6. Run 'make clean' to remove the files that were created by this procedure. 7. It is possible to see which drivers are included in the server by running it with the '-showconfig' flag. THE MONOCHROME SERVER --------------------- The monochrome server (X386mono) includes a driver for generic VGA cards. This driver does not make any assumptions about the VGA card being used. This means that the physical screen size is limited to 640x480. It is however possible to choose a virtual screen size within the limits of the 64kB bank. A common choice would be 800x600. There are other drivers (only ET4000 and Trident have been tested at this stage) included with the mono server, and these make it possible to use higher physical resolutions providing you have a suitable card. The limit on the virtual resolution imposed by the 64kB bank size still applies. startx has been modified so that the monochrome server can be easily started by running: startx -- X386mono [server options] ... BUILDING NON-CORE CLIENTS WITH SVR4 ----------------------------------- 1. A lot of clients (even some which have explicit SVR4 support) require -DSYSV when building under SVR4. This will not be set when using the default x386.cf and site.def. A quick fix is to add something like the following to the client's Imakefile: #if SystemV4 DEFINES = -DSYSV OTHER_CLIENT_DEPENDENT_DEFINES #endif The best solution is to modify the code so it compiles correctly without -DSYSV. 2. The default compiler options include '-ansi' for gcc, and '-Xc' for cc. A consequence of this is __STDC__ gets #defined to '1'. There are a number of functions which will not have prototypes declared unless either __STDC__ is not defined, or __STDC__ == 0 || defined(_POSIX_SOURCE) || defined(_XOPEN_SOURCE) Possible solutions are to change the definition of ANSICCOPTIONS by adding a line to the Imakefile, or to add the required prototypes to the source. 3. A lot of clients make use of BSD functions like bcopy(), etc. The default configuration files are set up to link with libXbsd.a which contains emulation for bcopy(), bzero(), bcmp(), ffs(), random(), seed(). ffs() is not required (it is already in libnsl.so), and a better way of providing the 'b' functions is to include in source files that call them. Xfuncs.h provides macro definitions for these in terms of the SYSV 'mem' functions. If you require more efficient versions of random(), seed() you should supply your own macro definitions. If you are linking with a vendor supplied library which calls some of these functions, then you should link with libXbsd.a If you want to change this default, you can edit your x386.cf file. If you want to change the behaviour on a per client basis, you can add a line to the clients Imakefile which redefines XBSDLIB. To eliminate the use of that library use something like: XBSDLIB = If you find you need some other BSD functions, you could link with libucb.a by using something like: XBSDLIB = -lc -L/usr/ucblib -lucb WARNING: be *very* careful blindly linking with libucb.a. SYSTEMS XFree86 HAS BEEN TESTED ON ---------------------------------- Esix 4.0.3A, 4.0.4 Microport SVR4 [34].1 Dell SVR4 UHC SVR4.0 version 2.0 Consensys SVR4 MST SVR4 ISC SVR4 AT&T SVR4 Interactive SVR3 2.2, 3.0 386BSD 0.1 Mach 386 Linux CREDITS ------- XFree86 was originally put together by: David Dawes Glenn Lai Jim Tsillas David Wexelblat 386BSD support by: Amancio Hasty Jr Rich Murphey Original 386BSD port by: Pace Willison Mach 386 support by: Robert Baron Linux support by: Orest Zborowski ATI driver contributed by: Rik Faith Trident driver contributed by: Alan Hourihane X386 1.2, and moral support from: Thomas Roell Mark Snitily Other contributors: Bob Crosson Thomas Eberhardt and an entire horde of beta-testers around the world! CONTACT INFORMATION ------------------- Ongoing development planning and support is coordinated by the XFree86 Core Team. At this time the Core Team consists of (in alphabetical order): Robert Baron David Dawes Glenn Lai Rich Murphey Jim Tsillas David Wexelblat Orest Zborowski e-mail sent to will reach all of us. 26 September 1992 $Header: /home/x_cvs/mit/server/ddx/x386/README,v 1.43 1992/09/29 15:34:00 dawes Exp $