When you start X, Debian runs some shell scripts that start your
window manager and other X clients. By default, a window manager, an
xconsole, and an xterm are started for you.
To customize your X startup, the file /etc/X11/config must contain
the line allow-user-xsession. If it does not, log in as root and add
the line now. Then log back in as yourself and continue the
tutorial.
You can see how Debian’s X startup works in the file /etc/X11/
Xsession. Note that you can change the behavior of /etc/X11/Xsession
by modifying the file /etc/X11/config, which specifies a few
system-wide preferences.
To run the clients of your choice when X starts, you create an
executable shell script called .xsession in your home directory.
$ touch ~/.xsession
This creates the file.
$ chmod u+x ~/.xsession
This makes the file executable.
Once .xsession is created, you need to edit it to do something
useful with your favorite text editor. You can do anything you want
to in this script. However, when the script’s process terminates, X
also terminates.
In practical terms, this means that you often end the script with a
call to exec. Whatever program you exec will replace the script
process with itself, so commands found after the exec line will be
ignored. The program you exec will become the new owner of the
script process, which means that X will terminate when this new
program’s process terminates.
Say you end your .xsession with the line exec fvwm. This means that
the fvwm window manager will be run when X starts. When you quit the
fvwm window manager, your X session will end, and all other clients
will be shut down. You do not have to use a window manager here; you
could exec xterm, in which case typing exit in that particular xterm
would cause the entire X session to end.
If you want to run other clients before you use exec, you will need
to run them in the background. Otherwise .xsession will pause until
each client exits and then continue to the next line. See the
previous section on running jobs in the background (basically you
want to put an ampersand at the end, as in xterm &).
You can take advantage of this behavior, though. If you want to run
commands at the end of your X session, you can have your .xsession
run a window manager or the like and wait for it to finish. That is,
leave off the exec and the &; just enter fvwm by itself. Then put
the commands of your choice after fvwm.
It would probably help to look at a few sample .xsession files. In
all the examples, replace fvwm with the window manager of your
choice.
The simplest .xsession just runs a window manager:
exec fvwm
This will run fvwm, and the X session will end when fvwm exits. If
you do it without the exec, everything will appear to behave the
same way, but behind the scenes .xsession will hang around waiting
for fvwm, and .xsession will exit after fvwm does. Using exec is
slightly better because fvwm replaces .xsession instead of leaving
it waiting. You can use the ps or top command to verify this.
A more useful .xsession runs a few clients before starting the
window manager. For example, you might want some xterms and an
xclock whenever you start X. No problem; just enter xterm & xterm &
xclock & exec fvwm. Two xterms and an xclock start up in the
background, and then the window manager is launched. When you quit
the window manager, you’ll also quit X.
You might try it without the backgrounding just to see what happens.
Enter this command: xterm xclock exec fvwm. xterm will start, and
wait for you to exit it. Then xclock will start; you’ll have to exit
xclock before fvwm will start. The commands are run in sequence,
since the script waits for each one to exit.
You can use sequential execution to your advantage. Perhaps you want
to keep track of when you stop working every day:
xterm &
xclock &
fvwm
date >> ~/logout-time
This will fork off an xterm and an xclock and then run fvwm and wait
for it to finish. When you exit fvwm, it will move on to the last
line, which appends the current date and time to the file
~/logout-time.
Finally, you can have a program other than the window manager
determine when X exits:
xclock &
fvwm &
exec xterm
This script will run xclock and fvwm in the background and then
replace itself with xterm. When you exit the xterm, your X session
will end.
The best way to learn how to use .xsession is to try some of these
things out. Again, be sure you use chmod to make it executable;
failure to do so is a common error.