Приложение A. Настройка .xinitrc/.xsession

Добавлено Verin.

The place of xinit in things

Оконный менеджер это такое же приложение для X11, как и netscape или gimp или xterm. Многие люди, только начинающие знакомиться с X11 думают что X11 запускает оконный менеджер а аконный менеджер запускает остальные программы. Но это не так. Если всё настроено правильно, вы можете запустить все свои программы под X11, убить оконный менеджер и запустить другой оконный менеджер.

The real program that X11 runs, that runs other programs, is your .xinitrc or .xsession script. Когда X11 запищен, ваш скрипт .xinitrc или .xsession запущен, и когда скрипт выполнен, X11 заканчивает работу. Позвольте ещё раз повтроить, это важно: когда .xinitrc выполнен, X заканчивают свою работу. . Но это не значит что это происходит когда ваш оконный менеджер заканчивает работу.

Script layout

Ну, давайте сперва реализуем то, что мы уже знаем. когда вы набираете комманду в shell'е, вы ничего не можете делать пока комманда не закончит свою работу. Тоже самое и для скриптов .xinitrc и .xsession. Когда он нчинает выполнять комманды, которые долго выполняются (как большинство программ для X11), он останавливается пока программа не закончит свою работу.

В идеале, у вас должно быть только одно место где скрипт заканчивает выполнение. Обычно это конец скрипта. Так что если у вас есть программы, которые должны быть запущены под X11, запускайте их в бэкграунде. Для этого в конец строки добавьте символ &. То есть, если вы хотите запустить xclock в дополнение к остальным вещам, добавьте эту строчку перед заверщающей строчкой:

    xclock &

Now, the next thing is the exec thing you see, where lots of sources recommend how to add your window manager to your script. But honestly, its not really necessary, if you put your window manager on the last line of your script, it will hang there just fine without the exec.

So why the exec? Well, lets say you want to put lots of window manager start lines in your script, and you want only one to work. Well, with exec you can put your chosen start-line at the top. Because this is what exec means:

"Replace myself with this program, i.e. start it and temrinate myself immediately when it finishes. "

So if you put an exec wmaker line atop of a exec enlightenment line, when wmaker is done, so is the script, it never gets to the next line.

See what I mean by being unnecessary? You could just put a bunch of commented-out window manager lines, and it would work just the same.

Another way to do things

As an alternative, you could start up your window manager first, and store the process ID in a environment variable:

        wmaker & wmpid=$!

that puts it in the background (&) and puts the process id ($!) in a variable (wmpid). Then, to make your hang point, you can wait:

    wait $wmpid

or you could hang on a program you always want to use, like maybe gkrellm, by just not backgrounding it. But remember that as soon as you terminate it, so will your X11 session.

Now, I use the wait method, because I like picking my window manager before I launch my dockapps and stuff. Also, before doing anything else, I like to change the settings on my X11 server, like the dpms, the screen saver, and even add some directories to my font path (fonts I don't want to install universally). And then after everything is done, I like to clean up my fontpath, mainly because if I ran a display manager, its not good at resetting the font path all the time.

Пример A-1. Пример файла.xinitrc

    # turn off screen blanking and f
    xset dpms 600 60 60

    # add my optional fonts to the font path
    xset +fp "$X_FONTPATH"
    xset fp rehash

    # export the current environment, in case it needs to be debugged
    env > ~/.xenv

    # window manager
    fluxbox & wmpid=$!

    bbrun &
    wmCalClock &
    wmxmms &

    # HANG POINT - wait for window manager to exit
    wait $wmpid

    # restore the x fontpath
    xset fp default