Appendix A. Nastavení .xinitrc/.xsession

Přispěl Verin.

Pár slov o xinit

Správce oken je jen další aplikace pro X11, stejně tak jako netscape nebo gimp nebo xterm. Mnoho lidí neznalých X11 si myslí, že X11 ovládá správce oken a správce ovládá další programy. Ale to není pravda. Ve správné konfiguraci můžete spouštět všechny aplikace přímo pod X11, zavřít správce oken a dalšího správce oken zase spustit.

Jediný skutečný program, který X11 spouští a který spouští další programy je Váš .xinitrc nebo .xsession skript. Když jsou X11 spuštěny, .xinitrc nebo .xsession je spuštěn také a když je tento skript ukončen, X11 jsou ukončeny stejně tak. Dovolte mi to zopakovat, je to důležité: když je .xinitrc ukončen, je to proto, že X končí. Ne proto, že končí Váš okenní manažer.

Uspořádání skriptů

Dobře, nejdříve si připomeňme to, co již víme. Když spustíte program z příkazové řádky, nemůžete dělat nic jiného dokud program není hotov, dokud neskončí. Váš .xinitrc nebo .xsession skript se chová stejně tak. Když je spuštěn a provádí příkazy jeden po druhém a narazí na program, jehož vykonávání zabere dlouhou dobu (většina X11 programů), zastaví se vykonávání skriptu do té doby, dokud spuštěný program neskončí.

Ideálně byste měli mít jen jedno místo, kde skript zůstane 'viset'. A obvykle byste měli chtít, aby to bylo na jeho konci. Takže, pokud máte v úmyslu spouštět programy pod X11 před tím, než skript dosáhne místa, kde zůstane 'viset', musíte je spouštět na pozadí. Jen vložíte & na konec řádky. Takže, řekněme že chcete spustit xclock spolu s dalšími programy, potom vložte tento řádek před konec vašeho skriptu:

    xclock &

Další věc je příkaz exec, jehož použití doporučuje mnoho zdrojů jako spouštěcí mechanizmus okenního manažeru do Vašich skriptů. Toto není bezpodmínečně nutné, protože pokud umístíte název spouštěcího souboru správce oken na poslední řádek skriptu, fungování se bude jevit stejné jako s exec.

Takže proč vůbec exec použít? Řekněme, že chcete vložit více startovacích příkazů různých okenních manažerů do skriptu a zároveň chcete aby se spouštěl pouze jeden správce oken. S příkazem exec můžete startovací příkaz vybraného správce oken umístit jako první nad všechny ostatní startovací příkazy dalších okenních manažerů, neboť příkaz exec znamená toto:

"Nahraď mě samotného tímto programem, tzn. spusť program a když tento program skončí, ukonči mě také. "

Tedy pokud vložíte např. řádek exec wmaker nad exec enlightenment potom, když je wmaker ukončen, je ukončen i skript, který nikdy nepokračuje na další řádek.

Už tedy víte, proč jej pokládám za nepříliš důležitý? Můžete právě tak vložit hromadu zakomentovaných startovacích řádků správců oken a fungovalo by to stejně.

Další možnosti

Alternativně můžete okenní manažer spustit jako první, a uchovat si ID jeho procesu v proměnné prostředí:

        wmaker & wmpid=$!

spouští program na pozadí(&) a uchovává ID ($!) jeho procesu v proměnné (wmpid). K vytvoření čekacího bodu potom použijte wait:

    wait $wmpid

nebo můžete zůstat 'viset' na programu, který užíváte vždy, jako např. gkrellma to pouze tím, že jej nespustíte na pozadí. Ale pamatuje, že jakmile tento program ukončíte, Vaše X11 skončí také.

Já nyní používám způsob s wait, protože si rád vybírám okenní manažer předtím, než spustím dokované a jiné programy. Také předtím, než začnu cokoliv jiného, upravím nastavení X11 serveru jako např. dpms, šetřič obrazovky a dokonce přidám nějaké adresáře do cesty k fontům (fonty, které nechci instalovat globálně pro celý systém). A potom, když je všechno hotovo, zase přidané cesty k fontům zruším, hlavně proto, že pokud běžel přihlašovací manažer, tento na resetování fontů není vhodný.

Example A-1. .xinitrc

    # vypnout mazání obrazovky a zapnout režim energy star
    xset s off
    xset dpms 600 60 60

    # přidat cestu k mým doplňkovým fontům
    xset +fp "$X_FONTPATH"
    xset fp rehash

    # uložit výpis nastavení prostředí pro případ potřeby ladění
    env > ~/.xenv

    # správce oken
    fluxbox & wmpid=$!

    bbrun &
    wmCalClock &
    wmxmms &

    # ČEKACÍ BOD - čekat dokud neskončí správce oken
    wait $wmpid

    # obnovit původní cestu k fontům
    xset fp default