9.4 Customizing Your X Startup

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.

Debian GNU/Linux : Guide to Installation and Usage · 第 126 / 193 题