Chapter 7. The X Window System

Table of Contents

7.1. Key packages
7.2. Setting up desktop environment
7.2.1. Debian menu
7.2.2. Freedesktop.org menu
7.2.3. Debian menu under GNOME desktop environment
7.3. The server/client relationship
7.4. The X server
7.4.1. The (re)configuration of the X server
7.4.2. The connection methods to the X server
7.5. Starting the X Window System
7.5.1. Starting X session with gdm3
7.5.2. Customizing the X session (classic method)
7.5.3. Customizing the X session (new method)
7.5.4. Connecting a remote X client via SSH
7.5.5. Secure X terminal via the Internet
7.6. Fonts in the X Window
7.6.1. Basic fonts
7.6.2. Additional fonts
7.6.3. CJK fonts
7.7. X applications
7.7.1. X office applications
7.7.2. X utility applications
7.8. The X trivia
7.8.1. Keymaps and pointer button mappings in X
7.8.2. Classic X clients
7.8.3. The X terminal emulator — xterm
7.8.4. Running X clients as root

The X Window System on the Debian system is based on the source from X.Org. As of July 2009, they are X11R7.1(etch), X11R7.3(lenny), X11R7.3(squeeze) and X11R7.4(sid).

7.1. Key packages

There are a few (meta)packages provided to ease installation.

Table 7.1. List of key (meta)packages for X Window

(meta)package popcon size description
xorg http://qa.debian.org/popcon.php?package=xorg 78 X libraries, an X server, a set of fonts, and a group of basic X clients and utilities (metapackage)
xserver-xorg http://qa.debian.org/popcon.php?package=xserver-xorg 364 full suits of the X server and its configuration
xbase-clients http://qa.debian.org/popcon.php?package=xbase-clients 61 miscellaneous assortment of X clients
x11-common http://qa.debian.org/popcon.php?package=x11-common 465 filesystem infrastructure for the X Window System
xorg-docs http://qa.debian.org/popcon.php?package=xorg-docs 2056 miscellaneous documentation for the X.Org software suite
menu http://qa.debian.org/popcon.php?package=menu 1757 generate the Debian menu for all menu-aware applications
gksu http://qa.debian.org/popcon.php?package=gksu 207 Gtk+ frontend to su(1) or sudo(8)
menu-xdg http://qa.debian.org/popcon.php?package=menu-xdg 76 convert the Debian menu structure to the freedesktop.org xdg menu structure
xdg-utils http://qa.debian.org/popcon.php?package=xdg-utils 300 utilities to integrate desktop environment provided by the freedesktop.org
gnome-desktop-environment http://qa.debian.org/popcon.php?package=gnome-desktop-environment 42 standard GNOME desktop environment (metapackage)
kde-standard http://qa.debian.org/popcon.php?package=kde-standard 34 core KDE desktop environment (metapackage)
xfce4 http://qa.debian.org/popcon.php?package=xfce4 40 Xfce lightweight desktop environment (metapackage)
lxde-core http://qa.debian.org/popcon.php?package=lxde-core 26 LXDE lightweight desktop environment (metapackage)
fluxbox http://qa.debian.org/popcon.php?package=fluxbox 4387 Fluxbox: package for highly configurable and low resource X window manager

For the basics of X, refer to X(7), the LDP XWindow-User-HOWTO.

7.2. Setting up desktop environment

A desktop environment is usually a combination of a X window manager, a file manager, and a suite of compatible utility programs.

You can setup a full desktop environment such as GNOME, KDE, Xfce, or LXDE, from the aptitude under the task menu.

[Tip] Tip

Task menu may be out of sync with the latest package transition state under Debian unstable/testing environment. In such situation, you need to deselect some (meta)packages listed under aptitude(8) task menu to avoid package conflicts. When deselecting (meta)packages, you must select certain packages providing their dependencies manually to avoid them deleted automatically.

You may alternatively setup a simple environment manually just with a X window manager such as Fluxbox.

See Window Managers for X for the guide to the X window manager and the desktop environment.

7.2.1. Debian menu

Debian menu system provides a general interface for both text- and X-oriented programs with update-menus(1) from the menu package. Each package installs its menu data in the "/usr/share/menu/" directory. See "/usr/share/menu/README".

7.2.2. Freedesktop.org menu

Each package which is compliant to Freedesktop.org's xdg menu system installs its menu data provided by "*.desktop" under "/usr/share/applications/". Modern desktop environments which are compliant to Freedesktop.org standard use these data to generate their menu using the xdg-utils package. See "/usr/share/doc/xdg-utils/README".

7.2.3. Debian menu under GNOME desktop environment

In order to obtain access to the traditional Debian menu under GNOME desktop environment, you must install the menu-xdg package, click "System" → "Preference" → "Main Menu", and check the box for "Debian".

[Tip] Tip

You may need to do the similar for other modern desktop environments which are compliant to Freedesktop.org standard.

7.3. The server/client relationship

The X Window System is activated as a combination of the server and client programs. The meaning for the words server and client with respect to the words local and remote requires attention here.

Table 7.2. List of server/client terminology

type description
X server a program run on a local host connected to the user's display and input devices.
X client a program run on a remote host that processes data and talks to the X server.
application server a program run on a remote host that processes data and talks to the clients.
application client a program run on a local host connected to the user's display and input devices.

7.4. The X server

See xorg(1) for X server information.

7.4.1. The (re)configuration of the X server

[Note] Note

X server (post-lenny) is rewritten to use more information from standardized OS services such as HAL and D-bus, for its configuration than that from "/etc/X11/xorg.conf". So contents in "/etc/X11/xorg.conf" are getting less. You may need to work around transitional problems of X server.

The following (re)configures an X server by generating a new "/etc/X11/xorg.conf" file using dexconf(1).

# dpkg-reconfigure --priority=low x11-common
# dpkg-reconfigure --priority=low xserver-xorg

If you have manually edited this "/etc/X11/xorg.conf" file but would like it to be automatically updated again, run the following command.

# sudo dpkg-reconfigure -phigh xserver-xorg

Please check your X configuration with respect to the specification of your monitor carefully. For the large high resolution CRT monitor, it is a good idea to set the refresh rate as high as your monitor can handle (85 Hz is great, 75 Hz is OK) to reduce flicker. For the LCD monitor, slower standard refresh rate (60Hz) is usually fine due to its slow response.

[Note] Note

Be careful not to use too high refresh rate which may cause fatal hardware failure of your monitor system.

7.4.2. The connection methods to the X server

There are several ways of getting the "X server" (display side) to accept connections from an "X client" (application side).

Table 7.3. List of connection methods to the X server

method package popcon size user encryption pertinent use
xhost command xbase-clients http://qa.debian.org/popcon.php?package=xbase-clients 61 unchecked no deprecated
xauth command xbase-clients http://qa.debian.org/popcon.php?package=xbase-clients 61 checked no local connection via pipe
ssh -X command openssh-client http://qa.debian.org/popcon.php?package=openssh-client 2246 checked yes remote network connection
GNOME display manager gdm3 http://qa.debian.org/popcon.php?package=gdm3 5899 checked no(XDMCP) local connection via pipe
KDE display manager kdm http://qa.debian.org/popcon.php?package=kdm 3746 checked no(XDMCP) local connection via pipe
X display manager xdm http://qa.debian.org/popcon.php?package=xdm 725 checked no(XDMCP) local connection via pipe
WindowMaker display manager wdm http://qa.debian.org/popcon.php?package=wdm 1825 checked no(XDMCP) local connection via pipe
LTSP display manager ldm http://qa.debian.org/popcon.php?package=ldm 576 checked yes remote SSH network connection (thin client)

[Warning] Warning

Do not use remote TCP/IP connection over unsecured network for X connection unless you have very good reason such as use of encryption. A remote TCP/IP socket connection without encryption is prone to the eavesdropping attack and is disabled by default on the Debian system. Use "ssh -X".

[Warning] Warning

Do not use XDMCP connection over unsecured network either. It sends data via UDP/IP without encryption and is prone to the eavesdropping attack.

[Tip] Tip

LTSP stands for Linux Terminal Server Project.

7.5. Starting the X Window System

The X Window System is usually started as an X session which is the combination of an X server and connecting X clients. For the normal desktop system, both of them are executed on a workstation.

The X session is started by the following.

  • startx command started from the command line

  • One of the X display manager daemon programs *dm started from the end of the start up script in "/etc/rc?.d/" ("?" corresponding to the runlevel) directory

[Tip] Tip

The start up script for the display manager daemons checks the content of the "/etc/X11/default-display-manager" file before actually executing themselves. This ensures to have only one X display manager daemon program activated.

[Tip] Tip

See Section 8.3.5, “Specific locale only under X Window” for initial environment variables of the X display manager.

Essentially, all these programs execute the "/etc/X11/Xsession" script. Then the "/etc/X11/Xsession" script performs run-parts(8) like action to execute scripts in the "/etc/X11/Xsession.d/" directory. This is essentially an execution of a first program which is found in the following order with the exec builtin command.

  1. The script specified as the argument of "/etc/X11/Xsession" by the X display manager, if it is defined.

  2. The "~/.xsession" or "~/.Xsession" script, if it is defined.

  3. The "/usr/bin/x-session-manager" command, if it is defined.

  4. The "/usr/bin/x-window-manager" command, if it is defined.

  5. The "/usr/bin/x-terminal-emulator" command, if it is defined.

This process is affected by the content of "/etc/X11/Xsession.options". The exact programs to which these "/usr/bin/x-*" commands point, are determined by the Debian alternative system and changed by "update-alternatives --config x-session-manager", etc.

7.5.1. Starting X session with gdm3

gdm3(1) lets you select the session type (or desktop environment: Section 7.2, “Setting up desktop environment”), and language (or locale: Section 8.3, “The locale”) of the X session from its menu. It keeps the selected default value in "~/.dmrc" as the following.

[Desktop]
Session=default
Language=ja_JP.UTF-8

7.5.2. Customizing the X session (classic method)

On a system where "/etc/X11/Xsession.options" contains a line "allow-user-xsession" without preceding "#" characters, any user who defines "~/.xsession" or "~/.Xsession" is able to customize the action of "/etc/X11/Xsession" by completely overriding the system code. The last command in the "~/.xsession" file should use form of "exec some-window/session-manager" to start your favorite X window/session managers.

7.5.3. Customizing the X session (new method)

Here are new methods to customize the X session without completely overriding the system code as above.

  • The display manager gdm3 can select a specific session and set it as the argument of "/etc/X11/Xsession".

  • The "~/.xsessionrc" file is executed as a part of start up process. (desktop independent)

  • The "~/.gnomerc" file is executed as a part of start up process. (GNOME desktop only)

  • The GUI program based session management software may use the "~/.gnome2/session" file etc.

7.5.4. Connecting a remote X client via SSH

The use of "ssh -X" enables a secure connection from a local X server to a remote application server.

Set "X11Forwarding" entries to "yes" in "/etc/ssh/sshd_config" of the remote host, if you want to avoid "-X" command-line option.

Start the X server on the local host.

Open an xterm in the local host.

Run ssh(1) to establish a connection with the remote site as the following.

localname @ localhost $ ssh -q -X loginname@remotehost.domain
Password:

Run an X application command, e.g. "gimp", on the remote site as the following.

loginname @ remotehost $ gimp &

This method can display the output from a remote X client as if it were locally connected through a local UNIX domain socket.

7.5.5. Secure X terminal via the Internet

Secure X terminal via the Internet, which displays remotely run entire X desktop environment, can easily achieved by using specialized package such as ldm. Your local machine becomes a secure thin client to the remote application server connected via SSH.

7.6. Fonts in the X Window

Fontconfig 2.0 was created to provide a distribution independent library for configuring and customizing font access in 2002. Debian after squeeze uses Fontconfig 2.0 for its font configuration.

Font supports on X Window System can be summarized as follows.

Table 7.4. Table of packages to support X Window font systems

package popcon size description
xfonts-utils http://qa.debian.org/popcon.php?package=xfonts-utils 430 X Window System font utility programs
libxft2 http://qa.debian.org/popcon.php?package=libxft2 160 Xft, a library that connects X applications with the FreeType font rasterization library
libfreetype6 http://qa.debian.org/popcon.php?package=libfreetype6 835 FreeType 2.0 font rasterization library
fontconfig http://qa.debian.org/popcon.php?package=fontconfig 432 Fontconfig, a generic font configuration library — support binaries
fontconfig-config http://qa.debian.org/popcon.php?package=fontconfig-config 340 Fontconfig, a generic font configuration library — configuration data

You can check font configuration information by the following.

  • "xset q" for core X11 font path

  • "fc-match" for fontconfig font default

  • "fc-list" for available fontconfig fonts

[Tip] Tip

"The Penguin and Unicode" is a good overview of modern X Window System. Other documentations at http://unifont.org/ should provide good information on Unicode fonts, Unicode-enabled software, internationalization, and Unicode usability issues on free/libre/open source (FLOSS) operating systems.

7.6.1. Basic fonts

There are 2 major types of computer fonts.

  • Bitmap fonts (good for low resolution rasterization)

  • Outline/stroke fonts (good for high resolution rasterization)

While scaling of bitmap fonts causes jugged image, scaling of outline/stroke fonts produces smooth image.

Bitmap fonts on the Debian system are usually provided by compressed X11 pcf bitmap font files having their file extension ".pcf.gz".

Outline fonts on the Debian system are provided by the following.

  • PostScript Type 1 font files having their file extension ".pfb" (binary font file) and ".afm" (font metrics file).

  • TrueType (or OpenType) font files usually having their file extension ".ttf".

[Tip] Tip

OpenType is intended to supersede both TrueType and PostScript Type 1.

Table 7.5. Table of corresponding PostScript Type 1 fonts

font package popcon size sans-serif font serif font monospace font source of font
PostScript N/A N/A Helvetica Times Courier Adobe
gsfonts http://qa.debian.org/popcon.php?package=gsfonts 4632 Nimbus Sans L Nimbus Roman No9 L Nimbus Mono L URW (Adobe compatible size)
gsfonts-x11 http://qa.debian.org/popcon.php?package=gsfonts-x11 68 Nimbus Sans L Nimbus Roman No9 L Nimbus Mono L X font support with PostScript Type 1 fonts.
t1-cyrillic http://qa.debian.org/popcon.php?package=t1-cyrillic 4984 Free Helvetian Free Times Free Courier URW extended (Adobe compatible size)
lmodern http://qa.debian.org/popcon.php?package=lmodern 42620 LMSans* LMRoman* LMTypewriter* scalable PostScript and OpenType fonts based on Computer Modern (from TeX)

Table 7.6. Table of corresponding TrueType fonts

font package popcon size sans-serif font serif font monospace font source of font
ttf-mscorefonts-installer http://qa.debian.org/popcon.php?package=ttf-mscorefonts-installer 124 Arial Times New Roman Courier New Microsoft (Adobe compatible size) (This installs non-free data)
ttf-liberation http://qa.debian.org/popcon.php?package=ttf-liberation 47 Liberation Sans Liberation Serif Liberation Mono Liberation Fonts project (Microsoft compatible size)
ttf-freefont http://qa.debian.org/popcon.php?package=ttf-freefont 5076 FreeSans FreeSerif FreeMono GNU freefont (Microsoft compatible size)
ttf-dejavu http://qa.debian.org/popcon.php?package=ttf-dejavu 76 DejaVu Sans DejaVu Serif DejaVu Sans Mono DejaVu, Bitstream Vera with Unicode coverage
ttf-dejavu-core http://qa.debian.org/popcon.php?package=ttf-dejavu-core 2868 DejaVu Sans DejaVu Serif DejaVu Sans Mono DejaVu, Bitstream Vera with Unicode coverage (sans, sans-bold, serif, serif-bold, mono, mono-bold)
ttf-dejavu-extra http://qa.debian.org/popcon.php?package=ttf-dejavu-extra 6560 N/A N/A N/A DejaVu, Bitstream Vera with Unicode coverage (oblique, italic, bold-oblique, bold-italic, condensed)
ttf-unifont http://qa.debian.org/popcon.php?package=ttf-unifont 16044 N/A N/A unifont GNU Unifont, with all printable character code in Unicode 5.1 Basic Multilingual Plane (BMP)

[Tip] Tip

DejaVu fonts are based on and superset of Bitstream Vera fonts.

7.6.2. Additional fonts

aptitude(8) helps you find additional fonts easily.

  • The short package list under "Tasks" → "Localization"

  • The filtered flat package list of font data with regex on debtag: "~Gmade-of::data:font"

  • The filtered flat package list of the BDF (bitmap) font packages with regex on package name: "~nxfonts-"

  • The filtered flat package list of the TrueType (outline) font packages with regex on package name: "~nttf-"

Since Free fonts are sometimes limited, installing or sharing some commercial TrueType fonts is an option for a Debian users. In order to make this process easy for the user, some convenience packages have been created.

  • ttf-mathematica4.1

  • ttf-mscorefonts-installer

You'll have a really good selection of TrueType fonts at the expense of contaminating your Free system with non-Free fonts.

7.6.3. CJK fonts

Here are some key points focused on fonts of CJK characters.

Table 7.7. Table of key words used in CJK font names to indicate font types

font type Japanese font name Chinese font name Korean font name
sans-serif gothic, ゴチック hei, gothic dodum, gulim, gothic
serif mincho, 明朝 song, ming batang

Font name such as "VL PGothic" with "P" is a proportional font which corresponds to the fixed width "VL Gothic" font.

For example, Shift_JIS code table comprises 7070 characters. They can be grouped as the following.

  • JIS X 0201 single-byte characters (191 characters, a.k.a. half-width characters)

  • JIS X 0208 double-byte characters (6879 characters, a.k.a. full-width characters)

Double-byte characters occupy double width on console terminals which uses CJK fixed width fonts. In order to cope with such situation, Hanzi Bitmap Font (HBF) File with file extension ".hbf" may be deployed for fonts containing single-byte and double-byte characters.

In order to save space for TrueType font files, TrueType font collection file with file extension ".ttc" may be used.

In order to cover complicated code space of characters, CID keyed PostScript Type 1 font is used with CMap files starting themselves with "%!PS-Adobe-3.0 Resource-CMap". This is rarely used for normal X display but used for PDF rendering etc. (see Section 7.7.2, “X utility applications”).

[Tip] Tip

The multiple glyphs are expected for some Unicode code points due to Han unification. One of the most annoying ones are "U+3001 IDEOGRAPHIC COMMA" and "U+3002 IDEOGRAPHIC FULL STOP" whose character positions differ among CJK countries. Configuring priority of Japanese centric fonts over Chinese ones using "~/.fonts.conf" should give peace of minds to Japanese.

7.7. X applications

7.7.1. X office applications

Here is a list of basic office applications (OO is OpenOffice.org).

Table 7.8. List of basic X office applications

package popcon package size type description
openoffice.org-writer http://qa.debian.org/popcon.php?package=openoffice.org-writer 164 OO word processor
openoffice.org-calc http://qa.debian.org/popcon.php?package=openoffice.org-calc 164 OO spreadsheet
openoffice.org-impress http://qa.debian.org/popcon.php?package=openoffice.org-impress 164 OO presentation
openoffice.org-base http://qa.debian.org/popcon.php?package=openoffice.org-base 164 OO database management
openoffice.org-draw http://qa.debian.org/popcon.php?package=openoffice.org-draw 164 OO vector graphics editor (draw)
openoffice.org-math http://qa.debian.org/popcon.php?package=openoffice.org-math 164 OO mathematical equation/formula editor
abiword http://qa.debian.org/popcon.php?package=abiword 5754 GNOME word processor
gnumeric http://qa.debian.org/popcon.php?package=gnumeric 7698 GNOME spreadsheet
gimp http://qa.debian.org/popcon.php?package=gimp 15168 GTK bitmap graphics editor (paint)
inkscape http://qa.debian.org/popcon.php?package=inkscape 80425 GNOME vector graphics editor (draw)
dia-gnome http://qa.debian.org/popcon.php?package=dia-gnome 617 GNOME flowchart and diagram editor
planner http://qa.debian.org/popcon.php?package=planner 1146 GNOME project management
kword http://qa.debian.org/popcon.php?package=kword NOT_FOUND KDE word processor
kspread http://qa.debian.org/popcon.php?package=kspread NOT_FOUND KDE spreadsheet
kpresenter http://qa.debian.org/popcon.php?package=kpresenter NOT_FOUND KDE presentation
kexi http://qa.debian.org/popcon.php?package=kexi NOT_FOUND KDE database management
karbon http://qa.debian.org/popcon.php?package=karbon NOT_FOUND KDE vector graphics editor (draw)
krita http://qa.debian.org/popcon.php?package=krita NOT_FOUND KDE bitmap graphics editor (paint)
kchart http://qa.debian.org/popcon.php?package=kchart NOT_FOUND KDE graph and chart drawing program
kformula http://qa.debian.org/popcon.php?package=kformula NOT_FOUND KDE mathematical equation/formula editor
kplato http://qa.debian.org/popcon.php?package=kplato NOT_FOUND KDE project management

7.7.2. X utility applications

Here is a list of basic utility applications which caught my eyes.

Table 7.9. List of basic X utility applications


[Caution] Caution

The poppler-data package (previously non-free, see Section 11.3.1, “Ghostscript”) needs to be installed for evince and okular to display CJK PDF documents using Cmap data (Section 7.6.3, “CJK fonts”).

[Note] Note

Installing softwares such as scribus (KDE) on GNOME desktop environment are quite acceptable since corresponding functionality is not available under GNOME desktop environment. But installing too many packages with duplicated functionalities clutter your menu.

7.8. The X trivia

7.8.1. Keymaps and pointer button mappings in X

xmodmap(1) is a utility for modifying keymaps and pointer button mappings in the X Window System. To get the keycode, run xev(1) in the X and press keys. To get the meaning of keysym, look into the MACRO definition in "/usr/include/X11/keysymdef.h" file (x11proto-core-dev package). All "#define" statements in this file are named as "XK_" prepended to keysym names.

7.8.2. Classic X clients

Most traditional X client programs, such as xterm(1), can be started with a set of standard command line options to specify geometry, font, and display.

They also use the X resource database to configure their appearance. The system-wide defaults of X resources are stored in "/etc/X11/Xresources/*" and application defaults of them are stored in "/etc/X11/app-defaults/*". Use these settings as the starting points.

The "~/.Xresources" file is used to store user resource specifications. This file is automatically merged into the default X resources upon login. To make changes to these settings and make them effective immediately, merge them into the database using the following command.

$ xrdb -merge ~/.Xresources

See x(7) and xrdb(1).

7.8.3. The X terminal emulator — xterm

Learn everything about xterm(1) at http://dickey.his.com/xterm/xterm.faq.html.

7.8.4. Running X clients as root

[Warning] Warning

Never start the X display/session manager under the root account by typing in root to the prompt of the display manager such as gdm3 because it is considered unsafe (insecure), even when you plan to perform administrative activities. The entire X architecture is considered insecure if run as root. You must always use the lowest privilege level possible, like a regular user account.

Easy ways to run a particular X client, e.g. "foo" as root is to use sudo(8) etc. as the following.

$ sudo foo &
$ sudo -s
# foo &
$ gksu foo &
$ ssh -X root@localhost
# foo &
[Caution] Caution

Use of ssh(1) just for this purpose as above is waste of resource.

In order for the X client to connect to the X server, please note the following.

  • Values of the old user's "$XAUTHORITY" and "$DISPLAY" environment variables must be copied to the new user's ones.

  • The file pointed by value of the "$XAUTHORITY" environment variable must be readable by the new user.

The gksu package (popcon: ) is a specialized GTK+ GUI package for gaining the root privileges. It can be configured to use su(1) or sudo(8) as its backend depending on the "/apps/gksu/sudo-mode" gconf key. You can edit gconf key using gconf-editor(1) (menu: "Applications" → "System Tools" → "Configuration Editor").