%general-entities; ]> $LastChangedBy$ $Date$ X Window System Components Configuring The X Window System If you've installed the X Window System in any prefix other than /usr, as the root user, add </usr/X11R6>/lib to the /etc/ld.so.conf file and run ldconfig. Additionally, while still the root user, ensure </usr/X11R6>/bin and </usr/X11R6>/lib/pkgconfig are added to your PATH and PKG_CONFIG_PATH environment variables, respectively. Instructions for doing this are described in the section . As the root user create a basic X Window System configuration file with the following commands: For Xorg: cd ~ && Xorg -configure For XFree86: cd ~ && XFree86 -configure /etc/X11/xorg.conf /etc/X11/XF86Config The screen will go black and you may hear some clicking of the monitor. This command will create a file in your home directory, xorg.conf.new for Xorg, or XF86Config.new for XFree86. Edit the newly created configuration file to suit your system. The details of the files are located in the xorg.conf.5x and XF86Config.5x man pages. Some things you may want to do are: Section "Files". Change the order of the font paths searched. You may want to put 100dpi fonts ahead of 75dpi fonts if your system normally comes up closer to 100 dots per inch. You may want to remove some font directories completely. Section "Module". If you are going to install NVidia drivers, remove the "dri" line. Sections "InputDevice". You may want to change the keyboard autorepeat rate by adding . Section "Monitor". Specify the and values if the system does not automatically detect the monitor and its values. Section "Device". You may want to set some of the options available for your selected video driver. A description of the driver parameters is in the man page for your driver. Section "Screen". Add a DefaultDepth statement such as: . In the SubSection for your default depth, add a modes line such as: . The first mode listed will normally be the starting resolution. Test the system with one of the following commands: For Xorg: X -config ~/xorg.conf.new For XFree86: XFree86 -xf86config ~/XF86Config.new You will only get a gray background with an X-shaped mouse cursor, but it confirms the system is working. Exit with Control+Alt+Backspace. If the system does not work, take a look at /var/log/Xorg.0.log or /var/log/XFree86.0.log to see what went wrong. As the root user, create the configuration directory and move the configuration file to the new directory: For Xorg: install -v -m755 -D ~/xorg.conf.new /etc/X11/xorg.conf For XFree86: install -v -m755 -D ~/XF86Config.new /etc/X11/XF86Config As the root user, create .xinitrc: cat > ~/.xinitrc << "EOF" # Begin .xinitrc file xterm -g 80x40+0+0 & xclock -g 100x100-0+0 & twm EOF This provides an initial screen with a small clock that is managed by a simple window manager, Tab Window Manager. For details of twm, see the man page. Both the default, and the BLFS configuration for Xorg include xterm. Xorg's modular distribution no longer includes xterm, and as a result, the startx command will fail if you have not installed when using the modular X Window System. You can remove the xterm line in the above config file to test the xserver, or install one of the other terminal emulators and make appropriate changes. ~/.xinitrc When needed, the X Window System creates the directory /tmp/.ICE-unix if it does not exist. If this directory is not owned by root, the X Window System delays startup by a few seconds and also appends a warning to the logfile. This also affects startup of other applications. To improve performance, it is advisable to manually create the directory before the X Window System uses it. Add the file creation to /etc/sysconfig/createfiles that is sourced by the /etc/rc.d/init.d/cleanfs startup script. cat >> /etc/sysconfig/createfiles << "EOF" /tmp/.ICE-unix dir 1777 root root EOF /etc/sysconfig/createfiles Start X with: startx and a basic functional X Window System should be displayed. For a list of the package contents and a description of the commands, see the sections in the . Checking Direct Rendering Infrastructure (DRI) Installation DRI DRI is a framework for allowing software to access graphics hardware in a safe and efficient manner. It is installed in X by default if you have a supported video card. To check if DRI is installed properly, check the log file /var/log/XFree86.0.log or /var/log/Xorg.0.log for statements like: (II) R128(0): Direct rendering enabled From an xterm, run glxinfo and look for the phrase: direct rendering: Yes You can also run the test program glxgears. This program brings up a window with three gears turning. The xterm will display how many frames were drawn every five seconds, so this is a reasonable benchmark. The window is scalable, and the frames drawn per second is highly dependent on the size of the window. glxgears glxinfo For troubleshooting problems, check the DRI Users Guide at . Setting up Fonts There are two font systems in the X Window System. The first is the core X font protocol, and the second is Xft. Toolkits that use the core X font protocol include Xt, Xaw, Motif clones and GTK+-1.2. Toolkits that use Xft include GTK+-2 and Qt and use Fontconfig for control. Both font systems should be configured for proper font coverage in the X Window System. /etc/X11/xorg.conf /etc/X11/XF86Config Core X Font Protocol Core X Font Protocol The core X font protocol finds fonts from the server configuration file (xorg.conf or XF86Config). If no font paths exist in the configuration file, the server will fall back to an internal hard-coded path. Assuming the prefix for your X installation is /usr/X11R6, the core fonts will reside in subdirectories of /usr/X11R6/lib/X11/fonts. For each directory in the path, the server reads three files: fonts.dir - maps font files to font names; updated with mkfontdir fonts.alias - defines aliases (such as "9x18") for existing fonts fonts.scale - lists scalable fonts; updated with mkfontscale The core X fonts protocol uses names such as -misc-fixed-medium-r-normal--13-120-75-75-c-80-iso8859-1. These fonts are rendered by the X server without antialiasing. The server itself uses the "cursor" font for painting the mouse cursor, and the protocol specification requires the font "fixed" to be available. Scalable fonts, such as Type1 and TrueType, are read from fonts.scale files by the server. The core X font system uses the "freetype" module for non-antialiased rendering of these fonts. Ensure that the "freetype" module is loaded in the XF86config or xorg.conf file by adding it to the "Module" section: Section "Module" ... Load "freetype" ... EndSection The character set used is part of the font name, e.g. "-iso8859-1". It is important that applications which support a non-English interface specify the character set correctly so that the proper glyphs are used. This can be controlled through the X resources, which will be described later. In some cases, applications rely upon the fonts named "fixed" or something like "9x18". In these cases, it is important that the fonts.alias file specifies the correct character set. Users of ISO-8859-X encodings where X != 1 should modify the /usr/lib/X11/fonts/misc/fonts.alias file by replacing the "iso8859-1" string with the proper encoding name. This is accomplished by running the following command as the root user, substituting the proper value for <X>: sed -i 's,iso8859-1\( \|$\),iso8859-<X>\1,g' \ /usr/lib/X11/fonts/{75dpi,100dpi,misc}/fonts.alias Users of Cyrillic fonts have properly defined aliases in /usr/lib/X11/fonts/cyrillic/fonts.alias. However, this file will not be used unless the /usr/lib/X11/fonts/cyrillic directory is first in the font search path. Otherwise, the /usr/lib/X11/fonts/misc/fonts.alias file will be used. Xft Font Protocol TrueType Fonts Xft provides antialiased font rendering through Freetype, and fonts are controlled from the client side using Fontconfig. The default search path is /usr/share/fonts and ~/.fonts. When installing X, symlinks were created from the OTF and TTF X font directories to /usr/share/fonts/X11-{OTF,TTF}. This prevents Fontconfig from using the poorly rendered Type1 fonts or the non-scalable bitmapped fonts. Fontconfig searches directories in its path recursively and maintains a cache of the font characteristics in fonts.cache-1 files in each directory. If the cache appears to be out of date, it is ignored, and information is (slowly) fetched from the fonts themselves. This cache can be regenerated using the fc-cache command at any time. Fontconfig uses names such as "Monospace 12" to define fonts. Applications generally use generic font names such as "Monospace", "Sans" and "Serif". Fontconfig resolves these names to a font that has all characters that cover the orthography of the language indicated by the locale settings. Knowledge of these font names is included in /etc/fonts/fonts.conf. Standard scalable fonts that come with X provide very poor Unicode coverage. You may notice in applications that use Xft that some characters appear as a box with four binary digits inside. In this case, a font set with the available glyphs has not been found. Other times, applications that don't use other font families by default and don't accept substitutions from Fontconfig will display blank lines when the default font doesn't cover the orthography of the user's language. This happens, e.g., with Fluxbox in the ru_RU.KOI8-R locale. In order to provide greater Unicode coverage, it is recommended that you install these fonts: DejaVu fonts - These fonts are replacements for the Bitstream Vera fonts and provide Latin-based scripts with accents and Cyrillic glyphs. Fontconfig does not know about the DejaVu fonts by default, so /etc/fonts/fonts.conf will have to be edited for it to be recognized by the generic names such as "Sans". This will be described below. FreeFont - This set of fonts covers nearly every non-CJK character, but is not visually pleasing. Fontconfig will use it as a last resort to substitute generic font family names. Microsoft Core fonts - These fonts provide slightly worse Unicode coverage than FreeFont, but are better hinted. Be sure to read the license before using them. Fontconfig knows about them by default. Firefly New Sung font - This font provides Chinese coverage. However, Fontconfig does not know about this font by default. Arphic fonts - A similar set of Chinese fonts to the Firefly New Sung font. Fontconfig knows about these fonts by default and will substitute them for generic family names. Kochi fonts - These provide Japanese characters, and Fontconfig knows about these fonts by default. Baekmuk fonts - These fonts provide Korean coverage, and Fontconfig knows about these fonts by default. The list above will not provide complete Unicode coverage. For more information, please visit the Unicode Font Guide. As an example, consider the installation of the DejaVu fonts. From the unpacked source directory, run the following commands as the root user: install -v -d -m755 /usr/share/fonts/dejavu && install -v -m644 *.ttf /usr/share/fonts/dejavu && fc-cache -v /usr/share/fonts/dejavu Earlier it was mentioned that /etc/fonts/fonts.conf could be modified to use DejaVu using the default family names. Since DejaVu is a replacement for Bitstream Vera fonts, it can be substituted for that family. Visually inspect the fonts.conf to see how fonts are grouped together under the generic family names and a preference list is created. To replace Bitstream Vera with DejaVu, as the root user: sed -i 's/<family>Bitstream Vera/<family>DejaVu/' /etc/fonts/fonts.conf User Notes: Setting up Keyboards In this version of X, non-Latin keyboard layouts do not include Latin configurations as was previous practice. To set up a keyboard for Latin and non-Latin input, change the XkbLayout keyboard driver option in the InputDevice section of the XF86Config or xorg.conf file. For example: Section "InputDevice" Identifier "Keyboard0" Driver "Keyboard" Option "XkbModel" "pc105" Option "XkbLayout" "en_US,ru" Option "XkbOptions" "grp:switch,grp:alt_shift_toggle,grp_led:scroll" EndSection In this example, you can use the Alt+Shift combination to switch between keyboard layouts and use the Scroll Lock LED to indicate when the second layout is active. Setting up XDM xdm provides a graphical logon capability and is normally set up in /etc/inittab. Most of the information you need to customize xdm is found in its man page. To execute xdm during bootup, change the initdefault level to 5 and add the following lines to /etc/inittab: xdm # Run xdm as a separate service x:5:respawn:/usr/X11R6/bin/xdm -nodaemon If Linux-PAM is installed on your system, you should create a PAM entry for xdm by duplicating the login entry using the following command: /etc/pam.d/xdm cp -v /etc/pam.d/login /etc/pam.d/xdm Using X Resources There are many options that can be set in X and X clients via resources. Typically resources are set in the ~/.Xresources file. The layout of the ~/.Xresources file consists of a list of specifications in the form of ~/.Xresources object.subobject[.subobject...].attribute: value Components of a resource specification are linked together by either tight, represented by a dot (.), or loose, represented by an asterisk (*), bindings. A tight binding indicates that the components on either side of the dot must be directly next to each other as defined in a specific implementation. An asterisk is a wildcard character that means that any number of levels in a defined hierarchy can be between the components. For example, X offers two special cursors: redglass and whiteglass. To use one of these resources, you need to add the following line: Xcursor.theme: whiteglass However, you can specify the background for all clients with: *background: blue More specific resource variables will override less specific names. Resource definitions can be found in the man pages for each respective client. In order to load your resources, the xrdb program must be called with the appropriate parameters. Typically, the first time resources are loaded, you use: xrdb -load <filename> To add resources to X's database in memory, use: xrdb -merge <filename> The xrdb instruction is usually placed in ~/.xinitrc or ~/.xsession. To get more information, see the xrdb man page. xrdb