New or changed items in this versions are marked with a star '*' in front of the number.
LATEST.OS2
        file.
Also some facilities might not be present, such as background images, PEX, XIE, DGA, or other X extensions.
README and README.OS2 are the most
        important for the first time. Also read files that refer to your
        video hardware (such as README.S3, for instance).
Please avoid cross-posting to other groups, this won't speed up answers, and usually annoys people who pay for their news and have broken software which does not recognize crossposts.
Many people who have been using the last version(s) of XFree86/OS2 will also listen in the mentioned newsgroups, and will be helpful.
Please choose a meaningful subject, preferably containing the word "XFree86" or "XFreeOS2" in the line.
error.log file
        xf86log.os2 file
        popuplog.os2 file
        XConfig file
        CONFIG.SYS file
        CMD.EXE) the following command:startx 2>error.logxf86log.os2 file will be *sometimes* produced in the
          root directory of your boot partition. In many cases,
          it is not present or empty.
        popuplog.os2 file resides, if it exists, in the root directory
          of the boot partition. If you find one, delete it, and create the
          error.log file again (see above). If there is a new one then, it
          is from the current run.
        Your mileage on book recommendations may vary, of course, and there is much more stuff in the shelves.
The /XFree86/lib/X11/doc/README file lists supported video hardware.
If you want to work on support for a new server actively, please send a request to
XFree86@XFree86.org. But be warned in advance: the emphasis is on active participation, and the core people there carefully check if this is really the case, and not one of the numerous requests to get access to the source code (which typically remain unanswered).README.OS2 as you were
        supposed to. This driver is in /XFree86/lib/xf86sup.sys and needs
        to be added as a DEVICE in CONFIG.SYS. XFree86/OS2 won't work without
        it.
        You have probably read my EDM/2 article "32 bit I/O at Warp Speed" and
        have installed the FASTIO.SYS driver. The XF86SUP.SYS driver is
        a superset of this. Remove FASTIO.SYS from your CONFIG.SYS; you won't
        need it anymore, XF86SUP.SYS will take over all the functions.
README.OS2 says
        you must get and install EMXRT.ZIP. A suitable EMXRT.ZIP should be
        in the directory where the X33*.zip files are.
EMX.DLL still left
        in your LIBPATH. We make it even easy for you as we tell you where it
        is: in X:\foo\bar\emx.dll. Remove this file (read the EMX instructions on
        how to do this). If you still get this
        error message, now with a different directory, you should seriously
        consider to clean up your disk to get rid of the various instances of
        outdated code.
CONFIG.SYS? If so, analyze the error
        messages that checkinstall tells you. Usually it is right with its
        comments!
XFWARN... denotes a warning. It is not fatal
        but you should be aware that this can point out a problem.
checkinstall will only
	find the worst problems. Check other questions in this file to
	isolate the problem.
For Warp 3, fixpack 5 contains some recommended fixes. You might consider to install at least this one.
In the future, you might be forced to install Fixpack 17 or later (or get Warp 4), because this has certain support which becomes mandatory in the future. Attention: it was recently found that FP26 may break XFree86 support. If you have this, you should return to an older fixpack (e.g. FP22).
And yes: fixpacks are cumulative, i.e. a FP with a higher number contains all fixes of the ones with a lower number.
XF86SUP.SYS driver of 3.2
        has a specific addition which is only available with kernels of FP17
        and newer (including Warp 4). In normal XFree86/OS2, you don't 
	need this feature yet. Ignore this message. On the other hand, you
	might consider installing a new fixpack some day.
PKUNZIP? Or did you use the zip function
        of Object Desktop (which doesn't work either)?
        Or did you unpack onto a FAT partition?
        And did you read what the docs say about this?
EMX.DLL in your system, or that
        XF86SUP.SYS and OS/2 got severely confused. I have seen this twice
        since EMX.DLL was up-to-date; in both cases some other effects brought
        me to the conclusion that a reboot would be the best solution.
startx.
        This will display a number of messages for a short time. If something
        goes wrong, you will likely see it there. To get a permanent
        version of these messages, simply redirect them into a file 'error.log'
        by starting the system in the following way:startx 2>error.logREADME.OS2 file. It is located at
        \XFree86\lib\X11\XConfig. This file is named XF86Config on Unix
        systems, and may be located in various other places there. It MUST be
        in the specified place in XFree86/OS2, in contrast to Unix, though.
        This file is a text file, and in some cases you MUST edit things
        there (see below elsehere).
CONFIG.SYS which works with OS/2").
        No. There is no free lunch. The cards database lists a few hundred
        boards with several options each and there are many monitors as well,
        so there are countless combinations of XConfig files. You must go
        through the xf86config configuration program for yourself - everyone
        else had to do this as well; so don't ask for this.
xmodmap).
        In XFree86/OS2-3.2, this works now.
None of the above and you
        will be offered a menu that gives you standard national support. If this
        is not sufficient, \XFree86\lib\X11\xkb\* offers the source files
        to create a totally private setup. Check the official X11 documentation.
        You can still use xmodmap as well.
XConfig
        file. For many videocards, the file contains option lines in the
        Device section which are commented out (with a # symbol) by
        default. These options are named no_linear, nomemaccess ,
        noaccel, or even totally different. Video cards are often different
        even when coming from the same manufacturer and having the same brand
        name, but they aren't (some manufacturers are notorious for changing
        the horses at full speed while the race is going on). You should try
        out options that are listed in this section and use the one which
        works for you. Also consult the README.yourservername (e.g. README.S3)
        if it exists for specific hints.
CTRL-ALT-BACKSPACE keys.
CTRL-ALT-KEYPAD+ and CTRL-ALT-KEYPAD-. This does
        not neccessarily mean that there ARE other resolutions. With 1MB of
        video RAM, you cannot have more than 1024x768x8, for instance you
        have not enough video RAM for 1280x1024x8. The X server calculates
        the allowed resolutions from the available Clocks, the video RAM,
        the monitor limits, and the available mode lines. This means, if you
        have a standard-VGA 14" monitor for 640x480 @ 70Hz, the xserver wcould
        refuse to offer you 1024x768, because it would result in sync
        frequencies beyond the limits of the monitor. The X server is
        conservative here, so it might be still possible to tune the
        frequencies to the limits of the monitor manually (see Q 2.23).
Modeline statements in the XConfig
        file. By default, the XConfig file has the standard VESA resolutions.
        For a non-standard resolution, you must calculate the 8 numbers in the
        modeline manually. Get the file
        ftp://set.gmd.de/pub/misc/XFree86OS2/fixes/videomod.zip for a documentation
        for this.
xvidtune which allows
        to shift and stretch the X screen. This will produce a new mode line
        which you manually have to add to the XConfig file in the place of the old
        misaligned one. BTW: This program usually won't work with a LCD
        display (see also Q 2.22).
Clocks and
        VideoRam lines correctly, and correct them if necessary.
X -probeonly, please read what the program tells you. Some other
        cards, for instance SVGA cards have fixed frequencies, you must run
        this. Xf86config has been changed to call the correct X server, but
        this might not work in all cases. In this case, run it from a CMD
        window manually by:\XFree86\bin\XF86_yourserver.exe -probeonly | grep "Clocks"XConfig file.
        Note: this line shows that you need the grep program (see also
        Q 2.28).
xf86config calls the grep utility, which you don't
        have installed. Get /os2/unix/grep20.zip from hobbes.nmsu.edu (or
        elsewhere). Well, this is the last clue that X11 came from Unix; there
        are a few other tools you might need. /os2/unix/gnu*.zip should have
        most things you'd encounter.
Screen, subsection Display of the
        XConfig file, there is the line Modes
        which lists all the resolutions that can be switched to with
        CTRL-ALT-KEYPAD+ or CTRL-ALT-KEYPAD-. Reorder this line with a text editor.
        Attention: there are many of these sections, for SVGA, Mono, Accel,
        AND for your video card AND for different numbers of colors.
-bpp 16 or -bpp 24. This can
        be accomplished by passing this option to the startx command asstartx -- -bpp 16error.log file.
FontPath lines in the XConfig
        file. You must disable (with a comment # at the beginning of the line) all
        FontPath lines for font packages you haven't installed. Xf86config
        will now do this by default during install, but if you add fonts
        later, you need to edit XConfig manually.
        BTW: it is not sufficient that just the directory is present.
Fixed is an alias, which is associated with some font in the
        fonts.alias file in the directory /XFree86/lib/X11/fonts/misc. The
        font is then associated with a file in the fonts.dir file in the
        same place.
FontPath
        line in the XConfig file.
fonts.dir file containing the
        mapping between a file name and the 14-part font specifier (see
        /XFree86/lib/X11/fonts/*/fonts.dir for all fonts in \PSFONTS.
Watchcat
        (or any program which uses the popup mechanism in OS/2) is invoked,
        the current palette is not saved. Screen corruption may also occur.
        This will only affect pixel depths where a palette is used (4bpp and
        8bpp).
X11ROOT:\XFree86\lib\X11, where X11ROOT is an
        environment variable which contains the drive letter the directory
        tree is located. The common places like /usr/X11, /usr/X11R6,
        /usr/XFree86, /etc which are used for XFree86 in various Unix
        flavors, are not supported to avoid the mess they have caused in
        the past.
        It is also there where you should put your Xconfig file, the color database (rgb.txt),
        the host authorization files (X0.hosts), and various other files.
stderr gets redirected to a file
        called xf86os2.log. You can find the rest of the server messages
        there.
TMP must reside on HPFS. BTW: did you run "checkupdate"?
Warning: process PID=????? is accessing
        /dev/fastio$, right? This is an intentional notification that some
        process uses the fastio device to perform access to I/O ports. It is
        also intentional that this message cannot be disabled. As long as the
        PID is the process ID of the X server, everything is okay. If the PID
        belongs to another, unknown process, you should seriously ask the
        author of the program what he/she is doing with your hardware.
Part of the problem is that clients started in xinitrc.cmd remain under PM control (i.e. its parent is PM, not xinit, as intended), so when X goes down, it doesn't destroy these clients with it.
        Currently the following methods appear to work: pop up the window list
        (CTRL-ESC) and close the xinitrc.cmd process. If this does not help,
        close the other remaining X processes in the same way. Alternatively
        to the close function of the window list, a process kill program
        (killem, killit, pmkill, etc) or Watchcat should also work.
XF86SUP.SYS from CONFIG.SYS, and if you like,
           also the environment variables that were set during installation.
           Attention: some of them are necessary for proper TCP/IP networking.
        \XFree86.
        FontPath keyword in double
        quotes (").
xterm cannot connect
        to the server. The real reason is probably hidden somewhere else in
        the XConfig file, or some other setup problem (e.g.
	network configuration).
EMXOPT= -rc
	in my settings?
-r<driveletter> does not work with XFree86/OS2.
	Use the TVFS.IFS (Toronto Virtual File System, available via FTP)
	to workaround the drive letter problem.
EMXOPT=-t in my config.sys, and XFree86/OS2 does
	not work.
-t option is incompatible with XFree86/OS2. Since
	XFree86/OS2 needs a HPFS file system anyway, consider installing the
	stuff you need this option for on a HPFS disk as well. Or decide
	what you want: old FAT-stuff or XFree86.
The ugly thing with any dynamic IP address is obvious with any software which wants to connect *to* your host. Normally, it is *you* who initiates a connection, e.g. with your WWW browser, and this is no problem. The problem is that remote hosts must be able to find your host (resp. your X server). There is no solution, except to assign the DISPLAY variable as dynamic as the IP address. Needs some tweaking of the startxx.cmd script.
Try to get a static IP address if possible (if necessary, by begging, bribing, or threatening :-)).
"nolinear"
	or "nomemaccess" to the "Device" section of the XConfig file, or
	locate the video memory address (some DOS utility from the 
	diagnostic/driver disk coming with the video card might show it)
	and enter its hex address as "MemBase 0x12345678" to the 
	"Device" section.
xvidtune won't work with
        PMX or Exceed, because it uses a specific XFree86 extension of the
        X server.
\TCPIP\DLL and \TCPIP\BIN which cause name clashes and obscure crashes
        of XFree86 X clients, so to run XFree86 with an installed PMX, you
        must have \XFree86\bin before \TCPIP\BIN in your PATH, and
        \XFree86\lib before \TCPIP\DLL. Read about BEGINLIBPATH in your
        OS/2 command reference manual.
        
        You should run the PMX server on display :0 and the
        XFree86 one on display :1 (attention: the startx.cmd has this coded
        to :0 by default).
xhost +remotesystemnamestartx.cmd file, or add it to the X0.hosts file). You must tell the
        remote clients to use the OS/2 X server as a display by starting them
        with the standard -display option, e.g.xterm -display os2systemname:0.0DISPLAY=os2systemname:0.0X0.hosts in \XFree86\lib\X11. To enable connections
        from a certain host, add in a line containing inet:hostname to the
        file. For example, your file may look like this:
                inet:foo.edu
                inet:friendly.host.edu
                ..X0 refers to the zero in the display name
        os2systemname:0, i.e. in the case of Q 3.6 this would become a
        X1.hosts then.
-query xdmcphostname for this.
xterm. A symptom may be that they won't work either if you
        redirect console I/O to a COM terminal which should be possible.
        bash is such an incompatible shell. See also Q 3.12 and Q 3.13.
        
        Meanwhile, there are special ports of tcsh and ksh which
        work in an xterm.
4OS2 has a number of misfeatures, politely spoken, in an xterm. We
        attempt to fix this in the future. For now, don't use it in an an
        xterm. If 4OS2 or another shell is in your OS2_SHELL or SHELL
        variable, please add an environment variable named X11SHELL to point
        to a valid CMD.EXE path, e.g.SET X11SHELL=D:\OS2\CMD.EXECONFIG.SYS. This will override the OS2_SHELL or SHELL setting
        which is used otherwise.
Q 3.13. So actually
        FTP does NOT work.
        You may try out x3270, available from the ported software WWW page
        (Q 1.15).
X11ROOT:\XFree86\lib\x11\xinit\xinitrc.cmd.
        This is an editable REXX script. Usually you will only modify the
        section "start some nice programs". You should use start/min to
        run the command and put all arguments in '' or "", because REXX
        may come to the wrong conclusion to interpret certain commands.
        The last command before the exit must be started without the
        start/min. If you kill this program, X11 will shutdown. Usually,
        this is configured as twm. So if you select exit on the root menu
        of twm, it will shutdown XFree86/OS2. Please read Q 2.46 about some
        gotcha.
You might try out DXPC as an alternative, though.
term, or kermit does
        not work (just before someone asks). But even with 28,8K it is no
        fun without packet compression (see also Q 2.15).
        
        You might check DXPC from the ported software page, ported
        by Ron van Iwaarden. This is a public packet compression server/client
        which should give some relief.
 
	If you don't have any source code, it won't work. The application
	complains that the XFree86 server does not support the OpenGL 3D
	extension.
 
	In practice, this support is broken since version 3.2, and never
	tested in XFree86/OS2. A future release will offer this and other
	combinations again.
XF86Config file, and if you change the
        mouse protocol entry to OSMOUSE and remove the mouse device
        line. Note the config file is named XConfig in OS/2, not
        XF86Config.
XF86SUP.SYS
        driver which you will mainly encounter in the xterm. The following
        functions are available currently:
        
        
XF86SUP.SYS installed. You need
        version 1.432 or later. A usable version is always in the file
        *BASE.ZIP in the XFree86 distribution, even if a XF86S*.ZIP
        containing the driver source is not available. The XF86SUP.SYS version
        1.420 from 3.1.2D does not have all features.
XF86SUP.SYS. Will be fixed
        sometime in the future. It should not crash, at least.
Emulate3Buttons and Emulate3Timeout 50
        in your XConfig file. The third button is then activated by
        pressing both buttons simultaneously.
                xmodmap -e "pointer = 3 2 1"
        on a command line or in the xinitrc file or make an Xmodmap file
        for that purpose.
.Xmodmap file.
        There are sample files in /XFree86/lib/X11/xmodmap/Xmodmap.* for
        various countries. If you write a new one which is not yet in the
        distribution, please send it to me (Holger.Veit@gmd.de) for
        inclusion into the next release.
Xmodmap files: they depend on the
        X server's idea how to assign keyboard (scan) codes to keys.
Xman uses the following conventions:
        
        
MANPATH environment variable. This is a semicolon (;) separated
          list of directories of the structure
                drive:/dir/.../man1
          What you have to specify actually is the directory path except
          the last level, such as in
                              /man2
                              /man3
                              ...
          
          SET MANPATH=d:/XFree86/man;Q:/EMX/man;F:/other/mans/man
          Not all chapters man1-mann need to be existent.
          If you have installed 
          XF32man.zip, you can see the structure under
          \XFree86\man.
 gzip (.gz extension).
             Such preformatted pages are produced from unformatted pages with
                tbl file.man | eqn | groff -man | gzip >file.gz
        \XFree86\man\man1 this would be 1, like grep.1.
        groff utilities
          installed (groff, eqn, tbl).
        cat and gzip.
          Both utilities are available from hobbes.nmsu.edu.
        
	start/min/n rsh remotehostname progname -display localhostname:0
	e.g.
	start/min/n rsh office-unix xterm -display homepc:0
	to get an xterm from your workstation at work to your home PC.
	Note the thing with ~/.rhosts at your workstation applies! RTF-Unix-M!
	
gzip, but with the
	compress program which is not so good?
		xinit -- :1
	If you use startx.cmd to run the server, replace the :0 with :1 there.
	If you start the X server directly, e.g. for xdm, pass the
	argument :1 to it as well. Note that most remote xdm servers listen
	on :0, though.
-cm. This will enable the color
	ESC sequences. To get color resources used, you also have to add
	#ifdef COLOR
	*customization: -color
	#endif
	to the %HOME%/.Xdefaults file and run 
        xrdb with the option -DCOLOR.
mkfontdir utility.
Imakefile. Simply proceed as
        if you were under Unix. Run xmkmf -a to compile. Read the
        programming section on special issues.
it is possible not there. Ask whether someone is already porting it, e.g. in the newsgroup comp.os.os2.programmer.porting; if not, then try it yourself. Applications don't appear magically, unless someone really ports them. So why not YOU?
ctwm,
        fvwm, fvwm95, afterstep, 
	available through the ported software web page (see Q 1.15).
twm by default. There is more stuff that would be worth becoming
        part of the standard, such as xv, but ...well, it isn't...
The problem then is that I cannot give out the code or put it on an FTP server, not even diffs. I don't have the time nor resources to open a business that sells licenses of the libraries to anyone interested and collect the royalties to the Motif Open Software Consortium. Initially, I thought I would simply make binaries, encrypt them and put them on a FTP server. People or institutions that give me a proof of a valid Motif license would then get the decryption key. I was told, however, that this scheme would be juridically suspicious.
So, this may be a point where companies, for instance, who are already involved in the Motif business could jump in, and offer the missing link. I have neither interest nor time to manage this.
There is also the LessTif project to build a free Motif clone. Look at the ported software page (Q 1.15).
gcc compiler. There may
        be certain restrictions and side effects involved concerning the
        GPL and the use of certain libraries. I won't discuss this here,
        but I would have no concerns regarding this.
        If you aren't concerned either: Yes, commercial applications are allowed and welcome. THIS IS YOUR CHANCE!
312FSLIB.ZIP.
        The libraries have been renamed to *_s.a to distinguish from the
        DLL forwarder libraries.
gcc is free software, and most stuff written for it is also
        freely available. Recompile any singlethreaded libs you want to
        link to a X application.
_System. However, there may be a large number of EMXisms in them
        which may prevent running. You need the EMX runtime DLLs anyway.
Imakefiles also have nice features, particularly that they
        expand to Makefiles that may have several thousand lines. I have
        tested numerous make programs: all but GNU make failed this benchmark
        somehow. You are accustomed to XYZmake; let's say, imake is
        accustomed to GNU make.
Imakefile and do not try to handcraft or patch a
          Makefile. Things will go wrong!
        ProgramTargetName() and LibraryTargetName()
          and use them in the Imakefile, rather than hacking .exe and .lib
          names. The above will work, hacking won't.
        -Zmtd option, the libraries
          are multithreaded by intention.
        #ifdef OS2Architecture in an Imakefile to specify an
          OS/2 dependent part.
        #ifdef __EMX__ for
          OS/2 EMX specific parts. Don't use other symbols, such as
          "OS2", "__OS2__", "i386", "__GNUC__", or "__32BIT__".
          Use only #ifdef, #else, #endif, not #elif, as some other compilers
          don't support this.
        Imakefiles silently assume they are running under Unix,
          and therefore have program and library names hardcoded in.
          Use the LibraryTargetName and ProgramTargetName macros to wrap
          libs and programs, such as in
                EXTRA_LIBRARIES = ../Xpmlib/LibraryTargetName(Xpm)
                PROGRAMS = ProgramTargetName(xterm) ProgramTargetName(resize)%X11ROOT%\XFree86\... To prepend the X11ROOT part
          to a file path, a special function named __XOS2RedirRoot exists
          which you are supposed to use in these cases rather than an insane
          own solution. The prototype of this function is:
          const char* __XOS2RedirRoot(const char* pathname);
        README.OS2, rather
          than invent yet another variable name for USERs, HOME directories,
          TMP directories, etc.
        fork() is involved.
          I got fork running in several situations, but it is no fun.
          Try to rewrite this code where possible (well-meant advice).
        \emx\lib\binmode.o. Don't change this, some code relies
          on this. Rather rewrite the code to accept \r\n as a line
          delimiter.
        Dos* API functions, as long as they don't conflict
          with EMX somehow (e.g. _beginthread vs. DosCreateThread). Stay
          away from Kbd*, Mou*, Vio* calls - none of those will do what you
          expect, but you can severely influence the operation of the X11
          system.
        #ifdef clauses.
        WINDOWCOMPAT and EXETYPE OS2
          (the only exceptions are the X servers and xinit).
        sh, so rewrite Unix shell
          scripts to REXX cmd files. Don't rely on others to install sh
          or other tools just for you.
        tar and gzip.
          Imakefile (which is common practice with X apps),
            set the X11ROOT variable to another letter than the one where you
            have your X11 tree. This makes it easier for you to combine
            all necessary files into a distribution.
          /usr/local/bin or similar, or
            rely on users to edit CONFIG.SYS to change the PATH or LIBPATH.
          /XFree86/src/PACKAGENAME, e.g.
            /XFree86/src/xfoo-0.42.
          Make is a REXX cmd script which is installed in \XFree86\bin. This
        script sets certain important variables and then calls the x11make.exe
        program (which is gnumake 3.71) which is known to work.
        You have some other make.cmd or make.exe somewhere in the path. If
        you do not remove or rename this, you won't be able to compile
        X11 code successfully.
Imakefile. You have not passed the correct options to gcc.
        The most simple Imakefile to compile a client with just one
        source file foo.c looks like this:======snip========================
        SimpleProgramTarget(foo)
        ======snip========================
        Note that you still need some secondary literature on special
        features of Imakefile rules. A recommended book on
        Imakefiles is available from O'Reilly&Assoc publ
        (Using imake). Ask in your bookstore.
rcs (available from hobbes.nmsu.edu) to make copies of each
        file before I modify it the first time. Later I use the modified
        files to produce context diff files using rcsdiff.
        When I managed to get some code working, I run make install, and
        make install.man which will usually install all necessary files in
        the right place. When I think the code is working correctly, I do
        the following: I change the X11ROOT variable in a CMD window to
        something else, e.g. from X11ROOT=d: (which it is on my system by
        default) to X11ROOT=c:, and run make install install.man again.
        This will build the tree of files again on C: where I can easily
        pack it with the zip utility after adding README files and diff files
        manually.
For own software to run under XFree86, this won't apply, of course.
The MIT copyright under which XFree86 is distributed is less restrictive anyway.
Thanks to all people who responded and now recognize their system mentioned here.
        Another source of problems are files which contain CR-LF as a
        line delimiter. We have to fix this the hard way unfortunately;
        for well-defined reasons programs are linked with \emx\lib\binmode.o.
        You might try to convert offending files to the Unix convention
        with the program \XFree86\lib\X11\etc\fixcrlf.exe.
                fixcrlf filename
        This will convert the file in place. Never apply this program to
        executables, fontfiles or other binaries.
        We need a bug report for the program anyway.
os2.rules or os2Lib.rules)
        report it as a bug. It remains your problem (you should contact and
        flame the author for dirty hacks), if some Imakefile contains
        Unixisms, such as sh command sequences.
commandname is CMD.EXE, it works, but if it is for instance ls
        only a window is opened, but no output is generated.