Appendix A. Ustawianie .xinitrc/.xsession

Podesłane przez Verin.

Miejsce xinit w świecie

Menedżer okien jest po prostu jeszcze jedną aplikacją X11, taką jak netscape, gimp czy xterm. Nowicjusze w X11 uważają, że X11 uruchamia menedżera okien, a ten uruchamia programy. Ale to nie jest prawdą. Jeśli tylko zechcesz, możesz uruchomić wszystkie swoje programy pod X11, zabić menedżera okien i uruchomić innego.

Prawdziwym program, który X11 uruchamia, który z kolei uruchamia inne programy, jest skrypt .xinitrc lub .xsession. Gdy X11 startuje, twój skrypt .xinitrc lub .xsession jest uruchamiany, a gdy ten skrypt kończy swoje działanie, X11 również to robi. Powtórzę to, bo to jest ważne: gdy .xinitrc kończy działanie, wtedy X również kończy działanie., a nie wtedy gdy twój menedżer okien się wyłącza.

Wygląd skryptu

Najpierw musi do ciebie dotrzeć to, że już to wiesz. Gdy wpisujesz polecenie w powłoce, nie możesz robić niczego innego, dopóki to polecenie się wykonuje. Twój skrypt .xinitrc lub .xsession działa tak samo. Po uruchomieniu, startuje po kolei wszystkie wpisane tam programy, a gdy napotka program, który działa bardzo długo (jak większość programów X11) zatrzymuje się dopóki ten program nie zakończy swojego działania.

Powienieś mieć tylko jedno miejsce, w którym skrypt się 'zawiesza'. I zazwyczaj jest to pod koniec skryptu. Więc jeśli masz jakieś programy, które chciałbyś uruchomić pod X11 zanim dojdziesz do miejsca 'zawieszenia', powinieneś uruchomić je w tle. Po prostu dodaj na końcu lini znak &. Więc jeśli chcesz uruchomić xclock, wstaw poniższą linię przed miejscem 'zawieszenia':

    xclock &

Następną rzeczą do wytłumaczenia jest ten exec, który jest polecany do wstawienia do tego skryptu. Szczere mówiąc nie jest to konieczne. Jeśli umieścisz wywołanie menedżera okien w ostatniej lini skryptu, ten zawiesi swoje wykonanie bez użycia exec.

Ale czemu polecają exec? Może chcież umieścić wiele lini startujących różne menedżery okien w twoim skrypcie, ale chcesz by tylko jeden się uruchamiał. Jeśli umieścić wywołanie wybranego menedżera poprzedzone exec przed wywołaniami innych menedżerów. A oto jak działa exec:

"Zastąp mnie tym programem, np. uruchomo go i zabij mnie natychmiast po jego zakończeniu."

Więc jeśli umieścisz exec wmaker przed exec enlightenment, gdy wmaker przerwie działanie, skrypt również to zrobi i nie dojdzie do kolejnej lini.

Widzisz więc czemu jest to niepotrzebne? Możesz po prostu zakomentować linie, które mają nie być wykonywane i będzie to działało tak samo.

Inny sposób

Jako alternatywa, możesz uruchomić menedżer okien na początku, zachować jego identyfikator procesu w zmiennej środowiskowej:

        wmaker & wmpid=$!

To uruchomi menedżera w tle (&) i umieści identyfikator procesu ($!) w zmiennej (wmpid). Następnie, by 'zawiesić' skrypt użyj polecenia wait:

    wait $wmpid

lub zawieszaj na programie, którego zawsze używasz, jak np. gkrellm, przez nie uruchamianie go w tle. Ale pamiętaj, że jak tylko zamkniesz ten program, również twoja sesja X11 się zakończy.

Ja używam metody z wait, ponieważ lubię mieć uruchomiony menedżer okien przed uruchomieniem dockappów i innych programów. Również, zanim cokolwiek innego zrobię, lubię zmieniać ustawienia serwera X11, takie jak dpms, wygaszacz ekranu, jak również dodać kilka ścieżek do czcionek (których nie chcę instalować globalnie). A wtedy, jak już wszystko jest zrobione, czyszczę ścieżkę do czcionek, ponieważ gdy uruchomię menedżer logowania, to nie jest dla niego zbyt dobre ciągłe resetowanie ścieżki do czcionek.

Example A-1. .xinitrc

    # deaktywuj wyłączanie ekranu i włącz funkcje energy star
    xset s off
    xset dpms 600 60 60

    # dodaj moje dodatkowe czcionki do ścieżki
    xset +fp "$X_FONTPATH"
    xset fp rehash

    # wyeksportuj środowisko, w razie potrzeby odpluskwiania
    env > ~/.xenv

    # menedżer okien
    fluxbox & wmpid=$!

    bbrun &
    wmCalClock &
    wmxmms &

    # PUNKT ZAWIESZENIA - zaczekaj na wyjście menedżera okien
    wait $wmpid

    # przywróć ścieżkę do czcionek
    xset fp default