Penguin
Diff: HowToXWindowUserHOWTO
EditPageHistoryDiffInfoLikePages

Differences between version 3 and previous revision of HowToXWindowUserHOWTO.

Other diffs: Previous Major Revision, Previous Author, or view the Annotated Edit History

Newer page: version 3 Last edited on Thursday, October 21, 2004 5:35:56 pm by AristotlePagaltzis Revert
Older page: version 2 Last edited on Friday, June 7, 2002 1:07:52 am by perry Revert
@@ -1,4066 +1 @@
-The X Window User HOWTO  
-!!!The X Window User HOWTO  
-!Hal Burgiss  
-  
- hal@foobox.net  
-  
-  
-  
-  
-v3.0 06 March 2002  
-  
-  
-__Revision History__Revision v3.02002-03-06Revised by: hbRewrite of the original document. Convert to !DocBook. Many, many changes.  
-  
-  
-  
-  
-  
-  
-  
-  
-  
- This document provides basic information on understanding and configuring the  
-X Window System for Linux users. This is meant to be an introductory  
-level document. A basic knowledge of software configuration is assumed, as is  
-the presence of an installed and working X Window System.  
-  
-  
-  
-  
-  
-----; __Table of Contents__; 1. Introduction: ; 1.1. New Versions and !ChangeLog; 1.2. To Do; 1.3. Feedback; 1.4. Help!; 1.5. Acknowledgments; 1.6. Copyright; 1.7. Standard Disclaimer; 2. XFree86: ; 2.1. Hardware; 2.2. XF86Config; 2.3. xvidtune and Monitor Tuning; 3. Running X: ; 3.1. startx; 3.2. Display Managers; 4. More X Configuration: ; 4.1. X Resources; 4.2. xmodmap, the Keyboard and Mice; 4.3. xset; 5. Fonts and Colors: ; 5.1. Fonts Demystified; 5.2. Colors; 6. Window Managers and Desktops: ; 6.1. Window Managers; 6.2. Desktop Environments; 7. X and the Command Line: ; 7.1. xterm and friends; 8. X Networking and Security; 9. Performance Considerations: ; 9.1. Hardware; 9.2. Memory; 9.3. Other Tips; 10. Appendix: ; 10.1. Terminology and Usage; 10.2. Links and other References  
-!!!1. Introduction  
-  
- The ''X Window System'' is an advanced, graphical  
-computing and network environment that was designed from the ground up as a  
-multi-user system. X was first released in 1984.  
-If you are not familiar with the basic concepts surrounding  
-X and it's related components, you should first  
-read the ''X Window System Architecture Overview HOWTO'', http://linuxdoc.org/HOWTO/XWindow-Overview-HOWTO/index.html,  
-to get an idea of how the various pieces fit together. There is also  
-an attempt to define to various X related  
-terminology in the Appendix, if concepts such  
-as "displays" and "X clients" in this context are  
-confusing to you.  
-  
-  
-  
- This document will address basic X Window configuration and usage on Linux. We will  
-also look at how X is commonly started in Linux,  
-and how the start up can be configured, and related issues. We will  
-''not'' examine Window Manager (e.g.  
-fvwm), or Desktop Environment  
-(KDE and GNOME)  
-configuration. There are just too many variables there, and the pace of  
-change moves too quickly. Of course, to a large extent the user interacts  
-more directly with these components than the X server itself, so additional  
-reading would be worthwhile. Check your locally installed documentation, and  
-the respective home pages for more information.  
-  
-  
-  
- Some other important points to remember here:  
-  
-  
-  
-  
-  
-  
-  
-  
-****  
-  
- X is a client-server, multi-user system in  
-every respect, and not just a GUI.  
-  
-  
-  
-****  
-****  
-  
- X is not integrated into the operating system,  
-and rides on top of it, like other servers.  
-  
-  
-  
-****  
-****  
-  
- X is an open standard, and runs on many platforms.  
-  
-  
-  
-****  
-****  
-  
- What you actually see on the screen is the result of various components,  
-all working together: operating system, X,  
-Window Manager, and optionally, a desktop environment like  
-GNOME or KDE. These  
-are all "plug and play" components, meaning you can  
-interchange an individual component without touching the other components.  
-  
-  
-  
-****  
-****  
-  
- Each of the various components has its own configuration. This makes for a  
-very flexible, and potentially very robust, system. It also adds  
-complexity.  
-  
-  
-  
-****  
-  
-  
-  
- The discussion here will be limited to X as  
-implemented by The XFree86 Project,  
-Inc. on Linux. There are other implementations, including  
-commercial ones. XFree86 v4.x has been out for some time now, so we will be  
-assuming that version. Much of the discussion applies to the previous 3.x  
-version as well, but there are some occasional differences.  
-  
-  
-  
- It is also worth noting that there are conceivably many ways to start  
-X, and to set up a Linux system. We will focus on  
-the common methods found in Linux distributions. Also, vendors may vary on  
-where they put configuration files, and how they name them. Keep this in mind  
-if you see such discrepancies in this document. If this is a problem, your  
-vendor surely has their own documentation. And as always, hopefully the man  
-pages will conform to your installation.  
-  
-  
-  
- Also, we will look at various configuration files in the following sections.  
-These are all plain text files, and can be edited with your favorite editor.  
-Always make a backup copy before editing important files, in case Murphy pays  
-a visit (e.g. "cp /etc/X11/XF86Config-4 /etc/X11/XF86Config-4.bak").  
-  
-----  
-!!1.1. New Versions and !ChangeLog  
-  
- The current official version of this HOWTO may be found at the Linux Documentation Project, http://www.linuxdoc.org/HOWTO/XWindow-User-HOWTO.html.  
-Pre-release versions may be periodically posted to http://feenix.burgiss.net/ldp/x-user/.  
-  
-  
-  
- v3.: This is a major rewrite with several new sections. Some  
-sections were removed, with the focus more now on just  
-X itself (and not clients like Window Managers).  
-New maintainer too :-)  
-  
-  
-  
- v2.: includes corrections from Guus Bosch, Brian J.  
-Miller, and myself, as well as lots of new updates and info.  
-  
-  
-  
- v1.4: include corrections and additions from Anthony J., and  
-some very good security tips from Tomasz Motylewski.  
-  
-----  
-!!1.2. To Do  
-  
- A rudimentary troubleshooting section. Probably for v3.1.  
-  
-----  
-!!1.3. Feedback  
-  
- If you have questions or comments about this document, please feel free to  
-email me, Hal Burgiss at `hal@foobox.netb. I welcome any  
-suggestions, corrections, or additions. If you have information you would  
-like to see in future revisions, or you would like to contribute to a future  
-revision, please drop me a note.   
-  
-----  
-!!1.4. Help!  
-  
- I have assumed maintainership of this document because it was abandoned, and  
-I had wanted to offer a suggested change. Well, to make a long story short,  
-this led to a major re-write. You can help make this a better document by  
-correcting inaccuracies, clarifying the unclear, and suggesting improvements.  
-There is much about this topic I may not know, or not have explained well. Your  
-help will improve this document and help other users. This document  
-''needs'' your help!  
-  
-  
-----  
-!!1.5. Acknowledgments  
-  
- Thanks to the XFree86 development team for their efforts in providing a  
-robust and flexible GUI. And to the whole GNU/Linux and Open Source  
-community for making it all possible.  
-  
-  
-  
-  
- Also, the original author, Ray Brigleb.  
-  
-  
-  
- Various users on comp.os.linux.x that have helped in one way or another,  
-whether they know it or not.  
-  
-  
-  
- Lastly, http://google.com/linux,  
-who saved me much time with their incredible repository of information. Use  
-it to answer questions not answered here!  
-  
-----  
-!!1.6. Copyright  
-  
- Copyright © 2002, Hal Burgiss.  
-  
-  
-  
- Unless otherwise stated, Linux HOWTO documents are copyrighted by their  
-respective authors. Linux HOWTO documents may be reproduced and distributed  
-in whole or in part, in any medium physical or electronic, as long as this  
-copyright notice is retained on all copies. Commercial redistribution is  
-allowed and encouraged; however, the author would like to be notified of any  
-such distributions.  
-  
-  
-  
- All translations, derivative works, or aggregate works incorporating any  
-Linux HOWTO documents must be covered under this copyright notice. That is,  
-you may not produce a derivative work from a HOWTO and impose additional  
-restrictions on its distribution. Exceptions to these rules may be granted  
-under certain conditions; please contact the Linux HOWTO coordinator for more  
-information.  
-  
-  
-  
-  
- In short, we wish to promote dissemination of this information through as  
-many channels as possible. However, we do wish to retain copyright on the  
-HOWTO documents, and would very much like to be notified of any plans to  
-redistribute the HOWTOs, this one in particular!  
-  
-  
-  
- Some of the terms mentioned in this document are trade names. Unless  
-otherwise stated, all trademarks are property of their respective owners.  
-  
-  
-  
- "X Window System" is a trademark of the X Consortium, Inc  
- [[now the !OpenGroup? ].  
-  
-  
-  
- "XFree86" is a trademark of The  
-XFree86 Project, Inc.  
-  
-  
-  
- "Linux" is a Registered Trademark of Linus Torvalds.  
-  
-----  
-!!1.7. Standard Disclaimer  
-  
- The information and examples given here are for illustrative purposes. Use at  
-your own risk. Every attempt has been made to insure that the content of this  
-document was accurate when written. If you find inaccuracies, please send me  
-clarifications.  
-  
-  
-  
- References to any particular company, product or brand name should not be  
-construed as an endorsement.  
-  
-----  
-!!!2. XFree86  
-  
- Virtually every Linux distribution comes with XFree86's  
-X Window System implementation. This project, of  
-course, provides us the X server, but also includes an extensive suite of  
-utilities and applications to help implement a fully functional GUI  
-environment.  
-  
-  
-  
- In fact, the list would be just too long to list everything that  
-comes with XFree86. In addition to the X server itself, here are a few of the  
-noteworthy utilities:  
-  
-  
-  
-  
-  
-  
- __xdm__ - the X Display Manager.  
-  
-  
-  
-  
-  
-  
-  
-  
-  
- __xfs__ - the X Font Server.  
-  
-  
-  
-  
-  
-  
-  
-  
-  
- __twm__ - a lightweight Window Manager.  
-  
-  
-  
-  
-  
-  
-  
-  
-  
- __xterm__ - the best known terminal emulator. Also,  
-__xterm3d__ and __nxterm__.  
-  
-  
-  
-  
-  
-  
-  
-  
-  
- __xwd__ - a screen and window image capturer.  
-  
-  
-  
-  
-  
-  
-  
-  
-  
- __xf86config__ - X server configuration utility.  
-  
-  
-  
-  
-  
-  
-  
-  
-  
- __xdpyinfo__ - X display information utility. This  
-shows great detail about the X server.  
-  
-  
-  
-  
-  
-  
-  
-  
-  
- __xlsclients__ - lists currently connected X server  
-clients.  
-  
-  
-  
-  
-  
-  
-  
-  
-  
- __xlsfonts__ - lists fonts available to  
-X.  
-  
-  
-  
-  
-  
-  
-  
-  
-  
- __appres__ - lists the X "resources" that a  
-program will use.  
-  
-  
-  
-  
-  
-  
-  
-  
-  
- __xfontsel__ - an application for viewing or  
-selecting fonts.  
-  
-  
-  
-  
-  
-  
-  
-  
-  
- __xprop__ - a tool for displaying window  
-"properties", such as the Class name of the client.  
-  
-  
-  
-  
-  
-  
-  
-  
-  
- __xset__ - sets user preferences for many things,  
-including mouse, keyboard, sound (bell), etc.  
-  
-  
-  
-  
-  
-  
-  
-  
-  
- __xsetroot__ - a program for changing the  
-"root window" appearance, e.g. setting a background color.  
-  
-  
-  
-  
-  
-  
-  
-  
-  
- __xvidtune__ - an application to adjust X server  
-video modes and monitor related settings.  
-  
-  
-  
-  
-  
-  
-  
-  
-  
- __xwininfo__ - displays information about a selected  
-"window".  
-  
-  
-  
-  
-  
-  
-  
-  
-  
- __xmodmap__ - a utility for manipulating keyboard and mouse  
-button mappings.  
-  
-  
-  
-  
-  
-  
-  
-  
-  
- Many, many fonts. And quite a bit of documentation as well.  
-  
-  
-  
-  
-  
-  
- There are many more. We'll just touch on a few of these utilities here. But  
-feel free to explore the others. Most should have their own man pages.  
-  
-----  
-!!2.1. Hardware  
-  
- The X server controls both input (keyboard, mouse, etc) and output (display,  
-monitor) devices.  
-  
-  
-  
- Compatible hardware is a tough topic, since it is very much a moving target.  
-We are forced here to avoid specifics, since this would surely change by the  
-time you read this. And would be tediously lengthy anyway.  
-  
-  
-  
- So let's settle for some generalities. ''Most'' PC type  
-hardware is supported to one degree or another. Big help ;-)  
-  
-  
-  
- Rule of thumb: if it is a device that uses a long-standing, commonplace  
-protocol (e.g. PS/2), it should be well supported. Conversely, if it is  
-something relatively new, with ground-breaking technology, the odds  
-are not as good. This is just the nature of the beast with open source  
-development versus manufacturers that cater more to the most popular  
-platforms. Some manufacturers are more co-operative than others too.  
-  
-  
-  
- Now, some general guidelines:  
-  
-  
-  
-  
-  
-  
-  
-  
-****  
-  
- Monitors - This is easy. Linux does not really need to be compatible with  
-the monitor per se. That is the job of the video card. Any monitor that  
-your graphics card can drive should do fine. Including, flat panel  
-monitors.  
-  
-  
-  
-****  
-****  
-  
- Video cards - This is much tougher. The X server is determined by the  
-the chipset. Many, many are supported. But inevitably there are always  
-some newer cards, or even revised cards, that are not. And some may have  
-better support and better optimization than others. Advanced  
-features such as multi-headed displays, 3D, TV out, DRI, etc., have some  
-support as well, though this should be researched first, as the support  
-may be limited. Supported cards are listed: http://xfree86.org/cardlist.html.  
-  
-  
-  
-  
- Open source drivers are often developed incrementally. For instance, a  
-particular card may work well for basic display purposes, but specialized  
-features such as 3D may come much later in the development cycle. This  
-is a quite different development model than with proprietary drivers from  
-the manufacturer.  
-  
-  
-  
-****  
-****  
-  
- Keyboards -- Any standard PC type keyboard should do fine,  
-including PS/2, USB and many infra-red devices. Probably many  
-"non-standard" ones too ;-)  
-  
-  
-  
-****  
-****  
-  
- Mice and other pointer devices -- Most should be supported including  
-PS/2, bus, serial, USB and many infra-red devices. Optical mice also. Unix  
-has long preferred three button mice, though more buttons is supported as  
-well. Many wheeled mice have X server support via the  
-"IMPS/2" (!IntelliMouse), or other specific protocols, though  
-may require supplemental configuration for some individual applications.  
-(See the Links section.)  
-  
-  
-  
-****  
-****  
-  
- Laptops have their own unique set of problems since the hardware tends to  
-be very specialized, and often different from what is commonly found on  
-desktop style systems. X is supported by many.  
-Check for details at http://www.linux-laptop.net/.  
-  
-  
-  
-****  
-  
-  
-  
- You can check the "hardware compatibility list" at your  
-distribution's web site too. This should give a very good idea of what  
-''should work'' with your release.  
-  
-  
-  
- Newer versions of XFree86 obviously will have better hardware support. If you  
-are using an older Linux version and don't have full hardware support, see  
-about upgrading XFree86. Check first to see if your distribution has updates  
-for your release.  
-  
-----  
-!!2.2. XF86Config  
-  
- The primary configuration file for XFree86 is  
-XF86Config, which may exist on your system as  
-XF86Config-4 for XFree86 v4.x, or possibly other  
-variations (see man page). It is typically located as  
-/etc/X11/XF86Config, though again, there may be  
-variations in the path. If both a XF86Config-4  
-and XF86Config exist, XFree86 v4.x will use the former.  
-This is a required file.  
-  
-  
-  
- XF86Config file defines hardware devices, and other  
-critical components of the X server environment.   
-  
-  
-  
- While this is a plain text file, and is editable, it is most often created  
-during installation by whatever utility your vendor uses for this purpose.  
-XFree86 also includes the __xf86config__ utility for this,  
-but many distributions have their own such utilities. These utilities can be  
-run after installation if need be, to alter the configuration, or if new  
-hardware is installed. Read your locally installed documentation first. If  
-you attempt to hand edit this file, be sure to make a backup copy first since  
-X won't start if this file is not to its liking  
-;-)  
-  
-  
-  
- This file contains various "sections". Each section defines some  
-fundamental aspect of XFree86, such as "!InputDevice" (mouse,  
-keyboard, joystick, etc), "monitor", or "screen". The  
-XF86Config man page describes the sections and  
-common values for each. Note that the values listed in the man page is not a  
-comprehensive listing. There are many device specific "options".  
-Check http://xfree86.org for notes  
-and tips on your hardware.  
-  
-  
-  
- The author's current XF86Config-4, as generated by Red  
-Hat's installer for XFree86 4.1:  
-  
-  
-  
-  
-Section "!ServerLayout"  
-Identifier "XFree86 Configured"  
-Screen 0 "Screen0" 0  
-!InputDevice "Mouse0" "!CorePointer"  
-!InputDevice "Keyboard0" "!CoreKeyboard"  
-!EndSection  
-Section "Files"  
-# The location of the RGB database.  
-!RgbPath "/usr/X11R6/lib/X11/rgb"  
-# Multiple !FontPath entries are allowed (they are concatenated together)  
-# By default, Red Hat 6.0 and later now use a font server independent of  
-# the X server to render fonts.  
-!FontPath "unix/:7100"  
-!EndSection  
-# Module loading section  
-Section "Module"  
-Load "dbe" # Double-buffering  
-Load "GLcore" # OpenGL support  
-Load "dri" # Direct rendering infrastructure  
-Load "glx" # OpenGL X protocol interface  
-Load "extmod" # Misc. required extensions  
-Load "v4l" # Video4Linux  
-# Load "fbdevhw"  
-Load "pex5"  
-Load "record"  
-Load "xie"  
-!EndSection  
-Section "!InputDevice"  
-Identifier "Keyboard0"  
-Driver "keyboard"  
-Option "!XkbLayout" "us"  
-# Option "!AutoRepeat" "500 5"  
-# when using XQUEUE, comment out the above line, and uncomment the  
-# following line  
-# Option "Protocol" "Xqueue"  
-# Specify which keyboard LEDs can be user-controlled (eg, with xset(1))  
-# Option "Xleds" "1 2 3"  
-# To disable the XKEYBOARD extension, uncomment !XkbDisable.  
-# Option "!XkbDisable"  
-# To customize the XKB settings to suit your keyboard, modify the  
-# lines below (which are the defaults). For example, for a non-U.S.  
-# keyboard, you will probably want to use:  
-# Option "!XkbModel" "pc102"  
-# If you have a US Microsoft Natural keyboard, you can use:  
-# Option "!XkbModel" "microsoft"  
-!EndSection  
-Section "!InputDevice"  
-Identifier "Mouse0"  
-Driver "mouse"  
-Option "Device" "/dev/mouse"  
-Option "Protocol" "IMPS/2"  
-Option "Emulate3Buttons" "off"  
-Option "ZAxisMapping" "4 5"  
-!EndSection  
-Section "Monitor"  
-Identifier "Sylvania F74"  
-!VendorName "Unknown"  
-!ModelName "Unknown"  
-!HorizSync 30 - 70  
-!VertRefresh 55 - 120  
-Option "dpms"  
-# Modelines go here if necessary. Use xvidtune to get proper values.  
-!EndSection  
-Section "Device"  
-Identifier "ATI Rage 128"  
-Driver "r128"  
-!BoardName "Unknown"  
-!EndSection  
-Section "Device"  
-Identifier "Linux Frame Buffer"  
-Driver "fbdev"  
-!BoardName "Unknown"  
-!EndSection  
-Section "Screen"  
-Identifier "Screen0"  
-Device "ATI Rage 128"  
-Monitor "Sylvania F74"  
-!DefaultDepth 24  
-Subsection "Display"  
-Depth 24  
-Modes "1400x1050" "1280x1024" "1152x864" "1024x768" "800x600"  
-!EndSubSection  
-Subsection "Display"  
-Depth 16  
-Modes "1600x1200" "1400x1050" "1280x1024" "1152x864" "1024x768" "800x600"  
-!EndSubSection  
-Subsection "Display"  
-Depth 8  
-Modes "1024x768" "800x600" "640x480"  
-!EndSubSection  
-!EndSection  
-Section "DRI"  
-Mode 0666  
-!EndSection  
-  
-  
-  
-  
- Yours may look quite different. This is just one possible configuration with  
-gratuitous comments from Red Hat (and me), and is for a fairly ordinary set  
-up. There is nothing exotic here like multiple screens or displays.  
-  
-  
-  
- It is beyond the scope of this document to explain this in detail. See the  
-XF86Config man page. Also, consider visiting  
-xfree86.org  
-and look for specific options that might apply to your card or other  
-hardware.  
-  
-  
-  
- Just one quick note on the "Screen" section above. Notice there are  
-three sub-sections, identified as "Display". Each sub-section  
-has a different "Depth" specified, (a.k.a. !ColorDepth). The  
-"Modes" also vary somewhat according to the respective  
-"Depth" setting. The active "Display" sub-section  
-that will be used, is determined by the "!DefaultDepth" setting  
-(unless over-ridden by command line options). The default in this example is  
-defined as "24", so the first sub-section will be used. Also,  
-the highest "Mode" listed in this sub-section will be the default  
-mode (resolution), which here is the first one listed. The first listed mode  
-also determines the viewable screen area, which can be smaller than the mode  
-(resolution) itself. In which case, you would have a virtual desktop that is  
-larger than the viewable screen. To have the viewable screen, and resolution  
-match, have the largest value as the first value listed for each  
-"Mode".  
-  
-  
-  
- Another note on the "Modes" here: what you see is the result of  
-my choices during Red Hat's __Xconfigurator's__ configuration. These  
-are standard resolutions, but do not have to be! This is only limited by what  
-your hardware can support. And you don't have to use standard width x height  
-ratios either. Something like 1355x1112 is a valid setting (if  
-your hardware supports it and it floats your boat!).  
-  
-  
-  
- The X server will reject any "Modes" it thinks are invalid. You  
-can cycle through valid modes to change screen resolution with  
-Ctrl-Alt-+ and Ctrl-Alt-- (that's the  
-keypad plus and minus keys).  
-  
-  
-  
- In versions prior to v4.x, you would also see many "Modeline"  
-statements that attempted to define the monitor's capabilities. These  
-statements would look something like:  
-  
-  
-  
-  
- # 1024x768 @ 100Hz, 80.21 kHz hsync  
-Modeline "1024x768" 115.5 1024 1056 1248 1440 768 771 781 802 -HSync -VSync  
-  
-  
-  
-  
- Explicit "Modeline" definitions are not required as of 4.x ;-)  
-This sometimes required hand editing to get optimal values in earlier versions of  
-XFree86, though is generally not necessary with v4.x. ''The XFree86 Video  
-Timings HOWTO'', http://www.linuxdoc.org/HOWTO/XFree86-Video-Timings-HOWTO/index.html  
-has a nice, but rather technical, explanation of this.  
-  
-  
-  
- If whatever configuration utility you are using, does not automatically  
-recognize your video card or monitor specifications correctly, you are  
-unlikely to get an optimal configuration. In such cases, you may have to  
-manually supply the correct values. This should be available from your  
-owner's manual (you kept that, right?). Or, check the manufacturer's web site.  
-  
-  
-  
- Again, hand editing of this file is generally unnecessary. Should you decide  
-this is indeed necessary, be careful. One small error may cause  
-X to fail. Any changes to this file will require  
-restarting X for the changes to take  
-effect.  
-  
-  
-  
- Using somebody else's XF86Config file, is generally a  
-bad idea since they are unlikely to have identical hardware.  
-  
-----  
-!!2.3. xvidtune and Monitor Tuning  
-  
- You probably want to get the most out of your hardware. If  
-X isn't configured optimally, consider re-running  
-your vendor's X configuration utility and try to  
-get better results. It is highly unlikely that you could hurt anything by  
-experimenting. Most modern monitors now have safeguards that prevent a  
-meltdown ;-)  
-  
-  
-  
-  
- If you over-do it though X may not be able to  
-start. For this reason, I prefer to use the "startx" way of  
-starting X (see below) while  
-"experimenting". This way if X  
-crashes, the display manager (GUI login) will not loop and cause you severe  
-headaches. __startx__ just gracefully goes back to a text  
-console screen, where an error message may be visible.  
-  
-  
-  
- Another way of tweaking monitor related settings is with XFree86's  
-__xvidtune__ program. This is run interactively and can be  
-used to adjust various settings (see man page). The simple dialog box has  
-sliders and buttons that allow user input and adjustment. The top part has  
-horizontal monitor settings on the left, and vertical settings on the right.  
-The buttons just below the sliders can be used to adjust each.  
-  
-  
-  
- This is sometimes used to adjust the viewable screen area, such as to center  
-it, or increase its size to fill the monitor's viewport. When  
-__xvidtune__ is launched, it defaults to the current settings.  
-  
-  
-  
- The bottom left corner has buttons that can "Apply" new  
-settings, "Test" new settings, or "Show" current  
-settings (i.e. dump to screen), among other things. Any changes made here are  
-not saved. If new settings are "Applied", it is just for  
-the current session. Example output of __xvidtune__  
-"Show":  
-  
-  
-  
-  
- Vendor: Unknown, Model: Unknown  
-Num hsync: 1, Num vsync: 1  
-hsync range : 30.00 - 70.00  
-vsync range : 55.00 - 120.00  
-"1400x1050" 122.00 1400 1488 1640 1880 1050 1052 1064 1082 +hsync +vsync  
-  
-  
-  
-  
- The last line is the "Modeline" being used to drive the current  
-screen. See ''The XFree86 Video  
-Timings HOWTO'', http://www.linuxdoc.org/HOWTO/XFree86-Video-Timings-HOWTO/index.html,  
-for more on "Modelines".  
-  
-  
-  
-  
- You can test modification, and apply them to the current session.  
-For changes to be made permanent, they will have to be added manually to  
-the "Monitor" section of XF86Config (or  
-XF86Config-4 for v.4.x) with a text editor.  
-  
-  
-  
- __xvidtune__ will dutifully warn of you of the hazards of  
-playing with the monitor settings. It is unlikely you can hurt anything  
-with modern monitors. But it is best used to make minor adjustments. Use at  
-your own risk!  
-  
-----  
-!!!3. Running X  
-  
- Starting an X session is typically done in one of  
-two ways: the X session is started via a display  
-manager (like __xdm__), and the user logs in at a GUI screen.  
-Or, the user starts X manually after logging in to  
-a text console. The latter is typically done with the  
-__startx__ command, which is a simple shell script wrapper  
-for __xinit__. X runs with root  
-privileges in either case, since it needs raw access to hardware devices.  
-  
-  
-  
- Typically, which method is used, is determined by the system  
-"runlevel". The default runlevel to launch at boot is set  
-generally set in /etc/inittab on Linux:   
-  
-  
-  
-  
- # Run xdm in runlevel 5  
-x:5:respawn:/etc/X11/xdm -nodaemon  
-  
-  
-  
-  
- That would start __xdm__, and thus  
-X, at runlevel 5. It will "respawn",  
-if it dies or is stopped for any reason. You can also use the  
-"__init__" command to change runlevels without  
-rebooting (see man page).  
-  
-  
-  
- Let's look briefly at both approaches, and then some additional configuration  
-to set up the user's working environment.  
-  
-----  
-!!3.1. startx  
-  
- __startx__ will start X by first  
-invoking __xinit__. By itself, this would put you at a blank,  
-fuzzy looking, bare-bones desktop with no Window Manager loaded.  
-__xinit__ basically takes two sets of command line  
-arguments: client specifications (programs to run, etc), and server  
-specifications (X server options), separated by "--". If no  
-client program is specified on the command line, __xinit__  
-will look for a .xinitrc file in the user's home  
-directory, to run as a shell script. If found, this then would in turn run  
-whatever user specified commands to set up the environment, or launch  
-programs that the file contained. If this file does not exist,  
-__xinit__ will use the following initial command:  
-  
-  
-  
-  
-  
-xterm -geometry +1+1 -n login -display :  
-  
-  
-  
-  
- If no .xserverrc is found in the user's home directory,  
-X itself will be started with the following command:  
-  
-  
-  
-  
- X :  
-  
-  
-  
-  
- As you see, this is not overly helpful as it just launches one  
-xterm. The __startx__  
-shell wrapper provides additional functionality and flexibility to  
-__xinit__. __startx__ will invoke  
-__xinit__ for us, and provide some simple configuration  
-options as well. You can also issue commands such as the following, for  
-instance:  
-  
-  
-  
-  
-  
-  
-startx -- -dpi 100 -depth 16 #force X to 100 dots per inch  
-#and colordepth of 16 (X v4 syntax)  
-  
-  
-  
-  
- Anything after the double dashes are passed as arguments directly to the X  
-server via __xinit__. In this example, you can force  
-X to the resolution of your preference, and still  
-have it use the configuration files we will cover later in this document. See  
-the Xserver man page for more command line options.  
-  
-  
-  
- Instead of issuing the same command line every time, it is easier to use the  
-configuration files to store this type of information for us.  
-  
-  
-  
- If you take a look at the __startx__ script  
-(/usr/X11R6/bin/startx on my system), you see it uses  
-two default configuration files to help set up the  
-X environment: xinitrc and  
-xserverrc. It looks first in  
-/etc/X11/xinit/, for the system wide files. It then  
-checks the user's home directory for similar files, which will take  
-precedence if found. Note that the latter are Unix style "dot" files  
-(e.g. ~/.xinitrc), and are executable shell scripts.  
-  
-  
-  
- You normally would not want to edit the system wide files, but you can freely  
-copy these to your home directory as a starting point, or just start from  
-scratch. As you can tell by the names, one helps set up the X server, and one  
-sets up __xinit__ by executing commands, preparing the  
-environment and possibly starting client programs like  
-__xterm__ or a Window Manager (yes, it's a client too).  
-  
-----  
-!3.1.1. xserverrc  
-  
- As with all XFree86 configuration files, this is a plain text file, and is  
-usually a simple, one line statement to start the X server. It can include  
-any valid command line options supported by your X  
-installation. If you always start X with your own  
-options, this should be easier than typing the options each time. One  
-possible ~/.xserverrc:  
-  
-  
-  
-  
- exec X :0 -dpi 100 -nolisten tcp  
-  
-  
-  
-  
- This will start X on display :, the first  
-"display", at a dots-per-inch resolution of 100, and disables  
-TCP connections. See the Xserver man page for other valid options. This is  
-just an example.  
-  
-----  
-!3.1.2. xinitrc  
-  
- xinitrc is used to set up a suitable  
-X environment, and to launch other programs, a.k.a  
-"clients" that we may want available as soon as  
-X is started. You likely have a system wide  
-xinitrc to start a predefined set off programs. To  
-customize this, create your own in your home directory. Name it  
-.xinitrc, make sure it is an executable script, and  
-__chmod +__. An example (slightly modified from the original  
-on my system):  
-  
-  
-  
-  
-#!/bin/sh  
-# $XConsortium: xinitrc.cpp,v 1.4 91/08/22 11:41:34 rws Exp $  
-userresources=$HOME/.Xresources  
-usermodmap=$HOME/.Xmodmap  
-# merge in defaults and keymaps  
-if [[ -f $userresources ]; then  
-xrdb -merge $userresources  
-fi  
-if [[ -f $usermodmap ]; then  
-xmodmap $usermodmap  
-fi  
-if [[ -z "$BROWSER" ] ; then  
-# we need to find a browser on this system  
-BROWSER=`which netscape`  
-if [[ -z "$BROWSER" ] || [[ ! -e "$BROWSER" ] ; then  
-# not found yet  
-BROWSER=  
-fi  
-fi  
-if [[ -z "$BROWSER" ] ; then  
-# we need to find a browser on this system  
-BROWSER=`which lynx`  
-if [[ -z "$BROWSER" ] || [[ ! -e "$BROWSER" ] ; then  
-# not found yet  
-BROWSER=  
-else  
-BROWSER="xterm -font 9x15 -e lynx"  
-fi  
-fi  
-export BROWSER  
-# start some nice programs  
-if [[ -f $HOME/.Xclients ]; then  
-exec $HOME/.Xclients  
-else  
-xclock -geometry 50x50-1+1 8  
-xterm -geometry 80x50+494+51 8  
-if [[ -f /usr/X11R6/bin/fvwm ]; then  
-exec fvwm  
-else  
-exec twm  
-fi  
-fi  
-#eof  
-  
-  
-  
-  
- Briefly, what this script does, is set up our working environment, with  
-__xmodmap__ (keyboard) and __xrdb__  
-(application resource settings). More on these below. Then the shell variable  
-$BROWSER is set for a GUI environment (Netscape in this  
-example) so that any applications that might expect this, have a reasonable  
-choice available. Then the presence of the file Xclients  
-is checked, both as a system wide file and in the user's home directory. In  
-this particular example, this is where any client applications are to be  
-started, including a Window Manager (see below). These could just have as  
-easily been started here if we had wanted to. If an  
-Xclients file can't be found, then a Window Manager is  
-started for us. Either __fvwm__, if available, or XFree86's  
-minimalist __twm__ if not. If for some reason, neither of  
-these can be started, the script would exit, and X  
-would fail to start.  
-  
-----  
-!3.1.3. Xclients  
-  
- Everything up to this point has followed pretty much a standard and  
-predictable sequence of events. To summarize, we have invoked  
-__startx__, which in turn invoked __xinit__,  
-which has parsed xinitrc for initial settings. Most  
-Linuxes should follow this same sequence, though the various values and  
-settings may differ.  
-  
-  
-  
- We now are at the last link in the chain where the user normally would  
-specify his or her preferences, including the Window Manager and/or  
-desktop environment to be used. The system will provide sane, though possibly  
-uninteresting, defaults if the user has not done so. Presumably, this is why  
-you are here ;-)  
-  
-  
-  
- The Window Manager, or desktop environment, is typically the last application  
-started. If you want other programs (like __xterm__) started,  
-they should be started before the Window Manager and  
-"backgrounded" with an "8". This can all be  
-done in the user's ~/.xinitrc. Or as in the above  
-example, the actual applications are started from yet another script. Let's  
-look at one short, hypothetical such script, .Xclients:  
-  
-  
-  
-  
-  
-#!/bin/bash  
-# ~/.Xclients, start my programs.  
-xset s off s noblank  
-xset m 30/10 4  
-xset r rate 200 40  
-xscreensaver 8  
-rxvt -geometry 80x50-50+150 8  
-echo Starting Window Manager...  
-if [[ -x /usr/X11R6/bin/wmaker ]; then  
-echo `date`: Trying /usr/X11R6/bin/wmaker... |tee -a ~/.wm-errors 2b81  
-exec /usr/X11R6/bin/wmaker bb ~/.wm-errors 2b81  
-fi  
-echo `date`: Failed, trying fvwm... |tee -a ~/.wm-errors 2b81  
-# let's try regular fvwm (!AnotherLevel doesn't work with fvwm1).  
-if [[ -n "$(type -path fvwm)" ]; then  
-# if this works, we stop here  
-exec fvwm bb ~/.wm-errors 2b81  
-fi  
-echo `date`: Failed, trying twm... |tee -a ~/.wm-errors 2b81  
-# wow, fvwm isn't here either ...  
-# use twm as a last resort.  
-exec twm bb ~/.wm-errors 2b81  
-# Dead in the water here, X will exit as well, sigh...  
-echo `date`: Unable to start a Window Manager ... |tee -a ~/.wm-errors 2b81  
-# eof  
-  
-  
-  
-  
- This really isn't so different than what xinitrc was  
-doing at all. We added a few wrinkles, including starting a screen saver, a  
-different terminal emulator that this user prefers (__rxvt__),  
-with even more setting up of the environment (monitor, mouse and keyboard) using  
-__xset__ this time, and a different Window Manager than was  
-available with the system defaults. This is in the user's home directory, so  
-it won't be overwritten during upgrades too.  
-  
-  
-  
- Actually, X has already started at this point, and  
-we are just putting the finishing touches on the configuration. Notice the  
-Window Managers are not "backgrounded" with "8"  
-here. This is important! Something has to run in the foreground, or  
-X will exit. We didn't start a desktop environment  
-in this example, like KDE or  
-GNOME, but if we did, this final application  
-would have to be __gnome-session__ or  
-__startkde__ instead. Since we are rolling our own here, if we  
-wanted to change Window Managers, all we have to do is edit this file, and  
-restart X. Vendor supplied configurations may be  
-more complex than this, but the same principles apply.  
-  
-  
-  
- As an afterword, do not think that any initial client applications  
-''must'' be started as we've done here. This is how it has  
-been traditionally done, and some may prefer this approach. Most window  
-managers have their own built-in ways to start initial programs, as do  
-KDE and GNOME. See  
-the respective documentation.  
-  
-----  
-!!3.2. Display Managers  
-  
- The other, more common, approach is the "GUI log-in", where  
-X is running before log-in. This is done with the  
-help of a "display manager", of which there are various  
-implementations. XFree86 includes __xdm__ (X Display Manager)  
-for this purpose, though your distribution may use one of the others such as  
-__gdm__ (GNOME) or __kdm__  
-(KDE).  
-  
-  
-  
- Display managers really do much more than enable GUI style log-ins. They  
-are also used to manage local as well as remote "displays" on a  
-network. We won't get into details on this here, but it is nicely covered in  
-the ''Remote X Apps Mini HOWTO'' and the ''XDMCP  
-HOWTO'' (see the links section). For  
-our purposes here, they provide similar services to __getty__  
-and __login__, which allow users to log into a system and  
-start their default shell, but in a GUI environment.   
-  
-  
-  
- Here is an example of a more advanced usage of what else a display manager  
-might be used for, from Diego Zamboni:  
-  
-  
-  
- I have two X sessions running with different resolutions. I switch between  
-them depending on whether my laptop is connected to an external monitor or  
-using its own LCD display.  
-  
-  
-  
- Here's my /usr/lib/X11/xdm/Xservers file that initiates  
-both displays:  
-  
-  
-  
-  
- :1 local /usr/X11R6/bin/X :1 -layout 1024x768  
-:0 local /usr/X11R6/bin/X :0 -layout 1600x1200  
-  
-  
-  
-  
- Then I have "1024x768" and "1600x1200" defined as  
-"server layouts" in my  
-/etc/X11/XF86Config-4, as follows:  
-  
-  
-  
-  
- Section "!ServerLayout"  
-Identifier "1600x1200"  
-Screen "Screen0" 0  
-!InputDevice "Mouse0" "!CorePointer"  
-!InputDevice "Keyboard0" "!CoreKeyboard"  
-!EndSection  
-Section "!ServerLayout"  
-Identifier "1024x768"  
-Screen "Screen1" 0  
-!InputDevice "Mouse0" "!CorePointer"  
-!InputDevice "Keyboard0" "!CoreKeyboard"  
-!EndSection  
-## snip ...  
-Section "Screen"  
-Identifier "Screen0"  
-Device "S3 Savage/MX"  
-Monitor "Monitor0"  
-!DefaultDepth 16  
-Subsection "Display"  
-Depth 16  
-Modes "1600x1200" "1280x1024" "1024x768"  
-!EndSubsection  
-!EndSection  
-Section "Screen"  
-Identifier "Screen1"  
-Device "S3 Savage/MX"  
-Monitor "Monitor0"  
-!DefaultDepth 16  
-Subsection "Display"  
-Depth 16  
-Modes "1024x768" "800x600"  
-!EndSubsection  
-!EndSection  
-  
-  
-  
-  
- Note the use of "Identifiers" here. Diego is starting two  
-separate "displays" here. Then he can choose which one he  
-wants when he logs in.  
-  
-  
-  
- Most display managers are derived from XFree86's venerable  
-__xdm__, and add their own enhancements. Let's look at the  
-most popular ones briefly.   
-  
-----  
-!3.2.1. xdm  
-  
- __xdm__ can be configured with configuration files located in  
-/etc/X11/xdm/,  
-/usr/X11R6/lib/X11/xdm, or similar locations depending  
-on your system. These are system wide files. The file  
-xdm-config is the main configuration file, and mostly  
-describes where to find secondary configuration files:  
-  
-  
-  
-  
- ! $XConsortium: xdm-conf.cpp /main/3 1996/01/15 15:17:26 gildea $  
-!DisplayManager.errorLogFile: /var/log/xdm-errors  
-!DisplayManager.servers: /etc/X11/xdm/Xservers  
-!DisplayManager.accessFile: /etc/X11/xdm/Xaccess  
-! All displays should use authorization, but we cannot be sure  
-! X terminals will be configured that way, so by default  
-! use authorization only for local displays :, :1, etc.  
-!DisplayManager._.authorize: true  
-!DisplayManager._1.authorize: true  
-! The following three resources set up display :0 as the console.  
-!DisplayManager._.setup: /etc/X11/xdm/Xsetup_  
-!DisplayManager._.startup: /etc/X11/xdm/!GiveConsole  
-!DisplayManager._.reset: /etc/X11/xdm/!TakeConsole  
-!  
-!DisplayManager*resources: /etc/X11/xdm/Xresources  
-!DisplayManager*session: /etc/X11/xdm/Xsession  
-!  
-! SECURITY: do not listen for XDMCP or Chooser requests  
-! Comment out this line if you want to manage X terminals with xdm  
-!DisplayManager.requestPort:  
-  
-  
-  
-  
- The "!" denotes comments. The command that starts the X server  
-is in /etc/X11/xdm/Xservers in this particular example  
-as defined by "!DisplayManager.servers", and is the equivalent to  
-xserverrc that was used for __startx__ X  
-server start up commands, but the syntax is slightly different here. The  
-contents of /etc/X11/xdm/Xservers on my system are simply:  
-  
-  
-  
-  
- :0 local /usr/X11R6/bin/X  
-  
-  
-  
-  
- This starts X on the first local display  
-(designated by ). Any special command line arguments that you want to add go  
-here at the end.  
-  
-  
-  
- Below is a sample /etc/X11/xdm/Xsetup_0 which is  
-used to configure the log-in screen only. Notice that we're using a shell  
-script here, and it's calling __xv__ (a graphics display  
-program) to set the background to a nice image (instead of the boring black  
-and white background pattern), and if that fails,  
-__xsetroot__ is then invoked to at least try to set the  
-background to a nicer blue color. This does not configure the login widget  
-itself -- just other things that might be wanted on the screen during login.  
-  
-  
-  
-  
-  
-  
-#!/bin/sh  
-xconsole -geometry 480x100--0 -daemon -notify -verbose -fn \  
-'-schumacher-clean-medium-r-*-*-10-*-*-*-*-*-*-*' -exitOnFail 8  
-/usr/X11R6/bin/xv -quit -root /usr/share/pixmaps/Backgrounds/!InDreams.jpg \  
-|| xsetroot -solid darkblue  
-  
-  
-  
-  
- /etc/X11/xdm/Xresources controls the X  
-"resources" used during log in. In this context, "resources"  
-are user preferences for such items as fonts and colors (described in more  
-detail below). Below is a snippet that sets up fonts for the log-in widget:  
-  
-  
-  
-  
- #if WIDTH b 800  
-xlogin*greetFont: -adobe-helvetica-bold-o-normal--24-240-75-75-p-138-iso8859-1  
-xlogin*font: -adobe-helvetica-medium-r-normal--18-180-75-75-p-103-iso8859-1  
-xlogin*promptFont: -adobe-helvetica-bold-r-normal--18-180-75-75-p-103-iso8859-1  
-xlogin*failFont: -adobe-helvetica-bold-r-normal--18-180-75-75-p-103-iso8859-1  
-#else  
-xlogin*greetFont: -adobe-helvetica-bold-o-normal--17-120-100-100-p-92-iso8859-1  
-xlogin*font: -adobe-helvetica-medium-r-normal--12-120-75-75-p-69-iso8859-1  
-xlogin*promptFont: -adobe-helvetica-bold-r-normal--12-120-75-75-p-69-iso8859-1  
-xlogin*failFont: -adobe-helvetica-bold-o-normal--14-140-75-75-p-82-iso8859-1  
-#endif  
-  
-  
-  
-  
- As you can see this is using helvetica as the preferred font, with different  
-point sizes and dots per inch depending on the screen size. This is  
-customizable to suit individual needs. (See below for more on understanding X  
-font naming conventions.) Various other aspects can similarly be configured.  
-  
-  
-  
- /etc/X11/xdm/Xsession is the rough equivalent to  
-xinitrc for __startx__. It will similarly  
-set up a default environment for keyboard, etc. And can also start either  
-KDE or GNOME, and other  
-X client programs. This is the system wide  
-configuration file. It should also check the user's home directory for  
-~/.xsession, and possibly  
-~/.Xclients, which would contain the user's preferred  
-environment and start up programs, just as ~/.xinitrc  
-did with __startx__. Again, the files in a user's home  
-directory may be created or modified by the user any time and must be  
-executable shell scripts.  
-  
-  
-  
- We won't include an ~/.xsession example here, since it  
-would be very similar to the ~/.xinitrc and  
-~/.Xclients examples above.  
-  
-  
-  
- We've looked only briefly at the main __xdm__ configuration files.  
-Be sure to read the man page, and look at what is installed locally, for more  
-information. Let's look now at __gdm__ and __kdm__.  
-We'll just highlight significant differences, since they essentially provide  
-the same functionality.  
-  
-----  
-!3.2.2. gdm  
-  
- __gdm__ is the default display manager for  
-GNOME. __gdm__ was written  
-from scratch, but functions similarly to __xdm__. The main  
-configuration file is gdm.conf, typically located as  
-/etc/X11/gdm/gdm.conf. This is quite different looking  
-than xdm-config. Comments are denoted with a  
-"#", and the file has sections, with section headers enclosed  
-in square brackets. The command to start X is in  
-the "[[servers]" section:  
-  
-  
-  
-  
- [[servers]  
-=/usr/bin/X11/X  
-#1=/usr/bin/X11/X  
-  
-  
-  
-  
- Notice this has potentially two displays set up, but the second one is  
-commented out. Add any additional X startup  
-options here, e.g. "-dpi 100". The log-in screen and log-in  
-widget are configured in the "[[greeter]" section.   
-  
-  
-  
- Start up clients and programs are determined by the "!SessionDir"  
-statement in the "[[daemon]" section. On my installation, this  
-points to /etc/X11/gdm/Sessions/, which contains several  
-short scripts. If I look at my Default script, it  
-actually executes /etc/X11/xdm/Xsession, which in turn  
-would execute ~/.xsession, if present. So at this final  
-stage, __gdm__ acts very much like __xdm__.  
-  
-  
-  
- GNOME includes the __gdmconfig__  
-utility to control many aspects of __gdm__ behavior.   
-  
-----  
-!3.2.3. kdm  
-  
- __kdm__ is the display manager from KDE.  
-The main configuration file for __kdm__ is  
-kdmrc and is typically installed  
-as /etc/kde/kdm/kdmrc. As is the case with  
-gdm.conf, kdmrc uses  
-"#" for comments, and has sections with section headers in  
-similar square brackets. __kdm__ configuration can also be  
-edited with the __kcontrol__ utility.  
-  
-  
-  
- The visible desktop is configured in the "[[Desktop*]"  
-section(s), and by the "Setup" directive which should point to a  
-file like /usr/share/config/kdm/Xsetup or  
-/etc/X11/xdm/Xsetup_. This will accomplish the same  
-thing as __xdm__'s Xsetup_0 does: namely  
-running any programs the user might want such as __xconsole__.  
-  
-  
-  
- The command to launch the X server is the "Xservers" directive  
-in the "[[General]". Again, this should point to a file such as  
-/etc/X11/xdm/Xservers, and uses the same syntax as  
-__xdm__:  
-  
-  
-  
-  
- :0 local /usr/X11R6/bin/X  
-  
-  
-  
-  
- Any command line options for the X server, go here.  
-  
-  
-  
- The login widget itself is configured in the "[[X-*-Greeter]"  
-section(s). Compiled in defaults are used if the user does not specify any.  
-  
-  
-  
- KDE includes the __kdmdesktop__  
-utility to control some aspects of __kdm__ behavior, mostly  
-just the login background.  
-  
-----  
-!!!4. More X Configuration  
-  
- Before taking a look at various configuration mechanisms for X servers and  
-clients, it should be noted that the advent of Desktop Environments like  
-KDE have become popular in part because they can  
-control much of the user interaction configuration themselves with nice,  
-"user friendly" GUI controls. And in fact,  
-the compliant applications that are part of the respective Desktops will be  
-best configured through the Desktop's configuration tools, or the  
-application's own GUI configuration methods. So, for instance,  
-__gtop__, a GNOME client  
-application, is best configured via GNOME or  
-__gtop's__ own menus. But this is not true of all  
-X applications.   
-  
-----  
-!!4.1. X Resources  
-  
- The X server can store various configuration values for client programs  
-so they are readily available when needed. If the application supports this,  
-it will use these as defaults whenever that program is invoked. These are  
-known as "Resources", and are often used to define user preferences  
-on a per application basis for fonts, colors, screen placement (geometry) and  
-various other attributes. This makes it easy to customize applications.  
-  
-  
-  
- Resources are specified as text strings (e.g. Netscape*blinkingEnabled:  
-False) that can be read from disk in various places when  
-X is starting, or even interactively defined on the  
-command line. Program components are named in a hierarchical fashion, with  
-each object in the hierarchy identified by a class as well as an instance  
-name. At the top level of the hierarchy is the class and instance name of the  
-application itself. Typically, the class name of the application is the  
-same as the program name, but with the first letter capitalized (e.g. Vim or  
-Emacs) although some programs that begin with the letter "X"  
-also capitalize the second letter for historical reasons (e.g. XTerm).  
-Each definition will specify a class (or instance), with corresponding  
-resource and value. Below this in the hierarchy are the various attributes  
-that make up the definable aspects of the application.   
-  
-  
-  
- Traditionally, most X programs were configured  
-this way. This is not as true today with the advent of Desktop Environments  
-which often have their own configuration mechanisms.  
-  
-  
-  
- As an example, say we prefer to run __xterm__ with a blue  
-background. So if we run it from the command line, we would run it as:  
-  
-  
-  
-  
- xterm -bg blue 8  
-  
-  
-  
-  
- If this is our preference, it would be easier to put this preference in a  
-file somewhere, and have the system use our preference. That way whenever we  
-started __xterm__, it would use our preferred value, and we  
-wouldn't need the command line options (unless as an override).  
-  
-  
-  
- The basic X resource syntax is expressed like:  
-  
-  
-  
-  
- `programb`bindingb`widgetb`bindingb`widgetb`...b`resourceb:`valueb  
-  
-  
-  
-  
- Which, in real life, typically looks something like:  
-  
-  
-  
-  
- xterm*fontMenu*background: darkblue  
-  
-  
-  
-  
- It should be obvious what this does. The use of "*" in the  
-definition, is called a "loose binding" and acts as a  
-wild-card. Meaning there may be gaps in the widget hierarchy. For instance:  
-  
-  
-  
-  
- xterm*background: darkblue  
-  
-  
-  
-  
- This would also give a dark blue background for the __xterm__  
-fontMenu, but also any other __xterm__ properties that also have a  
-"background" attribute (e.g. window background, etc), no matter  
-where they may be in the widget hierarchy. Similarly:  
-  
-  
-  
-  
- *background: darkblue  
-  
-  
-  
-  
- This would define the background for any and all programs that support it -- not just  
-__xterm__. Using a "." in place of a  
-"*" would be more precise, and will not allow for wild-card gaps  
-in the hierarchy. Also, the application must support the particular widget  
-attribute. "Background" is a fairly safe bet, but many  
-applications will have more specialized resources that are not so obvious. It  
-is best to check local documentation (man pages, etc), or see if an  
-application has an included examples. For instance, __Netscape__  
-generally comes with an Netscape.ad file that has an extensive  
-set of resource definitions that can be customized.  
-  
-  
-  
- X resources are typically stored in more than one  
-place (see below) and are processed by the __xrdb__ command (see man page).  
-  
-----  
-!4.1.1. App Defaults  
-  
- One way of storing preferred application resources is via files named for the  
-application in an "app-defaults" directory. For instance, on my  
-system, these are in /usr/X11R6/lib/X11/app-defaults/,  
-though this may vary according to options your vendor has chosen. This  
-directory contains a number of files for such well known  
-X applications as __xterm__,  
-__xclock__, __xcalc__,  
-__xload__, and so on. All in all, it is a relatively small  
-number of applications in the overall scheme of things. So not all  
-applications use this scheme. In fact, most do not.  
-  
-  
-  
- Each file will contain resource definitions for that application. The X  
-server loads these by itself during start up. A brief example from  
-XTerm-color:  
-  
-  
-  
-  
- ! $XFree86$  
-#include "XTerm"  
-*VT100*colorMode: on  
-*VT100*dynamicColors: on  
-! Uncomment this use color for underline attribute  
-!*VT100*colorULMode: on  
-!*VT100*underLine: off  
-! Uncomment this to use color for the bold attribute  
-!*VT100*colorBDMode: on  
-*VT100*color0: black  
-*VT100*color1: red3  
-*VT100*color2: green3  
-*VT100*color3: yellow3  
-*VT100*color4: blue3  
-*VT100*color5: magenta3  
-*VT100*color6: cyan3  
-*VT100*color7: gray90  
-*VT100*color8: gray30  
-*VT100*color9: red  
-*VT100*color10: green  
-*VT100*color11: yellow  
-*VT100*color12: blue  
-*VT100*color13: magenta  
-*VT100*color14: cyan  
-*VT100*color15: white  
-*VT100*colorUL: yellow  
-*VT100*colorBD: white  
-  
-  
-  
-  
- This is mostly various color definitions. The application classname is not  
-explicitly stated, and is assumed from the filename. So think of each line as  
-starting: XTerm-color*. Also, notice at the top, the  
-#include "XTerm" line, which "includes" the  
-resource definitions for __XTerm__, a much longer file with a  
-more diverse set of definitions. (Not included due to length, but worth  
-looking at.) These files provide system wide defaults, and generally  
-speaking, would not normally be edited by the user.  
-  
-  
-----  
-!4.1.2. Xdefaults  
-  
- Another common method of reading in resource preferences, is with an  
-Xdefaults file. Or, sometimes the naming  
-scheme may be Xresources instead. This may exist as a  
-system wide file, such as /etc/X11/Xresources.  
-Of course, the user is free to create a personal version in his home  
-directory, e.g. ~/.Xdefaults. The user's version will  
-over-ride any system wide settings, and will remain after system upgrades.  
-Obviously, this is the place to put your own preferences.  
-  
-  
-  
- Xresources files are read into the resource database  
-with the __xrdb__ command. Example:  
-  
-  
-  
-  
- xrdb -merge ~/.Xresources  
-  
-  
-  
-  
- This can be done interactively at the command line, or placed in a script and  
-run automatically as the X session is started. In  
-the case of system wide files, this should be taken care of by the vendor  
-supplied start up scripts. Generally, such scripts will also check the user's  
-home directory as well (see the xinitrc example above).  
-So probably all that need be done, is to create the file with a text editor.  
-  
-  
-  
- Here's an example to illustrate a very few of the many things that might  
-be done with an .Xdefaults file:  
-  
-  
-  
-  
- ! This is a comment ;-)  
-#ifdef COLOR  
-*customization: -color  
-#endif  
-!! Let's cast a wide net, for any app supporting these  
-! Blink instead of beeping  
-*visualBell: True  
-*scrollTtyOutput: False  
-*scrollKey: True  
-! See Netscape.ad for many settable resources  
-Netscape*noAboutSplash: True  
-Netscape*documentFonts.sizeIncrement: 5  
-Netscape*documentFonts.xResolution*iso-8859-1: 120  
-Netscape*documentFonts.yResolution*iso-8859-1: 120  
-netscape-navigator*geometry: 960x820+240+140  
-emacs*Background: !DarkBlue  
-emacs*Foreground: Wheat  
-emacs*pointerColor: Orchid  
-emacs*cursorColor: Orchid  
-emacs*bitmapIcon: on  
-emacs*font: 10x20  
-! GVim colors, etc  
-!! GTK versions of gvim will not use all these.  
-Vim*useSchemes: all  
-Vim*sgiMode: true  
-Vim*useEnhancedFSB: true  
-Vim.foreground: Black  
-!Vim.background: lightyellow2  
-Vim*background: white  
-! geometry: width x height  
-Vim.geometry: 88x40  
-Vim*font: -misc-fixed-medium-r-normal--20-200-75-75-c-100-iso8859-15-*5  
-Vim*menuBackground: yellow  
-Vim*menuForeground: black  
-rxvt*backspacekey: ^?  
-rxvt*background: Black  
-rxvt*foreground: wheat  
-rxvt*cursorColor: Orchid  
-rxvt*geometry: 100x18+40+300  
-rxvt*title: Linux  
-rxvt*reverseVideo: false  
-!rxvt*backgroundPixmap: ~/penguinitis.xpm  
-rxvt*scrollBar: true  
-rxvt*reverseWrap: true  
-rxvt*font: -*-lucidatypewriter-medium-*-*-*-14-*-*-*-*-*-*-*  
-rxvt*fullCursor: true  
-rxvt*saveLines: 1500  
-rxvt*menu: ~/rxvt.menu  
-XTerm*saveLines: 1500  
-! Do not clear the screen after the program exits  
-XTerm*VT100*titeInhibit: true  
-! Fix up xterm's keybindings  
-xterm*VT100.translations: #override \  
-`!KeybBackSpace: string(0x7F) \n\  
-`!KeybInsert: string(0x1b) string("[[2~")\n\  
-`!KeybDelete: string(0x1b) string("[[3~")\n\  
-`!KeybHome: string(0x1b) string("[[1~")\n\  
-`!KeybEnd: string(0x1b) string("[[4~")\n\  
-`!KeybPage_Up: string(0x1b) string("[[5~")\n\  
-`!KeybPage_Down: string(0x1b) string("[[6~")\n\  
-`!KeyPressbPrior : scroll-back(1,page)\n\  
-`!KeyPressbNext : scroll-forw(1,page)  
-! Ghostview  
-Ghostview*Font: *-helvetica-bold-r-normal--12-*-*-*-*-*-*  
-Ghostview*!BorderColor: white  
-Ghostview*Text*Font: rk14  
-Ghostview*Background: #d9d9d9  
-!Ghostview*Foreground: white  
-ghostview.form.pageview.page.background: white  
-ghostview.form.pageview.page.foreground: black  
-.ghostview.zoom.form.page.background: white  
-.ghostview.zoom.form.page.foreground: black  
-! xscreensaver !  
-! Time out after 12 minutes, cycle mode after each 2  
-xscreensaver.timeout: 12  
-xscreensaver.cycle: 5  
-! Run low priority, and fade between modes  
-xscreensaver.nice: 12  
-xscreensaver.fadeSeconds: 2  
-XFontsel.menu.options.showUnselectable: False  
-  
-  
-  
-  
- Hopefully, these few examples will give you some ideas to build on.  
-X does not need to be restarted if  
-__xrdb__ is used interactively from the command line after  
-making changes. The effects are immediate.  
-  
-  
-  
- Resources are sometimes available also as command line options. See below.  
-Command line options will over-ride any existing resource definitions.  
-  
-----  
-!!4.2. xmodmap, the Keyboard and Mice  
-  
- The keyboard and mouse, as well as other possible input devices, are defined  
-in XF86Config (or XF86Config-4).  
-There is a keyboard layout that is defined based on the preferred language:  
-  
-  
-  
-  
- Section "!InputDevice"  
-Identifier "Keyboard0"  
-Driver "keyboard"  
-Option "!XkbLayout" "us"  
-!EndSection  
-  
-  
-  
-  
- This gives us our default keyboard layout. Valid layout labels are listed in  
-/usr/X11R6/lib/X11/xkb/symbols. Also, the  
-__setxkbmap__ utility can be used to change this  
-interactively.  
-  
-  
-  
- X is highly customizable, and we can modify the  
-keyboard and mouse pointer mappings to suit our own preferences. The utility  
-to do this is __xmodmap__ (see man page). You don't like where  
-the capslock key is? So move it ;-)  
-  
-  
-  
- Like __xrdb__, __xmodmap__ can be run from the  
-command line. Or, preferred settings can be stored in a file. Typically this  
-is ~/.Xmodmap, or similar. If your  
-X start up files don't parse this, then edit as  
-appropriate so that they do (probably from ~/.xinitrc or  
-~/.xsession).  
-  
-  
-  
- You can view your current key and mouse mappings with: __xmodmap -pk  
--pp |less__. This will print out all active "keycode"  
-values, with corresponding "keysym" values, and any keysym names  
-that __xmodmap__ knows about (e.g. "!BackSpace").  
-And should also give you an idea of how __xmodmap__  
-understands key and mouse events. There are two keysyms per keycode. The  
-second is the shifted value. XFree86's __xev__ utility can be  
-used to dump a lot of information on key-presses and mouse events  
-interactively. Pay attention to the "keycode" value. That is  
-what you will need to know in order to re-map.  
-  
-  
-  
- __xmodmap__ is often used to make minor keyboard adjustments,  
-like proper Backspace/Delete mapping. Or can be used make major adjustments  
-such as for international mappings. You can only re-map keys and mouse events  
--- you cannot assign macros to key events (your Window Manager or Desktop  
-might have some of this functionality).  
-  
-  
-  
- Setting up international keyboards in nicely discussed in http://www.linuxdoc.org/HOWTO/mini/Intkeyb/index.html.  
-Also, a search of http://google.com/linux  
-will turn up many creative examples.  
-  
-  
-  
- The man page has many brief examples of various usages. Here is what an  
-one hypothetical ~/.Xmodmap might look like:  
-  
-  
-  
-  
- ! /home/hal/.Xmodmap, last change 10/03/01  
-!  
-! Force backspace to 22 and Delete to 111  
-keycode 22 = !BackSpace  
-keycode 111 = Delete  
-!  
-! My keyboard handles right and left Alt differently. Make the  
-! Right act like the Left to avoid digital gymnastics.  
-keycode 63 = Alt_L  
-keycode 113 = Meta_L  
-!  
-! Hard-code the keypad to numeric values as if numlock is always on  
-! since I never use it for anything else.  
-keycode 79=7  
-keycode 80=8  
-keycode 81=9  
-keycode 83=4  
-keycode 84=5  
-keycode 85=6  
-keycode 87=1  
-keycode 88=2  
-keycode 89=3  
-keycode 90=  
-keycode 91=period  
-keycode 86 = plus  
-! deactivate Num_Lock key since we don't need it now.  
-keycode 77 =  
-!  
-! My capslock is next to tab. I hit it by mistake sometimes,  
-! and don't use it anyway. So make capslock act like Tab.  
-keycode 66 = Tab  
-clear lock  
-!  
-! Reverse mouse buttons for left-handed people  
-pointer = 3 2 1  
-  
-  
-  
-  
- As with many XFree86 files, the "!" represents a comment.  
-Another possible use, is to redefine those annoying "Windows"  
-keys to something useful. Hopefully this gives an idea of some things one  
-might want to do to make the keyboard more agreeable to us.  
-  
-  
-  
- Speaking of the Numlock key, X  
-will typically disable this when it starts up. No matter how you have the  
-BIOS set up, or Linux set up before X starts. So the  
-trick above is one way. There is also a utility available as either  
-numlockx, or  
-setnumlock, that can be found on the 'Net, if  
-your distribution does not include one or the other. This can be put in a  
-start up file to turn Numlock on automatically if you'd  
-prefer.  
-  
-  
-  
- Window Managers and Desktop Environments will also allow customization of the  
-keyboard and mouse (as long as it is recognized correctly by  
-X). This may be an easier way to configure certain  
-customizations.  
-  
-----  
-!4.2.1. Special Key Mappings  
-  
- There are several special key mappings traditionally used in  
-XFree86.  
-  
-  
-  
-  
-  
-  
-  
-  
-****  
-  
- Ctrl-Alt-!BackSpace - Will kill the X server process in an orderly  
-fashion. This is a quick, easy, legitimate way to restart  
-X. Note it does not restart the display  
-manager (if used) -- just X itself.  
-  
-  
-  
-****  
-****  
-  
- Ctrl-Alt-Fx - where "x" corresponds to a valid tty number  
-(typically 1-6). This is typically used to jump to a text console login,  
-while X remains running. To get back to  
-X, then it is "Alt-Fx". In this  
-case, "x" represents one plus the last tty (e.g. Alt-F7 if  
-there are six available ttys).  
-  
-  
-  
-****  
-****  
-  
- Ctrl-Alt-keypad+ and Ctrl-Alt-keypad- - That is the plus and minus keys on  
-the keypad. This will cycle through any existing valid screen resolution  
-"Modes", e.g. 1024x768 -b 600x800. Note the actual screen  
-size is the same -- just the view and resolution changes. Not all that  
-useful for most purposes. You cannot permanently change the screen  
-resolution without restarting X.  
-  
-  
-  
-****  
-  
-  
-  
- It's possible your Window Manager, Desktop Environment or other system  
-component may trap these, and alter the standard behavior. In addition, the  
-Ctrl-Alt-Delete may be trapped as well. This should shut  
-X (and the system) down orderly, if it is  
-available.  
-  
-----  
-!4.2.2. Mice and Pointers  
-  
- As mentioned, Linux and Unix make heavy use of three mouse buttons. If a  
-mouse only has two buttons, then the third (i.e. the middle) button can  
-be simulated by pressing both buttons simultaneously. This is a  
-configuration option set in XF86Config as the  
-"Emulate3Buttons" directive:  
-  
-  
-  
-  
- Section "!InputDevice"  
-Identifier "Mouse0"  
-Driver "mouse"  
-Option "Device" "/dev/mouse"  
-Option "Protocol" "PS/2"  
-Option "Emulate3Buttons" "on"  
-!EndSection  
-  
-  
-  
-  
- When all is said and done, a third button is quite handy and I would personally recommend  
-having one. On wheeled mice, the "wheel" acts as the third  
-button, if pressed. Many standard wheel mice seem to work with the  
-"IMPS/2" protocol option.  
-  
-  
-  
- Specifically, the third button (middle) is the "paste" button in  
-virtually all Linux applications. Copy and paste works a little different in  
-Linux. The left button is the copy button. Just hold it down, and drag over  
-text. It is automatically copied to the X  
-"clipboard". Then, the middle button will paste from there. A  
-very simple process. A double-click should copy individual words, and a  
-triple-click individual lines of text. If for some reason, this does not  
-work, it is either a poorly implemented application, or a bug of some kind.  
-Some older versions of Netscape were not  
-consistent about this, for instance. To paste from the keyboard, this should  
-be shift+insert.  
-  
-  
-  
- "Drag and Drop" is not natively supported by  
-X itself. But, is implemented by some toolkits and  
-Desktop Environments. One should not expect this to work with non-compliant  
-applications (i.e non-KDE aware applications in  
-KDE for example).  
-  
-----  
-!!4.3. xset  
-  
- __xset__ is yet another XFree86 utility to set user  
-preferences. __xset__ is a bit of a catch-all and is used  
-to change various, unrelated X server settings. Mostly this is a command  
-line way of configuring some of the same things that are defined in  
-XF86Config (but not everything!).  
-  
-  
-  
- Common usages of __xset__ are to set DPMS on or off and  
-preferred intervals, to dynamically change the !FontPath or re-read it, to  
-control keyboard LEDs, to adjust mouse (or other pointer) movement speed,  
-set keyboard "autorepeat" and "repeat" rates, and  
-to control X's built in screen blanking. See the  
-man page, of course, for detailed explanations, and other  
-__xset__ usages.  
-  
-  
-  
- Again, __xset__ can be used interactively from the command  
-line. But most often preferred settings are stored in one of the start up  
-configuration files, like .xinitrc or  
-.xsession. A very brief example:  
-  
-  
-  
-  
- # Turn off screen blanking  
-xset s off  
-# Enable DPMS energy saving  
-xset +dpms  
-# Tweak the rodent  
-xset m 30/10 4  
-# Speed up keyboard  
-xset r rate 200 40  
-  
-  
-  
-  
- Your desktop may have a GUI front-end for __xset__.  
-  
-----  
-!!!5. Fonts and Colors  
-  
- Understanding fonts and colors can be more complex in  
-X than on other platforms.  
-  
-----  
-!!5.1. Fonts Demystified  
-  
- X knows about various font types, including  
-bitmaps, Type 1, and as of v4.x, !TrueType. The X server can either handle  
-fonts itself, or sometimes this duty is forked to a font server (of which  
-there are several). __xfs__ (X Font Server) is the most common  
-font server in use on Linux.  
-  
-  
-  
- A font server is not required, as X can handle  
-most font rendering itself. Font servers are traditionally used for serving  
-fonts to multiple hosts on a network, but sometimes are also used to provide  
-enhanced functionality. Additionally, a font server may provide a modest  
-performance boost by off-loading font rendering to a separate process.  
-  
-  
-  
- X knows about fonts according to fonts that are in  
-the "!FontPath". This is set initially in  
-XF86Config. If the X server is handling font duties  
-itself (i.e. no font server), this will be a list of directories that contain  
-font files, like:  
-  
-  
-  
-  
- !FontPath "/usr/X11R6/lib/X11/fonts/misc:unscaled"  
-!FontPath "/usr/X11R6/lib/X11/fonts/100dpi:unscaled"  
-!FontPath "/usr/X11R6/lib/X11/fonts/75dpi:unscaled"  
-!FontPath "/usr/X11R6/lib/X11/fonts/Type1"  
-!FontPath "/usr/X11R6/lib/X11/fonts/misc"  
-!FontPath "/usr/X11R6/lib/X11/fonts/100dpi"  
-!FontPath "/usr/X11R6/lib/X11/fonts/75dpi"  
-  
-  
-  
-  
- If a font server is being used, the "!FontPath" will point to the  
-socket where the font server is serving (this is just one possible example):  
-  
-  
-  
-  
- !FontPath "unix/:7101"  
-  
-  
-  
-  
- In this latter case, the actual font directories that are available will be  
-configured with the font server (see local documentation), which will use a  
-similar directory type scheme as shown for XF86Config.  
-  
-  
-  
- Once suitable fonts have been installed, they must be  
-"prepared". For most fonts, this means running the  
-__mkfontdir__ utility (see man page) in the directory where  
-the fonts are (as root). Type 1 and !TrueType require additional steps (see  
-below). Your vendor has done this for any fonts that were included with your  
-distribution. So, this will only need to be done for fonts that you add. For  
-newly added fonts to become visible to X,  
-you will need to run the appropriate  
-__xset__ commands to either modify the existing !FontPath, or  
-re-read it (see man page). Or, re-initialize your font server.  
-  
-  
-  
- Example: Preparing fonts, and re-initializing font server after adding new  
-fonts:  
-  
-  
-  
-  
- su  
-`passwordb  
-mkfontdir /usr/X11R6/lib/X11/fonts/my_new_fonts/  
-/etc/init.d/xfs restart  
-  
-  
-  
-  
- The first command may not be necessary on newer distros (since it's done by  
-the init script in some cases). And the font server configuration would need  
-to be modified, if this is a new directory. Example: re-initializing with no  
-font server:  
-  
-  
-  
-  
- su  
-`passwordb  
-mkfontdir /usr/X11R6/lib/X11/fonts/my_new_fonts/  
-xset +fp /usr/X11R6/lib/X11/fonts/my_new_fonts/  
-xset fp rehash  
-  
-  
-  
-  
- The "__xset +fp__" would not be necessary if the  
-directory is already part of the !FontPath.  
-  
-  
-  
- __xlsfonts | less__ can be used to list what fonts are known,  
-and thus available, to X and its clients. Run  
-__xlsfonts | less__, and you also can get an idea of the font  
-definition as understood by X. Font resources are  
-specified quite explicitly, and it may seem complex at first. The ''X  
-Logical Font Description'' ("XLFD") is the full  
-description for any given font. The XLFD looks like:  
-  
-  
-  
-  
-  
- -adobe-helvetica-medium-r-normal-*-*-120-*-*-p-*-iso10646-1  
-  
-  
-  
-  
- Where each field, left to right is:  
-  
-  
-  
-  
-  
-  
- fndry - font foundry, the company or individual  
-which made the font.  
-  
-  
-  
-  
-  
-  
-  
-  
-  
- fmly - font family, the popular nickname of the font  
-  
-  
-  
-  
-  
-  
-  
-  
-  
- wght - font weight (bold, medium, etc.)  
-  
-  
-  
-  
-  
-  
-  
-  
-  
- slant - font slant (italics, oblique, roman  
-(normal), etc.)  
-  
-  
-  
-  
-  
-  
-  
-  
-  
- sWdth - font width (normal, condensed, extended, etc.)  
-  
-  
-  
-  
-  
-  
-  
-  
-  
- adstyl - additional style (sans serif, serif, etc.)  
-  
-  
-  
-  
-  
-  
-  
-  
-  
- pxlsz - pixel size, the number of pixels  
-vertically in a character  
-  
-  
-  
-  
-  
-  
-  
-  
-  
- ptSz - approximate point size of the text  
-(similar to pxlsz)  
-  
-  
-  
-  
-  
-  
-  
-  
-  
- resx - horizontal resolution, in dpi  
-  
-  
-  
-  
-  
-  
-  
-  
-  
- resy - vertical resolution, in dpi  
-  
-  
-  
-  
-  
-  
-  
-  
-  
- spc - spacing, only useful, apparently, in the  
-Schumacher fonts  
-  
-  
-  
-  
-  
-  
-  
-  
-  
- avgWidth - average character width of the font  
-  
-  
-  
-  
-  
-  
-  
-  
-  
- rgstry - the recognized registry that lists  
-the font  
-  
-  
-  
-  
-  
-  
-  
-  
-  
- encdng - nationality encoding  
-  
-  
-  
-  
-  
-  
- The "*" acts as a wild-card character. In fact, if not every  
-field is specified, the X server will take the first match it finds in  
-the !FontPath. This is why it is best to order the !FontPath with preferred  
-fonts coming first since some programs will deliberately specify fonts  
-"loosely" so that your system has some discretion.  
-  
-  
-  
- The program __xfontsel__ (X  
-Font Selector) may be useful. Try launching it now. You will see  
-nothing helpful in the main window at first, but try holding the left button  
-down on the fndry button. If all your fonts are  
-in order, you will see a menu of selections such as adobe and b8h and  
-bitstream and so forth. Select one such as  
-b8h and you will notice that the font in  
-the lower window changes to something intelligible. This is the way  
-fonts are selected with this program; starting from the left, which is the  
-most general selection, and moving toward the right, to the more specific  
-options. Selecting an option toward the rightmost end will not make much  
-sense before the foundry, for instance, is selected, because the options are  
-generally ordered by their dependence on each other.  
-  
-  
-  
-  
- When you select from the fmly selection,  
-you will see most of the options grayed out, and only three remaining. That  
-means that these three are the only families of font made by this foundry.  
-Some families appear under more than one foundry, for instance, both  
-''Adobe'' and ''Bitstream'' make a  
-variation of the Courier font. Now you can select the wght, and so forth. After you get far enough you will  
-have narrowed it down to the font that you want. You don't necessarily have  
-to fill in all the options to choose a single font, there's not  
-''that'' many fonts on your system! The options that you do  
-not select will be represented by a *  
-indicating that any option will do in that spot, and gives X some leeway.  
-  
-  
-  
- When you are satisfied with your font selection, hit the select button,  
-and your selection will be placed in the X  
-clipboard, ready to be pasted into your document or whatever you are working  
-on. For example, open an ''xterm'' window and  
-type in something like xterm -font followed by  
-an opening quotation mark. Then point to that spot on your screen, and click  
-your middle mouse button (or click both the left and right, if you're  
-middle-button impaired). This will paste the selection from the clipboard,  
-which should be the font you just selected. Then enter the closing quote, and  
-hit Enter. For instance, a nice big ''xterm'' with a Courier font specified would look like  
-this: xterm -font  
-"-adobe-courier-medium-r-*-*-14-*-*-*-*-*-*-*".  
-  
-  
-  
- If you've found a font you prefer, this can permanently be used by placing the  
-font definition in the appropriate configuration file (see above).  
-  
-  
-  
- Note that you can also limit the number of fonts that you want  
-__xfontsel__ to display with the command line option  
-''-pattern'', followed by a quoted font specification, as  
-discussed above.  
-  
-  
-  
- The __xfd__ utility is also helpful for examining  
-individual fonts. If launched with a command line such as __xfd  
--fn fixed__, it will show you the complete character set for that font.  
-  
-  
-  
- KDE and GNOME have  
-their own utilities that are not quite as obtuse ;-)  
-  
-----  
-!5.1.1. Type 1 and !TrueType Fonts  
-  
- The fonts provided with XFree86 are of limited use for many of us,  
-considering that about the only place you'll find fonts of that kind, are  
-used in the X Window System itself for the most part. Unfortunately many  
-media junkies, web designers and fontaholics work in operating systems that  
-rely on other formats. And then, there often does not seem to be much  
-emphasis by some distributions on making the best of the default fonts  
-either.  
-  
-  
-  
- Type 1 fonts, most commonly used in conjunction with !PostScript document  
-formats, are the traditional standard in Unix and Linux environments. You  
-should have a reasonably good starter selection installed already. Or, more  
-can be found for free on the Internet with considerable ease, and Try ftp://ftp.cdrom.com/pub/os2/fonts/  
-for starters. Type 1 are scalable fonts, and have many of the same benefits  
-of the better known !TrueType fonts. If you don't have a good selection of  
-!TrueType fonts installed, then Type 1 is what you want for most GUI  
-applications. But again, this is not standard on other platforms, and can  
-present problems when viewing documents (e.g. web pages) that are designed  
-with "other platforms" in mind.  
-  
-  
-  
- !TrueType fonts started with Apple, and later were licensed by Microsoft. So  
-people migrating from non-Unix platforms are already familiar with these high  
-quality fonts. Unfortunately, there are not many quality !TrueType fonts under  
-a suitable license, and thus there are not many included with Linux  
-distributions. And the ones that are, often are not as high quality. Also  
-unfortunately, !TrueType has become somewhat of a standard on the Web and in  
-other venues, and not having good !TrueType fonts can be a detriment.  
-  
-  
-  
- That's the bad news. The good news is that any !TrueType font included with  
-any version of Windows, or any Windows applications, should work on Linux.  
-Though you will have to take some additional steps to integrate them. This  
-particularly helps web browsing where X's  
-bitmapped fonts just don't scale well.  
-  
-  
-  
- We won't go into detail on installing and configuring these fonts here, as it  
-is addressed in depth in other documents. See ''The Font HOWTO  
-'', http://www.linuxdoc.org/HOWTO/Font-HOWTO.html,  
-for general font information, and Type 1 tips. See ''The Font De-Uglification  
-Mini HOWTO'', http://www.linuxdoc.org/HOWTO/mini/FDU/index.html,  
-for various X related font tips, especially !TrueType.  
-  
-----  
-!!5.2. Colors  
-  
- Let's go back to our terminal window and try something. Open an  
-__xterm__ with a command line like the following:  
-  
-  
-  
-  
-  
-xterm -fg DarkSteelBlue1 -bg red3 8  
-  
-  
-  
-  
- Ouch! While that may not be pretty, and you may not do much of your best work  
-in it, it demonstrates one interesting aspect of X  
-configuration -- color names. While not particularly precise, this is a nice  
-way to remember a variety of colors. Note that color names are never  
-case-sensitive.  
-  
-  
-  
- The X server will actually deal with color values as a hexadecimal  
-Red-Green-Blue (RGB) color notation. This would look something like  
-"#0aff0a" in hex. Not so easy to remember. But  
-X gives a more mnemonic way of remembering valid  
-color definitions. These are stored in a text table, typically as  
-/usr/X11R6/lib/X11/rgb.txt, and is defined in  
-XF86Config in the "Files" section.  
-  
-  
-  
- If you are interested, have a look with a text editor. There are many, many  
-shades defined. I count eighty-three shades of blue in mine, for instance. Brief  
-snip:  
-  
-  
-  
-  
- 176 226 255 LightSkyBlue1  
-164 211 238 LightSkyBlue2  
-141 182 205 LightSkyBlue3  
-96 123 139 LightSkyBlue4  
-202 225 255 LightSteelBlue1  
-188 210 238 LightSteelBlue2  
-162 181 205 LightSteelBlue3  
-110 123 139 LightSteelBlue4  
-191 239 255 LightBlue1  
-178 223 238 LightBlue2  
-154 192 205 LightBlue3  
-104 131 139 LightBlue4  
-  
-  
-  
-  
- This file can be customized should you desire, but this is rarely needed for  
-most of us. It is important to have though, since some applications depend on  
-it.   
-  
-  
-  
- Desktop Environments will have a GUI utility for selecting colors.  
-  
-----  
-!!!6. Window Managers and Desktops  
-  
- We won't delve into configuring Window Manager's and Desktop Environments.  
-There is just too much to try to cover in one document. It is important to  
-realize that the two are not the same. There are many, many Window Managers  
-available.   
-  
-----  
-!!6.1. Window Managers  
-  
- Window Managers are highly configurable. Many aspects of user interaction can  
-be controlled by the Window Manager.  
-  
-  
-  
- Some of the most popular Window Managers:  
-  
-  
-  
-  
-  
-  
- aewm: http://www.red-bean.com/~decklin/aewm/  
-  
-  
-  
-  
-  
-  
-  
-  
-  
- !AfterStep: http://www.afterstep.org/  
-  
-  
-  
-  
-  
-  
-  
-  
-  
- !BlackBox: http://sourceforge.net/projects/blackboxwm  
-  
-  
-  
-  
-  
-  
-  
-  
-  
- Enlightenment: http://www.enlightenment.org/pages/main.html  
-  
-  
-  
-  
-  
-  
-  
-  
-  
- fvwm: http://www.fvwm.org/  
-  
-  
-  
-  
-  
-  
-  
-  
-  
- IceWM: http://www.icewm.org/  
-  
-  
-  
-  
-  
-  
-  
-  
-  
- olwm (!OpenLook Window Manager):  
-http://www.plig.org/xwinman/olvwm.html  
-  
-  
-  
-  
-  
-  
-  
-  
-  
- Sawmill: http://sawmill.sourceforge.net/  
-  
-  
-  
-  
-  
-  
-  
-  
-  
- !WindowMaker: http://www.windowmaker.org/  
-  
-  
-  
-  
-  
-  
-  
-  
-  
- XFce: http://xfce.org/  
-  
-  
-  
-  
-  
-  
- There are many, many lesser known ones as well. Check at  
-freshmeat for others.  
-  
-  
-  
- GNOME and KDE  
-both have their default Window Manager, but support other, compliant Window  
-Managers as well. Your distribution probably has included at least several.  
-Try them all if you don't already have a favorite. Your distribution probably  
-also has a method of switching dynamically between Window Managers (and Desktop  
-Environments too).  
-  
-----  
-!!6.2. Desktop Environments  
-  
- Desktop Environments are not really new, but their popularity has increased  
-with advent of the two big names: KDE and  
-GNOME. To a certain extent, the Desktop  
-Environment functionality overlaps the Window Manager's. They both can be  
-responsible for the root window background, root window menu, icons,  
-taskbars, etc. Generally speaking, if a Desktop Environment is running, it is  
-controlling these aspects. That is the main idea behind them -- to integrate  
-the various components into a cohesive, consistent whole. Desktop  
-Environments also add some interoperability and ease-of-use features that a  
-simple Window Manager cannot.   
-  
-  
-  
- Oh, another point: Desktop Environments also try to do as much  
-X session configuration as possible. Any of their  
-compliant clients will more than likely be configured by the Desktop, or have  
-it's own configuration that conforms to the Desktop's style. This is at  
-least partly to avoid much of the seemingly helter-skelter text file  
-configuration we looked at in the above sections, and make life a little  
-easier for the user.  
-  
-  
-  
- There is a trade-off in this additional functionality, and that is that it  
-takes memory and system resources to oversee all this. If you have plenty of  
-memory and a fast computer, this is no problem. But in low memory situations,  
-this can cause a slowdown (see the performance  
-section below). 64M of RAM is probably borderline with either  
-KDE or GNOME.  
-  
-  
-  
- So do you need a Desktop Environment? That is up to the user. They are  
-certainly not required to run X, but do add  
-features that many users want or expect in a GUI. Which one is better? Ah,  
-but that is up to you to decide!  
-  
-  
-  
- KDE has been around longer than  
-GNOME, and some would say maybe a little more  
-mature. KDE is based on the QT widget toolkit. A  
-quote from the KDE home page:  
-  
-  
-  
-  
-KDE is a powerful Open Source graphical desktop environment for Unix  
-workstations. It combines ease of use, contemporary functionality, and  
-outstanding graphical design with the technological superiority of the Unix  
-operating system.  
-  
-  
-  
- KDE is a mature desktop suite providing a solid basis to an ever growing  
-number of applications for Unix workstations. KDE has developed a high  
-quality development framework for Unix, which allows for the rapid and  
-efficient creation of applications.  
-  
-  
-  
- GNOME is based on the GTK+ toolkit.  
-And a quote from the GNOME home page:  
-  
-  
-  
- GNOME stands for GNU Network Object Model Environment. The GNOME project  
-intends to build a complete, user-friendly desktop based entirely on free  
-software. GNOME is part of the GNU project, and GNOME is part of the Open  
-Source(tm) movement. The desktop will consist of small utilities and larger  
-applications which share a consistent look and feel. GNOME uses GTK+ as the  
-GUI toolkit for all GNOME-compliant applications.  
-  
-  
-  
-  
- XFce is a lighter weight, less featureful Desktop  
-Environment that does not get as much attention as the others.  
-XFce is also based on the GTK+ toolkit. And a  
-quote from the XFce home page:  
-  
-  
-  
- The XFce project was first started because I needed a simple, light and  
-efficient environment for my Linux System.  
-  
-  
-  
-  
- I believe that the desktop environment should be made to increase user  
-productivity. Therefore, the goal is keep most system resources for the  
-applications, and not to consume all memory and CPU usage with the desktop  
-environment.  
-  
-  
-  
-  
- All these have their own extensive documentation. If you can't find what you  
-need installed on your system, check the respective home pages.  
-  
-----  
-!!!7. X and the Command Line  
-  
- What would a Unix-like operating system be without a command line  
-interface? The command line can be useful, and is readily available with  
-X. In fact, for many it is an integral part  
-of their X working environment.   
-  
-  
-  
- Any X program can be started directly from the  
-command line just by typing the program name at a shell prompt in an  
-__xterm__, or other terminal window. Most applications will  
-have a very rich set of command line "options", such as  
-background color, font, geometry (screen placement), etc, etc. Command line  
-options over-ride compiled in defaults, or other system enabled  
-"resources".  
-  
-  
-  
-  
- Many traditional X programs will use the same  
-basic names for command line options. All applications written using the  
-MIT X Toolkit Intrinsics (Xt) (such as those included with XFree86)  
-automatically accept the following options. Some non-Xt applications also use  
-these, or something similar. For instance, "geometry" is close  
-to a universally accepted option.  
-  
-  
-  
-  
-  
-  
-  
-; -display ''[[host]:display[[.screen]'':  
-  
- This option specifies the X server display to use. This is often used  
-where applications are run on one system, and displayed on another. The  
-application needs to know ''where'' to display. This  
-is sometimes also accomplished by setting the "$DISPLAY"  
-variable, which uses the same syntax.  
-  
-  
-; -geometry ''geometry'':  
-  
- The initial size and location of the window, in a format such as  
-width x height +horz_offset +vert_offset or  
-+horz_offset -vert_offset. Note that if you put in a  
-negative horizontal or vertical offset, the window will be placed counting  
-backward from the right or the bottom of the screen, respectively, instead  
-of from the top left corner.  
-  
-  
-; -font ''fontname'':  
-  
- The font to use for displaying the text in your window (see font section  
-below).  
-  
-  
-; -bg ''color'':  
-  
- The color to use for the window background. Typically this is a  
-"color name" (see below).  
-  
-  
-; -fg ''color'':  
-  
- The color to use for the window foreground (i.e. fonts, etc).  
-  
-  
-; -name ''resource-name'':  
-  
- Useful for specifying the name under which the resources for this  
-application will be found (e.g. as specified in  
-.Xdefaults). This is useful to distinguish between  
-invocations of the same application. For example, two  
-__xterms__ can be "named" differently so that  
-they may inherit different resources based upon the specified names in  
-the resource database.  
-  
-  
-; -title ''string'':  
-  
- This is the title to be used for the window on your display, generally used  
-by the Window Manager to put a descriptive title at the top of the window.  
-Not to be confused with the "-name" option.  
-  
-  
-; -iconic:  
-  
- Open window in an iconified state.  
-  
-  
-; -xrm ''resource-string'':  
-  
- This option specifies a resource name and value to override any defaults  
-that may already be set (i.e. via .Xresources or  
-similar). Also useful for setting X resources  
-that do not have explicit command line options. For example, the command  
-line "xterm -xrm xterm*background: blue 8" is  
-functionally the same as "xterm -bg blue 8".  
-  
-  
-  
-  
-  
-  
- These are the most noteworthy. There are others. Many programs will have  
-their own additional options that are application specific. Many newer  
-applications today don't necessarily adhere to the Xt standards, and will use  
-their own options, or those provided by their respective toolkit.  
-If nothing else, man pages are a good reference for command syntax, and are  
-your friends here. Or, the application will have a "--usage" or  
-"--help" command line switch to list available options:  
-  
-  
-  
-  
-  
- $ gnome-terminal --usage  
-Usage: gnome-terminal [[-?] [[--disable-sound] [[--enable-sound]  
-[[--espeaker=HOSTNAME:PORT] [[--version] [[--usage] [[--gdk-debug=FLAGS]  
-[[--gdk-no-debug=FLAGS] [[--display=DISPLAY] [[--sync] [[--no-xshm]  
-[[--name=NAME] [[--class=CLASS] [[--gxid_host=HOST] [[--gxid_port=PORT]  
-[[--xim-preedit=STYLE] [[--xim-status=STYLE] [[--gtk-debug=FLAGS]  
-[[--gtk-no-debug=FLAGS] [[--g-fatal-warnings] [[--gtk-module=MODULE]  
-[[--disable-crash-dialog] [[--sm-client-id=ID] [[--sm-config-prefix=PREFIX]  
-[[--sm-disable] [[--tclass=TCLASS] [[--font=FONT] [[--nologin] [[--login]  
-[[--geometry=GEOMETRY] [[-e COMMAND] [[-x COMMAND] [[--foreground=COLOR]  
-[[--background=COLOR] [[--solid] [[--pixmap=PIXMAP] [[--bgscroll]  
-[[--bgnoscroll] [[--shaded] [[--noshaded] [[--transparent] [[--utmp]  
-[[--noutmp] [[--wtmp] [[--nowtmp] [[--lastlog] [[--nolastlog] [[-t TITLE]  
-[[--icon=ICON] [[--termname=TERMNAME] [[--start-factory-server]  
-[[--use-factory]  
-  
-  
-----  
-!!7.1. xterm and friends  
-  
- Sooner or later, most of us need to access the "command line"  
-for one reason or another. For some, this might even be a common way of  
-working in X. In addition to being able to launch  
-X applications from the command prompt, there  
-is also a wealth of programs that run in "text mode" for  
-Linux.   
-  
-  
-  
- This is possible via "terminal emulators" such as  
-__xterm__. The closest counterpart from Microsoft is the  
-so-called DOS-box, which is child's play by comparison. Linux terminals support  
-color, full mouse copy/paste (and some wheeled mice), pseudo-transparency and  
-pixmap backgrounds, scrollbars, menus and generally a slew of other  
-features. While __xterm__ is the best known such terminal  
-emulator, there are many similar programs. To name a few:  
-__Eterm__, __rxvt__,  
-__aterm__, __konsole__  
-(KDE) and __gnome-terminal__.  
-  
-  
-  
- In typical usage, when a terminal emulator window is opened, a shell is  
-started for the user to interact with. The default for essentially all  
-Linuxes, is the bash shell. So when all is said  
-and done, the user is interacting with X, the  
-terminal, and the shell all at once. Each may have it's own influence. For  
-example, how keystrokes are handled since they move from hardware to X  
-server to terminal to the shell and finally echoed back to the user.  
-  
-  
-  
-  
-Quick and easy terminal configuration is done via the "$TERM"  
-variable, which is typically set in one of the user's shell configuration  
-files. Or the terminal itself will have a compiled in default. The default  
-value for this is most often "xterm":  
-  
-  
-  
-  
- $ echo $TERM  
-xterm  
-  
-  
-  
-  
- Normally this is sufficient, as your vendor has already set this up in a  
-reasonable way. The "$TERM" variable is actually a reference to  
-an entry in the "termcap" database (man termcap), which is  
-typically installed as /etc/termcap. Unless you are  
-doing something really unusual, you probably won't need to change this.  
-Some additional terminal configuration can be done with the  
-__stty__ command (see man page). Terminal configuration is  
-really beyond the scope of this document.  
-  
-  
-  
- The terminal application itself (e.g. __xterm__) will also  
-have various configuration options. Permanent settings are best stored in  
-a ~/.Xdefaults or similar file for those applications  
-that support this. Generally speaking, applications with a GUI configuration  
-(such as __gnome-terminal__), will be configured by their own  
-menu driven configuration instead.  
-  
-  
-  
- Also, you are interacting with the shell too, which can have it's own impact,  
-particularly on how keystrokes are handled at the shell prompt. For  
-bash, this can be adjusted in  
-~/.inputrc. Again, this is beyond the scope of this  
-document, but check with either local or on-line  
-bash (or other shell) references.  
-  
-  
-  
- Terminal emulators like __xterm__ require a monospaced font.  
-So forget about !TrueType or Type 1 fonts.   
-  
-----  
-!!!8. X Networking and Security  
-  
- As mentioned, X is essentially a networking  
-protocol with graphical displaying capabilities. This makes for some  
-interesting usage possibilities. And also means there are inherent security  
-considerations, as there is with any networking environment. And if you ever  
-connect to the Internet, you are in the midst of one very large, hostile  
-network ;-)  
-  
-  
-  
- X clients connect to X servers via various networking protocols, including  
-TCP/IP. Even with just local connections. Possible usages here are to run an  
-application on one computer, and display it on another. Or, to actually log  
-in to a remote system, and have it display to your local screen, with the  
-client apps using the remote system's CPU and RAM.  
-  
-  
-  
- Without any precautions, this can leave you wide open to various types of  
-mischief and abuse. For instance, anyone logged into to your system can  
-access your "display", meaning they can see what you are doing  
-if they want to. Thankfully, most recent Linux releases come with some  
-default security precautions enabled. But it is best to make sure for  
-yourself that you are protected.  
-  
-  
-  
- Both X networking and security are nicely covered  
-in ''The Remote X Apps Mini HOWTO'', http://www.linuxdoc.org/HOWTO/mini/Remote-X-Apps.html,  
-so we won't need to try to rehash it here. Recommended reading. See other  
-references in the Links section of the  
-Appendix below.  
-  
-  
-  
- A few recommended precautions:  
-  
-  
-  
-  
-  
-  
-  
-  
-****  
-  
- Never, ever run X as root. The number of bad  
-things that can happen, dramatically increases when logged in as root.  
-Learn to run as much as possible as a regular user, and su to root only  
-when needed. This may sound like a lot of extra work (and probably is at  
-first), but once the "right" way of doing things is learned,  
-it soon becomes second nature.  
-  
-  
-  
-  
- A brief anecdote from a friend: he had a client who's new system stopped  
-"working". Curiously, he found the entire  
-/dev directory was missing, which he re-installed and  
-all was well again. He was back a few days later and found the system  
-logged in as root to X, and someone had clicked  
-on /dev in the file manager, and dragged it onto the  
-desktop. Smooth move!  
-  
-  
-  
-****  
-****  
-  
- If you ever connect to a network with untrusted users, be sure to have a  
-firewall between you and them. This goes double for the Internet.  
-Firewalling is beyond the scope of this document, but is covered in many  
-other places, including your vendor's website. http://linuxdoc.org has several security  
-HOWTOs that can help as well. http://linuxsecurity.com/docs/  
-is another good place to look.  
-  
-  
-  
-****  
-****  
-  
- You can disable TCP connections with the "-nolisten tcp"  
-command line X server switch. This does not help for local connections  
-though. For __xinit/startx__:  
-  
-  
-  
-  
-  
- exec X :0 -dpi 100 -nolisten tcp  
-  
-  
-  
-  
-  
- Placed in ~/.xserverrc. And for __xdm__,  
-in /usr/lib/X11/xdm/Xservers:  
-  
-  
-  
-  
-  
- :0 local /usr/X11R6/bin/X :0 -nolisten tcp  
-  
-  
-  
-  
-****  
-  
-----  
-!!!9. Performance Considerations  
-  
- As has been discussed, what we call X, is actually  
-a convergence of various components: X server, Window Manager, Desktop, etc.  
-With MS Windows, the GUI desktop is tightly integrated with the operating  
-system itself. This is not the case in Linux which follows the Unix tradition  
-of combining various independent components to achieve some end result. So we  
-have choices with each component and it's attendant configuration and  
-implementation. In short, much flexibility. This is where you come in. You  
-can try various possibilities and decide what you gives you the most bang for  
-the buck.  
-  
-  
-  
- On low end hardware, this gives us much latitude to decrease the demand on  
-available system resources. This is good because, if given the opportunity,  
-X can be quite greedy with system resources. If  
-you've recently installed a new Linux distribution, you've probably been  
-given a default Desktop with many bells and whistles. And something  
-that will probably need a fair amount of memory and CPU to achieve a  
-reasonable level of performance. If you have the horse power, this should not  
-be a problem.  
-  
-  
-  
- It is often said that Linux functions very well with relatively little  
-memory. This is true to a point. It does not mean though that every possible  
-configuration will run with low memory. So if you want to use memory hungry  
-applications, then you will have to have the memory. Or you will have to make  
-sacrifices to achieve a satisfactory level of performance. It is quite  
-possible to run X with reasonable performance on  
-16 Meg of RAM, and even less if you really want to push it. But you would  
-have to live with some real limitations.  
-  
-  
-  
- Let's look at some of the components and ways to decrease the demand on  
-system resources, in case you are at the low end on hardware, or performance  
-is not up to expectations.  
-  
-----  
-!!9.1. Hardware  
-  
-  
-  
-  
-  
-  
-****  
-  
- No big surprise, but overall system performance will be best with a fast  
-graphics card, a fast hard drive, and lots and lots of memory -- if you want  
-''both'' a fast and flashy system.  
-  
-  
-  
-****  
-****  
-  
- Graphics cards are of course necessary, and the X server's video performance  
-is tied to the card's chipset, and the corresponding XFree86 driver. Just  
-because a given card is supported by XFree86 does not necessarily mean it is  
-as well optimized as other cards! It may also perform better at a lower color  
-depth (see below). It may well be worth the trip to xfree86.org to see if  
-there are any notes related to your card with respect to performance or other  
-issues.  
-  
-  
-  
-****  
-****  
-  
- And you might try other versions of XFree86. At this time v4.2 was just  
-recently released. Some cards may still perform better with 3.3.6 due to the  
-way v4.x is being incrementally developed. If you are using x4.x and  
-performance is not good, then make sure you are using the latest available  
-version.  
-  
-  
-  
-****  
-  
-----  
-!!9.2. Memory  
-  
- The more memory, the better. X will do a lot  
-caching to help performance. But caching requires memory, and if there isn't  
-much to start with, then we would need to reduce memory requirements. Some  
-tips for those with low memory or performance problems:  
-  
-  
-  
-  
-  
-  
-  
-  
-****  
-  
- Use the __free__ command to make sure all memory and swap is  
-recognized.  
-  
-  
-  
-****  
-****  
-  
- Make sure you don't have other system services that are hogging memory or  
-CPU. Use __top__ or __ps__ to see what is  
-running, and disable anything you can to free up memory and CPU. Again, a  
-default installation may have many things running that you don't really  
-need.  
-  
-  
-  
-****  
-****  
-  
- Make sure you have plenty of swap space. With low, or even modest, memory,  
-swap is all the more important. A general rule of thumb is twice as much swap  
-as physical memory. With low memory, this is not enough. Try four times real  
-memory. Or more. If you can't create more swap partitions, see the  
-__mkswap__ man page about creating swap files instead.  
-Constant disk churning is a symptom of insufficient swap space, and the  
-system will be slowed as a result. Or, a possibly this is a poorly behaved  
-kernel VM system (try another kernel in this case).  
-  
-  
-  
-****  
-****  
-  
- Drive performance is important for swap performance. Make sure your drive has  
-DMA enabled if the drive supports it, and is otherwise tuned and performing  
-up to snuff. See the __hdparm__ man page. Slow drive + slow  
-card + low memory = slow system.  
-  
-  
-  
-****  
-****  
-  
- Don't use KDE or GNOME  
-if memory is tight. These both require substantial memory, and are not  
-required to just run X. Think of these as  
-usability enhancements. 32M probably is not be enough. 64M may be decent,  
-depending on what other applications are being used, and other variables. 128M  
-''should'' be adequate in most situations. 256M or more to  
-be comfortable. File Managers like Nautilus and  
-gmc can also be memory hungry.  
-  
-  
-  
-****  
-****  
-  
- Use a lightweight window manger. !WindowMaker,  
-!BlackBox, IceWM,  
-fvwm (and variants),  
-XFce, all have reputations of performing well with  
-low memory. There are surely others as well. Experiment.  
-fvwm is generally considered the lightest of the  
-light.  
-  
-  
-  
- A very nice desktop is still very possible even without  
-KDE or GNOME. In fact,  
-most KDE and GNOME  
-applications can still be used even if KDE and  
-GNOME are not running themselves (assuming the  
-right libs are installed).  
-  
-  
-  
-****  
-****  
-  
- Don't use fancy themes or backgrounds. Plain and simple is easier on  
-resources. Use a solid color background. Avoid pixmaps or gradients for any  
-kind of background, including menus, title bars, etc.  
-  
-  
-  
-****  
-****  
-  
- Use a lesser screen size and color depth. 800x600x16 will not push  
-X as hard and be easier on system resources than  
-higher values. While a !ColorDepth of 24 is preferred, you probably will not  
-notice the difference of 16 with the majority of applications.  
-  
-  
-  
-****  
-****  
-  
- Some applications require much more memory than others. Some notable hogs are  
-__Netscape__, __Mozilla__, office suites, and  
-__the Gimp__. __Netscape__ is faster than  
-__Mozilla__ (but not as nice).  
-__Netscape-Navigator__ uses less memory than  
-__Netscape-Communicator__. Close any of these apps when not in  
-use. Use text browsers like __lynx__ or __w3m__  
-wherever you can, like reading locally installed HTML documentation. Much  
-faster, and much less memory is required.  
-  
-  
-  
-****  
-****  
-  
- Also, use text based clients for mail (__mutt__ or  
-__pine__) and news (__slrn__ or  
-__trn__). Again, faster and much less memory is used,  
-and these are after all text based protocols at heart anyway.  
-  
-  
-  
-****  
-****  
-  
- __rxvt__ uses less memory than __xterm__,  
-__konsole__ or __gnome-terminal__.  
-  
-  
-  
-****  
-****  
-  
- If you run an X session for long periods of time  
-(like days or weeks), restart X occasionally to  
-free memory tied up as cache.  
-  
-  
-  
-****  
-****  
-  
-  
-Disable "backing store" and "save-unders" to  
-reduce memory usage (performance penalty though). Check  
-your Window Manager's settings too. See what modules are being loaded  
-in the "Modules" section of XF86Config as  
-well. Your installation may have many unnecessary ones enabled, or ones you  
-can't take advantage of (e.g. "v4l", aka  
-"Video4Linux").  
-  
-  
-  
-****  
-****  
-  
-  
-Font servers may provide a slight performance boost by off-loading font  
-rendering to the font server, while freeing the X server to do other things.  
-But, the font server will use a small additional amount of memory as well.  
-So, you can try it either way to see if it makes a difference.  
-  
-  
-  
-****  
-****  
-  
- Lastly, RAM is cheap now. Buy some ;-) A new drive too.  
-  
-  
-  
-****  
-****  
-  
- RAM is still just too low for X? Check out  
-tinyX:  
-http://www.superant.com/smalllinux/tinyX01.html.  
-Reportedly runs in as little as 4 Meg of RAM.  
-  
-  
-  
-****  
-  
-----  
-!!9.3. Other Tips  
-  
- Other tips to eek out better performance:  
-  
-  
-  
-  
-  
-  
-  
-  
-****  
-  
- Use __xset__ to speed up the keyboard. This can make the  
-system feel more responsive even if it isn't really. The default always  
-seemed sluggish to me.  
-  
-  
-  
-****  
-****  
-  
- __renice__ X to give it a higher  
-priority. Other platforms give the GUI high scheduling priority to achieve  
-better responsiveness. But this is at a cost to other processes. Linux is a  
-blank slate. You might include the font server (if being used), and key  
-KDE and GNOME processes  
-as well.  
-  
-  
-  
-  
- nice -n -10 X :  
-  
-  
-  
-  
- This won't do much on systems that are mostly idle.  
-  
-  
-  
- This does not work so well with __startx__ since  
-X runs as root, and you're not root, right? So  
-you'd have to use something like __sudo__ to have this done  
-automatically.  
-  
-  
-  
-****  
-  
-----  
-!!!10. Appendix  
-!!10.1. Terminology and Usage  
-  
- There are a few basic concepts and terminologies you should be familiar with.  
-These terms will appear here, in the manual pages, and in other help files and  
-documentation.  
-  
-  
-  
-  
-  
-  
-  
-  
-  
-****  
-  
- The "X server" is the low-level driver software that interacts  
-with your video card and other system hardware, and manages the  
-"display" and the various components attached to the  
-"display" (keyboard, mouse, etc.). And, of course, handles  
-requests from clients as well. There are different X servers for different  
-chipsets.  
-  
-  
-  
-  
- X Servers are referenced in the form of:  
-  
-  
-  
-  
- ''host.domain:display_number.screen_number''  
-  
-  
-  
-  
- An example would look like: ''my_computer:.''  
-  
-  
-  
-  
- If host (and domain) is omitted, localhost is assumed. "Host"  
-can be a remote host. If "screen" is omitted, then  
-"" (the first screen) is assumed. In it's shortest form, the  
-X server is often represented as just ":", which would be the  
-first local "display". X supports  
-multiple "displays" ''and'' multiple  
-"screens".  
-  
-  
-  
-  
- "Screen" and "Display" have special meanings in  
-relation to X servers, in addition to their more common usage.  
-  
-  
-  
-****  
-****  
-  
- When X is invoked, the X server will initialize  
-one or more "displays". Yes, X can  
-have more than one "display" available (though this is not a  
-common configuration for the average user). Each "display" is  
-a separate instance of "X". The "display"  
-includes not only the obvious video components, but also the keyboard,  
-mouse and other input type components. The user can only access one  
-display at a time via the same keyboard and  
-monitor. "Displays" may reside locally, or on a networked  
-host "somewhere", or both. It is possible that if multiple  
-"displays" are available, the user can choose which one he  
-wants when he logs in. Each "display" may have its own  
-unique configuration (e.g. resolution). But again, the most typical  
-configuration is just one "display" with one "screen",  
-which is how most of us use X.  
-  
-  
-  
-****  
-****  
-  
-  
-In reference to X servers, "screen" means the primary video  
-output with which you view X.  
-And there can be more than one "screen", just like you can  
-have more than one "display". Additional  
-"screens" are used in "multi-headed displays" for  
-instance. In fact you can even have more than one computer running off a  
-single X server. This is beyond the scope of this document, but you should  
-be aware of this degree of flexibility as it is an important ingredient of  
-the X protocol.  
-  
-  
-  
-****  
-****  
-  
- "Desktop" can mean different things in different  
-contexts. Often, "desktop" means what is more properly  
-called the "Desktop Environment". Prime examples of this are  
-KDE, GNOME, and the not  
-as well-known CDE, which are high level  
-applications that control much of how the user interacts with the  
-X session. They provide consistent look and  
-feel, as well as consistent configuration and come bundled with their own  
-set of utilities for common tasks.  
-  
-  
-  
-  
- "Desktop" also sometimes just means the viewable screen area.  
-This is more of the MS Window's meaning. X  
-environments though are capable of having multiple virtual  
-"desktops" that can be switched between as needed. This helps with  
-organizing different tasks. Each "desktop" may its own windows  
-and clients that are specific to it. Right now I have seven  
-!WindowMaker desktops  
-(!WindowMaker calls them  
-"!WorkSpaces"), and one of those I have dedicated to writing  
-this document. This "desktop" has thirteen unique windows at  
-the moment (man pages, browser windows, clock, gvim, xterms, etc).  
-  
-  
-  
-****  
-****  
-  
- "Clients" are any program that connect to the X server, and  
-require an X server for some task (e.g. to display itself). Often, these  
-are displayed in their own "window", but not always. For  
-instance, if I use CTRL-N to open a new  
-Mozilla window, this is one  
-X client but with two windows. If I run a command  
-line X utility like __xev__ to  
-view key and mouse events, this runs in the __xterm's__  
-window, so has none of its own, but is still a "client".  
-Clients can be locally running applications, or applications that are  
-running on another system over the network, but are displayed locally.  
-  
-  
-  
-****  
-****  
-  
-  
-The "Window Manager" is a special type of client application  
-and a user definable component of the GUI. It is what the user interacts  
-with to a large extent. The Window Manager provides such functionality as  
-window borders and decorations, menus, icons, virtual desktops, button  
-bars, tool bars, and allows the user to customize these. It is technically  
-possible to run X without a window manager  
-(though not very functional), but not the other way around. Window managers  
-should not be confused with "Desktop Environments" like  
-KDE. Desktop Environments include their own  
-preferred Window Manager, but this is a configurable. There is some  
-overlapping of responsibilities between Window Managers and Desktop  
-Environments.  
-  
-  
-  
-****  
-****  
-  
-  
-The "root window" is the background of your screen. It is  
-referred to as a window in name alone, it does not behave like any other  
-window, but rather you run your applications on the root window, or put an  
-image on it, or perhaps just a solid color. All other windows are children  
-of this parent window. The root window conceivably can be larger than the viewable  
-screen area.  
-  
-  
-  
-****  
-****  
-  
-  
-The "pointer" is the arrow or indicator of any  
-given shape which represents the location of your mouse, or other pointing  
-device. The pointer often changes to give you contextual feedback as to  
-what will happen when you use the mouse at that point on the screen.  
-  
-  
-  
-****  
-****  
-  
-  
-The "window" is a frame in which any given application runs  
-and which is "managed" by the Window Manager. This includes  
-pretty much anything except the so-called root window. Even windows which  
-do not appear to have frames, titles, or normal borders of any kind are  
-being managed by your window manger. The "active window" is  
-the window you are currently using. This window will will respond to the  
-keyboard when you type, and is traditionally denoted by the fact that your  
-mouse cursor is pointing at it, though this is not always the case. The  
-active window is said to have "focus". Most Window Managers  
-will somehow highlight the "active", or focused, window to  
-differentiate it from other windows.  
-  
-  
-  
-****  
-****  
-  
-  
-"Menus", "icons" and "task bars"  
-behave in X similar to the way they behave in  
-other windowing systems, and the same general principles apply.  
-  
-  
-  
-****  
-****  
-  
-  
-Windows that run text only applications are called "terminal  
-emulators", such as __xterm__ and various  
-similar applications. This is the well-known "command line" in  
-an X environment. These basically emulate a console text-only display, and  
-have some advantages due to their being used in  
-X. These are much more complex and sophisticated  
-applications than a simple DOS box on Windows.  
-  
-  
-  
-****  
-****  
-  
-  
-"Widgets" is the term used to describe such GUI control  
-components as buttons, sliders, menus, scrollbars, listboxes, checkboxes, etc.  
-"Toolkits" are libraries containing a diverse set of widgets  
-with the same look and feel. Some common examples are  
-GTK+ (used by GNOME,  
-Mozilla and others), Xaw  
-(X Athena Widget set), Tk,  
-Motif and QT (used  
-by KDE). Applications are built with one toolkit  
-or another. Sometimes the same application can be built with different  
-toolkits, depending on compile time options.  
-  
-  
-  
-****  
-****  
-  
- Window "geometry" is a shorthand way of expressing a window's  
-size and screen placement. This might look like  
-"60x20+10+50", which is WIDTH x HEIGHT +VERT_OFFSET  
-+HORZ_OFFSET. While both pairs are often specified, it is  
-permissible to use just one or the other pair.  
-  
-  
-  
-****  
-****  
-  
- In X lingo, "resources" are  
-definable application attributes. Commonly available  
-"resources" are fonts, colors, size, window title, etc,  
-etc.  
-  
-  
-  
-****  
-  
-----  
-!!10.2. Links and other References  
-  
-  
-  
-  
-  
-  
-****  
-  
- The definitive source of information on XFree86 is, of course,  
-http://xfree86.org. Don't forget  
-the man pages that you have installed already too (X, Xserver, XF86Config,  
-XFree86, xdm, xinit, xmodmap, startx, xauth, Xsecurity, etc, etc). These are  
-really mostly decent, though some are quite technical.  
-  
-  
-  
-  
- Some pages at xfree86.org to check:  
-  
-  
-  
-  
-  
-  
-  
- Docs and support info: http://www.xfree86.org/support.html for  
-various versions and topics.  
-  
-  
-  
-  
-  
-  
-  
-  
-  
- README: http://www.xfree86.org/current/README.html  
-  
-  
-  
-  
-  
-  
-  
-  
-  
- Release Notes: http://www.xfree86.org/current/RELNOTES.html  
-  
-  
-  
-  
-  
-  
-  
-  
-  
- DRI: http://www.xfree86.org/current/DRI.html  
-  
-  
-  
-  
-  
-  
-  
-  
-  
- Status: http://www.xfree86.org/current/Status.html  
-  
-  
-  
-  
-  
-  
-  
-  
-  
- Mouse: http://www.xfree86.org/current/mouse.html  
-  
-  
-  
-  
-  
-  
-  
-  
-  
- Supported card list:  
-http://xfree86.org/cardlist.html  
-  
-  
-  
-  
-  
-****  
-****  
-  
- Other related documents from LDP:  
-  
-  
-  
-  
-  
-  
-  
-  
-  
-*****  
-  
- If you are just starting out, you may find the  
-''X Window System Architecture Overview HOWTO'', http://www.linuxdoc.org/HOWTO/XWindow-Overview-HOWTO/  
-to be helpful. It covers all the basic concepts quite well.  
-  
-  
-  
-*****  
-*****  
-  
- ''The Remote X Apps Mini HOWTO'',  
-http://www.linuxdoc.org/HOWTO/mini/Remote-X-Apps.html,  
-does a nice job of discussing running X  
-remotely, and related security issues of X networking.  
-  
-  
-  
-*****  
-*****  
-  
- ''The XDMCP HOWTO'',  
-http://www.linuxdoc.org/HOWTO/XDMCP-HOWTO/index.html,  
-covers the X Display Manager Control Protocol, for running  
-X remotely. Also,  
-''The XDM and X Terminal mini-HOWTO'',  
-http://www.linuxdoc.org/HOWTO/mini/XDM-Xterm/index.html.  
-  
-  
-  
-*****  
-*****  
-  
- ''The XFree86 HOWTO'',  
-http://www.linuxdoc.org/HOWTO/XFree86-HOWTO/index.html,  
-succinctly covers installation, and initial configuration.  
-  
-  
-  
-*****  
-*****  
-  
- ''The XFree86 Video Timings HOWTO'',  
-http://www.linuxdoc.org/HOWTO/XFree86-Video-Timings-HOWTO/index.html,  
-gets down and dirty with the finer points of monitor tuning. Generally  
-not required for XFree86 v4.x.  
-  
-  
-  
-*****  
-*****  
-  
- ''The Xinerama HOWTO'',  
-http://www.linuxdoc.org/HOWTO/Xinerama-HOWTO.html,  
-covers multi-headed displays.  
-  
-  
-  
-*****  
-*****  
-  
- ''The Font HOWTO'',  
-http://www.linuxdoc.org/HOWTO/Font-HOWTO.html,  
-covers various font topics.  
-  
-  
-  
-*****  
-*****  
-  
- ''The Font De-Uglification Mini HOWTO'',  
-http://www.linuxdoc.org/HOWTO/mini/FDU/index.html,  
-covers a range of X font issues.  
-  
-  
-  
-*****  
-*****  
-  
- ''The International Keyboard HOWTO'';  
-http://www.linuxdoc.org/HOWTO/mini/Intkeyb/index.html  
-  
-  
-  
-*****  
-*****  
-  
- ''The Linux Infrared HOWTO'':  
-http://www.linuxdoc.org/HOWTO/Infrared-HOWTO/index.html  
-  
-  
-  
-*****  
-  
-  
-  
-****  
-****  
-  
- Wheel mice tips and configuration:  
-http://koala.ilog.fr/colas/mouse-wheel-scroll/  
-  
-  
-  
-****  
-****  
-  
- Linux and Laptops:  
-http://www.linux-laptop.net/  
-  
-  
-  
-****  
-****  
-  
- The O'Reilly series on X Window! Visit http://www.ora.com/ for the definitive books on X.  
-  
-  
-  
-****  
-****  
-  
- The X Consortium's web site is http://www.x.org/ ... or perhaps it's moved to  
-http://www.opengroup.org/.  
-  
-  
-  
-****  
-****  
-  
- http://www.x11.org/ is sort of a clearinghouse  
-for all things X.  
-  
-  
-  
-****  
-****  
-  
- And for everything else under the Sun: http://google.com/linux.  
-An incredible resource in its own right .  
-  
-  
-  
-****  
+Describe [HowToXWindowUserHOWTO ] here.