XFree86

In 1989, Thomas Roell a german student complete the X-Window porting on an Intel 386 (i386). In those days the product was completely free, but available for i386 systems likes SCO and UNIX Interactive.

The porting was so excelent that I personally use it on my Gateway2000 i386 DX in 1992, with only 4 MB of RAM! (I use the twm also called Tab-Window manager. I also try to use MOTIF 1.0 that works with 4MB of RAM but was too slow).

After some discussions in 1991 between Thomas Roell and the team, he moves to Colorado and founded X Inside, today Xi Graphics Inc. To know more about XFree86 and Thomas Roell story, you can check: LJ Interviews Thomas Roell

XFree86  team was created after the Thomas Roell development. While X.org, is a copyright organization that belong to OpenGroup, XFree offers X servers at no cost, for the most important operating systems.

The XFree86 modules

The XFree86 project today, touchs version 4.0.2 (Jan 2001) supporting monitors like Silicon Graphics Flat with number nine Revolution IV, and runs also on the new Mac OS X beta, the new OS from Apple Inc.

XFree86 is organized in modules. The new version includes the following modules:

       1.   Xinstall.sh      The installer script
       2.   extract            The utility for extracting tarballs
       3.   Xbin.tgz          X clients/utilities and run-time libraries
       4.   Xlib.tgz           Some data files required at run-time
       5.   Xman.tgz       Manual pages
       6.   Xdoc.tgz         XFree86 documentation
       7.   Xfnts.tgz        Base set of fonts
       8.   Xfenc.tgz       Base set of font encoding data
       9.   Xetc.tgz         Run-time configuration files
       10.  Xvar.tgz        Run-time data
       11.  Xxserv.tgz    XFree86 X server
       12.  Xmod.tgz      XFree86 X server modules

This is the original work developed by the XFree86 team, then each distribution team re-organize these source and binaries to respect the appropriate family card.

The complete RELEASE Notes are included in this training course.

For example RedHat 7.0 offers:

Each rpm file regards a specific card type: S3, S3 Virge, I28 (number nine), etc.

In this way, XFree86 create the support for the graphic cards.

ReHat offers for its first release the "Xconfigurator" that automatically detect the card and ask for the appropriate monitor and graphical resolution setting. On XFree, the configuration file is "XF86Config" (on RedHat is located in "/etc/X11/")

This file is organized in section ... Monitor section ... keyboard section ... Pointer section ...

Section "Monitor"
   Identifier  "My Monitor"
   VendorName  "Unknown"
   ModelName   "Unknown"
   HorizSync   31.5-35.5
   VertRefresh 50-70
   Modeline "640x480"     25.175 640  664  760  800   480  491  493  525
   Modeline "640x480"     28.3   640  664  760  800   480  491  493  525
   ModeLine "800x600"     36     800  824  896 1024   600  601  603  625
EndSection

Section "Keyboard"
   Protocol    "Standard"
   AutoRepeat  0 0

   LeftAlt         Meta
   RightAlt        Meta
   ScrollLock      Compose
   RightCtl        Control
    XkbDisable
EndSection

Section "Pointer"
   Protocol    "PS/2"
   Device      "/dev/mouse"
   ZAxisMapping 4 5
EndSection

and screen section for each "display"

Section "Screen"
    Driver "svga"
    Device      "svga"
    Monitor     "My Monitor"
    Subsection "Display"
        Depth       16
        Modes       "800x600" "640x480"
        ViewPort    0 0
    EndSubsection
EndSection

Other important "section"  is the monitor section:

Section "Monitor"

    Identifier  "ADI ProVista 14"
    VendorName  "Unknown"
    ModelName   "Unknown"

# HorizSync is in kHz unless units are specified.
# HorizSync may be a comma separated list of discrete values, or a
# comma separated list of ranges of values.
# NOTE: THE VALUES HERE ARE EXAMPLES ONLY.  REFER TO YOUR MONITOR'S
# USER MANUAL FOR THE CORRECT NUMBERS.

    HorizSync   30.6-48.0

# VertRefresh is in Hz unless units are specified.
# VertRefresh may be a comma separated list of discrete values, or a
# comma separated list of ranges of values.
# NOTE: THE VALUES HERE ARE EXAMPLES ONLY.  REFER TO YOUR MONITOR'S
# USER MANUAL FOR THE CORRECT NUMBERS.

    VertRefresh 50.0-100.0

# Modes can be specified in two formats.  A compact one-line format, or
# a multi-line format.

# These two are equivalent

#    ModeLine "1024x768i" 45 1024 1048 1208 1264 768 776 784 817 Interlace

#    Mode "1024x768i"
#        DotClock       45
#        HTimings       1024 1048 1208 1264
#        VTimings       768 776 784 817
#        Flags          "Interlace"
#    EndMode

# This is a set of standard mode timings. Modes that are out of monitor spec
# are automatically deleted by the server (provided the HorizSync and
# VertRefresh lines are correct), so there's no immediate need to
# delete mode timings (unless particular mode timings don't work on your
# monitor). With these modes, the best standard mode that your monitor
# and video card can support for a given resolution is automatically
# used.

# 640x400 @ 70 Hz, 31.5 kHz hsync
Modeline "640x400"     25.175 640  664  760  800   400  409  411  450
# 640x480 @ 60 Hz, 31.5 kHz hsync
Modeline "640x480"     25.175 640  664  760  800   480  491  493  525
# 800x600 @ 56 Hz, 35.15 kHz hsync
ModeLine "800x600"     36     800  824  896 1024   600  601  603  625
# 1024x768 @ 87 Hz interlaced, 35.5 kHz hsync
Modeline "1024x768"    44.9  1024 1048 1208 1264   768  776  784  817 Interlace

# 640x400 @ 85 Hz, 37.86 kHz hsync
Modeline "640x400"     31.5   640  672 736   832   400  401  404  445 -HSync +VSync
# 640x480 @ 72 Hz, 36.5 kHz hsync
Modeline "640x480"     31.5   640  680  720  864   480  488  491  521
# 640x480 @ 75 Hz, 37.50 kHz hsync
ModeLine  "640x480"    31.5   640  656  720  840   480  481  484  500 -HSync -VSync
# 800x600 @ 60 Hz, 37.8 kHz hsync
Modeline "800x600"     40     800  840  968 1056   600  601  605  628 +hsync +vsync

# 640x480 @ 85 Hz, 43.27 kHz hsync
Modeline "640x480"     36     640  696  752  832   480  481  484  509 -HSync -VSync
# 1152x864 @ 89 Hz interlaced, 44 kHz hsync
ModeLine "1152x864"    65    1152 1168 1384 1480   864  865  875  985 Interlace

# 800x600 @ 72 Hz, 48.0 kHz hsync
Modeline "800x600"     50     800  856  976 1040   600  637  643  666 +hsync +vsync
# 1024x768 @ 60 Hz, 48.4 kHz hsync
Modeline "1024x768"    65    1024 1032 1176 1344   768  771  777  806 -hsync -vsync

# 640x480 @ 100 Hz, 53.01 kHz hsync
Modeline "640x480"     45.8   640  672  768  864   480  488  494  530 -HSync -VSync
# 1152x864 @ 60 Hz, 53.5 kHz hsync
Modeline  "1152x864"   89.9  1152 1216 1472 1680   864  868  876  892 -HSync -VSync
# 800x600 @ 85 Hz, 55.84 kHz hsync
Modeline  "800x600"    60.75  800  864  928 1088   600  616  621  657 -HSync -VSync

# 1024x768 @ 70 Hz, 56.5 kHz hsync
Modeline "1024x768"    75    1024 1048 1184 1328   768  771  777  806 -hsync -vsync
# 1280x1024 @ 87 Hz interlaced, 51 kHz hsync
Modeline "1280x1024"   80    1280 1296 1512 1568  1024 1025 1037 1165 Interlace

# 800x600 @ 100 Hz, 64.02 kHz hsync
Modeline  "800x600"    69.65  800  864  928 1088   600  604  610  640 -HSync -VSync
# 1024x768 @ 76 Hz, 62.5 kHz hsync
Modeline "1024x768"    85    1024 1032 1152 1360   768  784  787  823
# 1152x864 @ 70 Hz, 62.4 kHz hsync
Modeline  "1152x864"   92    1152 1208 1368 1474   864  865  875  895
# 1280x1024 @ 61 Hz, 64.2 kHz hsync
Modeline "1280x1024"  110    1280 1328 1512 1712  1024 1025 1028 1054

# 1024x768 @ 85 Hz, 70.24 kHz hsync
Modeline "1024x768"   98.9  1024 1056 1216 1408   768 782 788 822 -HSync -VSync
# 1152x864 @ 78 Hz, 70.8 kHz hsync
Modeline "1152x864"   110   1152 1240 1324 1552   864  864  876  908

# 1280x1024 @ 70 Hz, 74.59 kHz hsync
Modeline "1280x1024"  126.5 1280 1312 1472 1696  1024 1032 1040 1068 -HSync -VSync
# 1600x1200 @ 60Hz, 75.00 kHz hsync
Modeline "1600x1200"  162   1600 1664 1856 2160  1200 1201 1204 1250 +HSync +VSync
# 1152x864 @ 84 Hz, 76.0 kHz hsync
Modeline "1152x864"   135    1152 1464 1592 1776   864  864  876  908

# 1280x1024 @ 74 Hz, 78.85 kHz hsync
Modeline "1280x1024"  135    1280 1312 1456 1712  1024 1027 1030 1064

# 1024x768 @ 100Hz, 80.21 kHz hsync
Modeline "1024x768"   115.5  1024 1056 1248 1440  768  771  781  802 -HSync -VSync
# 1280x1024 @ 76 Hz, 81.13 kHz hsync
Modeline "1280x1024"  135    1280 1312 1416 1664  1024 1027 1030 1064

# 1600x1200 @ 70 Hz, 87.50 kHz hsync
Modeline "1600x1200"  189    1600 1664 1856 2160  1200 1201 1204 1250 -HSync -VSync
# 1152x864 @ 100 Hz, 89.62 kHz hsync
Modeline "1152x864"   137.65 1152 1184 1312 1536   864  866  885  902 -HSync -VSync
# 1280x1024 @ 85 Hz, 91.15 kHz hsync
Modeline "1280x1024"  157.5  1280 1344 1504 1728  1024 1025 1028 1072 +HSync +VSync
# 1600x1200 @ 75 Hz, 93.75 kHz hsync
Modeline "1600x1200"  202.5  1600 1664 1856 2160  1200 1201 1204 1250 +HSync +VSync
# 1600x1200 @ 85 Hz, 105.77 kHz hsync
Modeline "1600x1200"  220    1600 1616 1808 2080  1200 1204 1207 1244 +HSync +VSync
# 1280x1024 @ 100 Hz, 107.16 kHz hsync
Modeline "1280x1024"  181.75 1280 1312 1440 1696  1024 1031 1046 1072 -HSync -VSync

# 1800x1440 @ 64Hz, 96.15 kHz hsync
ModeLine "1800X1440"  230    1800 1896 2088 2392 1440 1441 1444 1490 +HSync +VSync
# 1800x1440 @ 70Hz, 104.52 kHz hsync
ModeLine "1800X1440"  250    1800 1896 2088 2392 1440 1441 1444 1490 +HSync +VSync

# 512x384 @ 78 Hz, 31.50 kHz hsync
Modeline "512x384"    20.160 512  528  592  640   384  385  388  404 -HSync -VSync
# 512x384 @ 85 Hz, 34.38 kHz hsync
Modeline "512x384"    22     512  528  592  640   384  385  388  404 -HSync -VSync

# Low-res Doublescan modes
# If your chipset does not support doublescan, you get a 'squashed'
# resolution like 320x400.

# 320x200 @ 70 Hz, 31.5 kHz hsync, 8:5 aspect ratio
Modeline "320x200"     12.588 320  336  384  400   200  204  205  225 Doublescan
# 320x240 @ 60 Hz, 31.5 kHz hsync, 4:3 aspect ratio
Modeline "320x240"     12.588 320  336  384  400   240  245  246  262 Doublescan
# 320x240 @ 72 Hz, 36.5 kHz hsync
Modeline "320x240"     15.750 320  336  384  400   240  244  246  262 Doublescan
# 400x300 @ 56 Hz, 35.2 kHz hsync, 4:3 aspect ratio
ModeLine "400x300"     18     400  416  448  512   300  301  302  312 Doublescan
# 400x300 @ 60 Hz, 37.8 kHz hsync
Modeline "400x300"     20     400  416  480  528   300  301  303  314 Doublescan
# 400x300 @ 72 Hz, 48.0 kHz hsync
Modeline "400x300"     25     400  424  488  520   300  319  322  333 Doublescan
# 480x300 @ 56 Hz, 35.2 kHz hsync, 8:5 aspect ratio
ModeLine "480x300"     21.656 480  496  536  616   300  301  302  312 Doublescan
# 480x300 @ 60 Hz, 37.8 kHz hsync
Modeline "480x300"     23.890 480  496  576  632   300  301  303  314 Doublescan
# 480x300 @ 63 Hz, 39.6 kHz hsync
Modeline "480x300"     25     480  496  576  632   300  301  303  314 Doublescan
# 480x300 @ 72 Hz, 48.0 kHz hsync
Modeline "480x300"     29.952 480  504  584  624   300  319  322  333 Doublescan

EndSection

Is possible to visualize X in two monitors, one monitor for each card at a different resolution, in this case will be necessary a separate screen section for each monitor.

The FrameBuffer device

A framebuffer device is an abstraction for the graphic hardware. Therefore you can run a graphical interface without to know anything about the low-level interface. This is the great advantage. The only disvantage is that this interface is not accelerated. For this reason different graphical installation programs tests and includes both modes.

The FrameBuffer is a device, like floppy or hard disk device.

The device are located in the same place:

[root@ftosx1 /root]# cd /dev/fb
fb   fb0  fb1  fb2  fb3  fb4  fb5  fb6  fb7
[root@ftosx1 /root]# cd /dev/fb

You need to run a kernel that support this device. To activate it, you need to compile the kernel including the support for the VESA VGA graphics console, for example (for the kernel 2.2.17).

Now, you can reboot and check if the kernel are using the frame buffer device (fb)

[root@ftosx1 root]# cat /proc/fb
0 VESA VGA

Boot messages are:

Feb 17 14:49:20 ftosx1 kernel: vesafb: framebuffer at 0xe4000000, mapped to 0xc4800000, size 32768k
Feb 17 14:49:20 ftosx1 kernel: vesafb: mode is 1024x768x16, linelength=2048, pages=20
Feb 17 14:49:20 ftosx1 kernel: vesafb: protected mode interface info at c000:7be0
Feb 17 14:49:20 ftosx1 kernel: vesafb: scrolling: redraw
Feb 17 14:49:20 ftosx1 kernel: vesafb: directcolor: size=0:5:6:5, shift=0:11:5:0
Feb 17 14:49:20 ftosx1 kernel: Console: switching to colour frame buffer device 128x48
Feb 17 14:49:20 ftosx1 kernel: fb0: VESA VGA frame buffer device

Now, to choose the resolution you must add a "vga" entry in the LILO, that will load the device at boot time.

For example adding "vga=791", in the specific LILO section: (See the file below)

[root@ftosx1 /root]# more /etc/lilo.conf
boot=/dev/hda
map=/boot/map
install=/boot/boot.b
prompt
#vga=ask
# vga = 1 -> 80x50
vga=normal
timeout=50
lba32
default=linux_root
message=/boot/message

image=/boot/vmlinuz-2.2.14-5.0
        label=linux_orig
        read-only
        root=/dev/hda2

image=/vmlinuz
        label=linux_root
        read-only
        root=/dev/hda2

image=/vmlinuz-2.4.1
        label=linux_2.4.1
        read-only
        root=/dev/hda2

image=/boot/vmlinuz-2.2.17
        label=linux_2.2.17
        vga=791
        read-only
        root=/dev/hda2
 

You will obtain a resolution on 1024x768 ... on the console. At you will see a "penguin logo" at boot time in the corner left corner.

If you apply the changes and reboot, if you run the command, "fbset", you will see the resolution

root@ftosx1 /root]# fbset

mode "1024x768-76"
    # D: 78.653 MHz, H: 59.949 kHz, V: 75.694 Hz
    geometry 1024 768 1024 768 16
    timings 12714 128 32 16 4 128 4
    rgba 5/11,6/5,5/0,0/0
endmode

A complete table for VESA resolution cards and the relative "vga" entry are listed here:

Colours   640x400 640x480 800x600 1024x768 1152x864 1280x1024 1600x1200
--------+--------------------------------------------------------------
 4 bits |    ?       ?     0x302      ?        ?        ?         ?
 8 bits |  0x300   0x301   0x303    0x305    0x161    0x307     0x31C
15 bits |    ?     0x310   0x313    0x316    0x162    0x319     0x31D
16 bits |    ?     0x311   0x314    0x317    0x163    0x31A     0x31E
24 bits |    ?     0x312   0x315    0x318      ?      0x31B     0x31F
32 bits |    ?       ?       ?        ?      0x164      ?
 

Documentation for the Frame buffer may be obtained from the:


Xi Graphics's Accelerated X

Xi Graphics Inc is the company founded by Thomas Roell in Colorado in 1992 that follows the original "i386" porting maded by its founder.  From its first developments the product offers a premium perfromance on Intel based systems.

To understand the Accelerated X Window Server (AX), we can list the configuration file, Xaccel.ini for a Silicon Graphics Flat Panel:
 
 

//
// 3D Accelerated-X (tm) Display Server
// created on Sat Sep 23 12:22:29 2000
//

[FONTPATH]
    "/usr/X11R6/lib/X11/AcceleratedX/fonts/misc/",
    "/usr/X11R6/lib/X11/fonts/misc/",
    "/usr/X11R6/lib/X11/fonts/75dpi/",
    "/usr/X11R6/lib/X11/fonts/100dpi/";

[RGBPATH]
    "/usr/X11R6/lib/X11/AcceleratedX/etc/Xrgb";

[KEYBOARD]
    Layout = "us.xkm";

[MOUSE]
    Device   = "/dev/psaux";
    Protocol = PS/2;

[SCREEN]
    Board   = "number9/revIVFP-32.xqa";
    Monitor = "sgi/1600sw.vda";
    Depth = 24;
    EnergyStar = YES;

    [RESOLUTIONS]
        1600x1024;
[root@ftosx1 /root]#

The previous configuration file was generated on the 3D-Accelerated product. However, Xi Graphics support this monitor with the Number 9 - Revolution IV graphic card, from 1999. XFree support this monitor only from Dec 2000. 

On Windows 2000(c), is possible to visualize this monitor from 640x400 up to 1600x1024, including 800x600 and other intermediate resolutions. XFree supports two published resolutions: 800x600 and 1600x1024 at different color depths (bpp - bit per palette)

The simplicity in this configuration file is clear and immediate. While XF86Config, have a rudimentary section for each hardware component, AX have a section listing only a short number of lines. To change the resolution on AX, you can simply, edit the file and modify from 1600x1024 to 800x600 (if applicable). On XFree you need to change the mode lines and the server

Fast Training Linux Course includes an updated DEMO version for AX and LX (Laptop version) in the ExternalContribs directory.

However, Linux software developers like VM Ware Inc test its applications on XFree. The latest Xi Graphics version, AX 6.0 solves also this problem.
 

The "xinit" program

To run the X Window System, "X", it is necessary to run a program called "xinit" or its shell "startx".
The "xdm"
In Linux "xdm" is the graphical login. The "xdm" resources belong to the dir "/etc/X11/xdm/", the xdm applications belong to the dir "/usr/bin/X11/".
Once installed, xdm lets you log into the system from a graphical login. After you enter you can run and start up your favorite X applications.



Press the button to go to the next section.