Chapter 9. The X Window System
Prev  Part III. System configuration, administration and tuning  Next




Chapter 9. The X Window System



Table of Contents


9.1. What is X11 / Xorg?

9.2. Configuration

9.3. The keyboard

9.4. The monitor

9.5. Starting X

9.6. Customizing X

9.7. Other window managers or desktop environments

9.8. Graphical login with xdm

9.9. Using multiple or remote X servers

9.10. Further resources




9.1. What is X11 / Xorg?


NetBSD uses the X Window System to provide a graphical interface.

Please note that the X Window System is a rather bare bones  framework. It acts as a base for modern desktop environments like  MATE, or Xfce, but they are not part of the X Window System.  NetBSD ships with the X Window System, but it does not include these  desktop environments; they must be added via pkgsrc.

When you start using X you'll find many new terms which you may  find confusing at first. The basic elements are:


AnX server running on top of the  hardware. The X server provides a standard way to display  graphics (including fonts for text display) and get  mouse/keyboard/other input.  On most NetBSD ports, the  Xorg(1) display server is used.  Other X servers included with NetBSD include  Xnest(1),  which runs an X server inside another X server as a window,  and Xvfb(1), which runs an off-screen X server,  and is typically used to provide a full remote-only desktop with  x11/x11vnc.  

X clients. These are the programs you  directly interact with. They run on top of the X server. A web  browser like Firefox is an example of an X client. X is  network-transparent, which means that you can run X clients on one  machine, and the X server (i.e., the display, with video hardware)  on another machine.  The X client picks a server to use as a display based on  the DISPLAY environment variable,  typically :0 for the first server, and  :1 for the second.

Awindow manager running on top of the X  server. The window manager is a special X client that is allowed  to control the placement of windows. It can also  decorate windows with standard widgets  (usually these provide actions like window motion, resizing,  iconifying, window killing, etc.).  ctwm(1) is NetBSD's default window  manager.

Adesktop environment such as MATE,  or Xfce. These are suites of integrated software designed to give you  a well-defined range of software and a more or less common interface  to each program. These typically include a window manager, file  manager, web browser, email client, multimedia player, text editor,  address book, help browser, etc. As you may have guessed, a desktop  environment is not needed to use X, but many users will want to  install one.

Acompositororcompositing manager runs on the X server and  redirects rendering to an off-screen buffer, typically using the  GPU (Graphics Processing Unit) hardware for final rendering.  It can provide additional eye-candy and often VSync (vertical sync).  Some window managers, typically those included with large desktop  environments, include their own compositing managers.  xcompmgr and  x11/picom  are external compositing managers.


The X Window System is included with NetBSD as separate distribution  sets, see Section 3.10, Installation type. It can be added to an  installed system with sysinst(8).

On NetBSD, X11 lives under the filesystem hierarchy  /usr/X11R7. Therefore, to use X,  /usr/X11R7/bin must be in your shell's  PATH. See ~/.profile.



9.2. Configuration


In most cases, you will be able to start using X without any  configuration at all, and startx will work just  fine.

In rare cases, however, configuration of the X  server is required. This configuration file is located at  /etc/X11/xorg.conf. The structure of the  configuration file is described formally in xorg.conf(5).

To generate an initial configuration file for your X server,  run the command
# X -configure

This command should create a configuration file and place it in  your home directory. To test the generated configuration  file, run, e.g.,
# X -config ~/xorg.conf.new

If this succeeds, you should see a crosshatched background and  a cursor in the shape of an X. Try moving the cursor around to  verify that the mouse is functional. You can then switch to another  virtual terminal (Ctrl-Alt-F#) or log in remotely and kill the X process.  

If the above test was successful, move the file into place  as /etc/X11/xorg.conf and you are ready to go.  



9.3. The keyboard


Even if you have already configured your keyboard for wscons  (see Section 8.1, wscons), you need to configure it for  X as well, at least if you want to use a non-US layout.

An easy solution is to use setxkbmap(1) .

Here is an example that shows how to use a Hebrew keyboard, with Ctrl-Alt  used to switch layouts, and with the position of the Escape and Caps Lock keys swapped  as an additional option:
setxkbmap -option grp:alt_shift_toggle us,il \
 -option caps:swapescape -option terminate:ctrl_alt_bksp

If you wish to change the repeat rate of your keyboard, you can  set it with the xset(1) command, which takes two  arguments: delay and rate, respectively. The following example  sets the initial delay to 200 milliseconds and the repeat rate to 30  per second:
$ xset r 200 30

You can also run this command in your .xinitrcor.xsession file.  See below (Section 9.6, Customizing X) for more  information.



9.4. The monitor


If X does not run at the resolution you think it should, first  run xrandr and see if the resolution you want is  listed. If your preferred resolution is listed in that command's  output, you can change resolutions with, e.g.,  
$ xrandr -s 1680x1050

xrandr can also be used to enable output to hot-plugged monitors.  

Managing outputs can be done graphically with the  pkgsrc package x11/arandr.  



9.5. Starting X


You can start X with the following command:
$ startx

If your basic X server configuration is correct, you are left in  the X environment with the default window manager  (ctwm). If you want a more advanced window  manager or desktop environment, many are available in pkgsrc. See  Section 9.7, Other window managers or desktop environments for information about  adding and changing window managers.



9.6. Customizing X


One of the first things you will want to do is to change the  programs that run when X is first started. The easiest way to do this  is to copy the default .xinitrc file to your home  directory and modify it, or create a simple new one from scratch.  For example:
$ cp /etc/X11/xinit/xinitrc ~/.xinitrc
$ chmod u+w ~/.xinitrc
$ vi ~/.xinitrc

If you use xdm(1), ~/.xsession is used  in place of ~/.xinitrc.

The following example shows how to start the window manager  (ctwm) and open an instance of the  xterm and xterm  programs. The screen background color is set to bisque4,  which is defined in /usr/X11R7/lib/X11/rgb.txt.  
...
# start some programs - a basic clcok
xclock -geometry 50x50-1-1 &
# change the color of the "root window" ("desktop background")
xsetroot -solid bisque4 &
# spawn a terminal
uxterm -geometry 80x34-1+1 -bg OldLace &
exec ctwm -W   # no '&' here

With this type of setup, to quit X you must exit the window  manager, which is usually done by selecting "exit" from its  menu.

The above example is very simple, but illustrates the basics  of controlling the clients that are run when X is started. You can  run any number of commands from your .xinitrc,  including basic X configuration commands like  xset b off to turn off the bell.



9.7. Other window managers or desktop environments


If you don't like ctwm, which is a very  simple window manager, you can install another window manager or  a desktop environment from pkgsrc.  The following example uses the Openbox window manager, but there are  many others available in pkgsrc/wm.

Openbox can be installed via binary packages or compiled with  pkgsrc. As always, assuming a properly set PKG_PATH, the binary package  method is:  
# pkgin in openbox

To build it with pkgsrc, run:  
# cd /usr/pkgsrc/wm/openbox
# make install



Openbox is now installed; to start it you must modify your  .xinitrc file:  substitute the line which calls ctwm with  a line which calls openbox.  For example:
# start some useful programs
xclock -geometry 50x50-1-1 &
# start window manager:
exec openbox   # no '&' here

The startx command will start the X11 session  with Openbox. As configured in the example .xinitrc  file above, choosing Log Out from Openbox's  menu will end the X11 session.  

Installing a desktop environment is almost as easy. The following  example shows how to use the Xfce desktop environment.
# pkgin in xfce4

Depending on your requirements, you may wish to enable  dbus as a system-wide service. The following example  demonstates how. (If you don't enable dbus to run as a system-wide  service, startxfce4 will start dbus under your  user account during initialization.)
# cp /usr/pkg/share/examples/rc.d/dbus /etc/rc.d
# echo dbus=YES >> /etc/rc.conf
# service dbus start

If you wish to be able to control your system's power state from  within the desktop, the account you intend to run X under must also  be a member of the operator group  (see Section 5.6, Adding users).

After running the above commands, edit your  .xinitrc as above and change  openbox (orctwm) to  startxfce4. The next time you run  startx the Xfce desktop environment will be  started.



9.8. Graphical login with xdm


If you always use X and the first thing you do after you log in  is run startx, you can set up  a graphical login to do this automatically. It is very easy:



Create the .xsession file in your home  directory. This file is similar to .xinitrc  and can, in fact, be a link to it.
$ ln -s .xinitrc ~/.xsession



Modify /etc/rc.conf, adding the following  line:
xdm=YES       # x11 display manager



Start xdm(1) (or reboot your system, as this will be done  automatically from now on):
# service xdm start



The configuration files for xdm  are in the /etc/X11/xdm  directory. The Xservers file specifies the  virtual console that X is started on. It defaults to  vt05, which is the console you reach via  Ctrl+Alt+F5. If you want to use a different virtual  console, change vt05 as desired. In order to avoid keyboard contention  between getty and xdm, be sure to start xdm on a virtual terminal  where getty is disabled. For example, if in  Xservers you have:
:0 local /usr/X11R7/bin/X :0 vt04

then in /etc/ttys you should have
ttyE3   "/usr/libexec/getty Pc"         wsvt25   off secure

(Please note that vt04 corresponds to ttyE3; in  /etc/X11/xdm/Xservers, numbering starts at 1,  but in /etc/ttys, numbering starts at 0.)

If you are using xdm to start various  modern desktop environments, such as Xfce or MATE, you will need to  override its default permitted authorization mechanisms, by adding  the following to /etc/X11/xdm/xdm-config:
DisplayManager*authName:    MIT-MAGIC-COOKIE-1

If you want to change the look of your xdm login screen, you can  modify the xdm configuration file.  For example, to change the background color you can add the  following line to the Xsetup_0 file:
xsetroot -solid SeaGreen



9.9. Using multiple or remote X servers


This is intended as a simple example of how to use multiple  X servers. For illustration purposes, we'll simply use  Xnest(1), which creates a new X server  :1 as a window on the existing server  :0:
$ Xnest :1 &

It's then possible to run programs on the second server,  or even a different window manager:
$ DISPLAY=:1 uxterm &
$ DISPLAY=:1 ctwm &

Using X11 forwarding, programs  can run on a remote machine while displaying on the local  machine. This must typically be enabled in  /etc/ssh/sshd_config:
X11Forwarding yes

Log in with ssh(1) and run X programs the normal way:
$ ssh -X remote.machine.example.com
$ uxterm &

On a completely headless system (with no monitor),  Xvfb(1) (X virtual framebuffer)  can be used in a similar manner. The fully virtual  screen of the X server can be exported over the network with  x11/x11vnc:
$ Xvfb :1 &
$ DISPLAY=:1 ctwm &
$ x11vnc -display :1 -localhost -passwdfile /path/to/password &

Notice we use the -localhost option.  In theory this stops remote connections, however, in practice  we're using a SSH tunnel to forward the VNC port, adding an extra  layer of security. To connect to the headless machine:
$ ssh -L 5900:hostname:5900 hostname
$ vncviewer localhost &



9.10. Further resources



An X Window System Tutorial  is a video series that attempts to explain basic concepts  of the X Window System, including the role of the window manager.

X Window System User's Guide for X11R3 and R4  (PDF,  Web)  by Valerie Quercia and Tim O'Reilley  is a classic book describing some X features that  is now available to read for free online.  





Prev  Up  Next
Chapter 8. Console drivers  Home  Chapter 10. Audio