Contributo di Verin.
Un window manager non è solo che un'altra applicazione per X11, come netscape o gimp o xterm. Molte persone nuove con X11 possono pensare che X esegue il window manager e quest'ultimo esegue a sua volta i programmi. Ma questo non è vero. Se giustamente configurato, puoi lanciare tutte le tue applicazioni sotto X11, uccidere il window manager ed eseguirne un'altro.
Il vero programma che X11 esegue, il quale a sua volta esegue poi gli altri programmi, è il tuo script .xinitrc o .xsession. Quando X11 è avviato, lo script .xinitrc o .xsession viene eseguito, e quando è completato, X11 termina. Lasciatemi ripeterlo, che è importante: quando .xinitrc è finito, è il momento in cui termina X. Non quando uscite dal vostro window manager.
Bene, prima realizza qualcosa che già conosci. Quando digiti un comando in una shell, non puoi fare nient'altro finchè quel comando non è terminato, quando esce. Il tuo script .xinitrc o .xsession è la stesa cosa. Quando viene lanciato, esegue i programmi che contiene e se incontra un programma che impiega un lungo tempo per essere eseguito (come la maggior parte dei programmi di X11), si ferma lì fino a che questo programma non termina.
Idealmente, dovresti avere solo un posto dove lo script si pianta. E normalmente è alla fine. Così, se vuoi eseguire un qualunqe programma sotto X11 prima di arrivare al punto dove si ferma, dovresti eseguirlo in background. Metti un & alla fine della linea. Così, diciamo che vuoi eseguire xclock in aggiunta ad altre cose, metti questa linea prima del tuo punto di 'hangs':
xclock &
Ora, la prossima cosa è il comando exec, che molte fonti raccomandano di aggiungere per lanciare il tuo window managewr nello script. Ma onestamente, non è realmente necessario se metti il comando per lanciare il tuo window manager sull'ultima riga dello script, il tutto si fermerà giustamente qui anche senza il comando exec.
Perchè il comando exec? Ammettiamo che tu voglia mettere molti comandi per far partire differenti window manager, e vuoi però farne partire realmente uno solo. Bene, col comando exec puoi mettere la tua linea di lancio all'inizio. Perchè il comando exec significa:
"Rimpiazzami con questo programma, per esempio lancialo e terminami immediatamente quando finisce."
Cosi se metti una linea col comando exec wmaker all'inizio della linea exec enlightenment, quando wmaker è terminato, lo è anche lo script, che non eseguirà mai la linea successiva.
Ti sembra che sia non necessario?Puoi anche mettere diverse linee commentate con differenti window manager e funzionerà nello stesso modo.
Come alternativa, puoi far partire il tuo window manager prima, e memorizzare il process ID in una variabile d'ambiente:
wmaker & wmpid=$!
questo lo pone in background (&) e mette il process ID ($!) nella variabile (wmpid). Quindi, per avere il punto di 'hang', puoi usare il comando wait:
wait $wmpid
oppure puoi fermarti su un programma che vuoi sempre usare, come forse le gkrellm, non mettendole in background. Ma ricorda che terminando questo programma, termineà anche la sessione di X11.
Ora, io uso il metodo col wait, perchè mi piace lanciare il mio window manager prima delle dockapps e varie. Inoltre, prima di fare ogni altra cosa, mi piace modificare i parametri del server X11, come il dpms, il salvaschermo ed aggiungere alcune directory al percorso dei miei fonts (perchè sono fonts che non voglio installare per tutto il sistema). E dopo che tutto è stato fatto, mi piace ripulire il percorso dei fonts (font path), principalmente perchè se lanciavo un display manager, non è una cosa buona resettare il font path tutte le volte.
Example A-1. .xinitrc
# disattiva lo screen blanking e attiva le opzioni energy star
xset s off
xset dpms 600 60 60
# aggiunge i miei fonts supplementari ai fonts di sistema
xset +fp "$X_FONTPATH"
xset fp rehash
# esporta l'ambiente corrente, in caso necessiti di essere debuggato
env > ~/.xenv
# window manager
fluxbox & wmpid=$!
bbrun &
wmCalClock &
wmxmms &
# HANG POINT - aspetta il window manager per uscire
wait $wmpid
# resetta il font path di X
xset fp default