xinitrc

Aus wiki.archlinux.de

Der richtige Titel für diesen Artikel lautet .xinitrc. Dies ist aus technischen Gründen derzeit jedoch nicht möglich.


Die Datei .xinitrc ist eine Konfigurationsdatei für den X-Server. In dieser Datei können Programme oder Scripte eingetragen werden, die bei einem Start von X mittels startx automatisch ausgeführt werden. Die Datei befindet sich im home-Verzeichnis des jeweiligen Benutzers. Sollte die Datei nicht existieren, wird stattdessen die Datei /etc/X11/xinit/xinitrc verwendet.

Nach dem ersten Start von X wird diese Datei nicht angelegt, und man sieht das, was durch die globale Datei definiert wurde (drei xterm-Fenster und xclock) unter dem Fenstermanager twm. Sobald man in seinem Benutzerverzeichnis eine Datei .xinitrc anlegt, wird die globale Datei ignoriert, und man sieht nur noch das, was in der lokalen Datei definiert wurde.

Inhalte

In der Datei können nicht nur Programme definiert werden, die automatisch beim Starten von X geladen werden sollen, sondern es können auch Scripte geschrieben werden, da die Datei durch eine Shell (standardmäßig die bash) geparst wird.

In der globalen Datei stehen – neben einigen Abfragen im oberen Teil – folgende Programmaufrufe:

twm &
xclock -geometry 50x50-1+1 &
xterm -geometry 80x50+494+51 &
xterm -geometry 80x20+494-0 &
exec xterm -geometry 80x66+0+0 -name login

Zuerst wird also der Fenstermanager twm gestartet, danach wird xclock gestartet, gefolgt von drei mal xterm. Wie zu sehen ist, werden twm, xclock und die ersten beiden xterm-Fenster als Hintergrundprozesse gestartet. Wenn dies nicht gemacht würde, würde lediglich twm geladen. Erst wenn man twm beenden würde, würden die xterm-Fenster geladen werden.

Da das letzte xterm-Fenster nicht als Hintergrundprozess gestartet wird, stoppt hier der Parsing-Prozess. So lange dieses xterm-Fenster noch geöffnet ist, bleibt man in X eingeloggt. Wenn man dieses xterm-Fenster schließt, wird das Parsen der .xinitrc beendet, und dadurch beendet sich auch X, und man befindet sich wieder auf der Shell, aus der heraus man X gestartet hat.

Verwendung

In angepassten Konfigurationen ist es gemeinhin so, dass statt eines xterm-Fensters oder eines anderen Programms an letzter Stelle in der Datei der Fenstermanager definiert – und nicht als Hintergrundprogramm gestartet – wird. Wenn der Fenstermanager dann beendet wird, verlässt man damit auch X. Da man ohne Fenstermanager in X nicht arbeiten kann, ist dieses Verhalten gewollt.

Neben dem Start des Fenstermanagers steht heutzutage normaler Weise nichts weiter in der der .xinitrc, da alle weiteren Startprogramme nicht in Abhängigkeit zu X gestartet werden brauchen, sondern vom Fenstermanager abhängen. Zumal viele Fenstermanager oder Desktopumgebungen ihre eigenen Autostart-Mechanismen mitbringen.

Eine .xinitrc könnte daher zum Beispiel so aussehen:

exec openbox-session

Hier wird mittels exec der Openbox-Sessionmanager gestartet. openbox-session ist der Sessionmanager des Fenstermanagers Openbox.

Des Weiteren empfehlen die Entwickler einiger Programme explizit, diese Programme vor dem Fenstermanager zu starten. In solchen Fällen sollte man diese Programme dann auch vor dem Fenstermanager starten.

display -window root ~/.wallpapers/meinwallpaper.png
exec openbox-session

"exec" sollte nur vor dem letzten Befehl stehen, weil dadurch die Shell, die die ".xinitrc" ausführt, durch das angegebene Programm ersetzt wird. Befehle nach dem "exec" würden also ignoriert.

Dies setzt mittels display zuerst das Wallpaper und startet dann Openbox. display bedarf in diesem Aufruf keines Verschiebens in den Hintergrund, da es lediglich kurz startet, und das Wallpaper setzt, und sich dann beendet.

Möchte man nicht, dass nach Beenden des Fenstermanagers auch auch X beendet wird, kann man dies mittels eines simplen Scripts erreichen, das man in die .xinitrc schreibt.

while true; do
  openbox-session
done

Beim Start von X wird die Schleife betreten, und der Fenstermanager gestartet. So lange der Fenstermanager nun läuft, wird die Schleife nicht weiter ausgeführt. Wenn man den Fenstermanager beendet, kommt es zur weiteren Ausführung der Schleife: Der Fenstermanager wird sofort erneut gestartet.

Da die Bedingung true immer wahr ist, kann man den Fenstermanager so oft beenden, wie man möchte, er wird jedes mal umgehend neu gestartet. Wenn man X nun verlassen möchte, muss man den X-Prozess beenden.

Hinweise

Da die .xinitrc bei jedem X-Start geparst wird, ist es nicht ratsam, einen Beende-Befehl wie exit in die Datei zu schreiben. Erstens, weil X dann sofort nach dem Starten wieder beendet wird, und zweitens ist es auch unnötig, einen Beende-Befehl zu verwenden, da X sowieso beendet wird, wenn die Datei zuende-geparst wurde.

Wenn der Fenstermanager nicht starten sollte, kann es daran liegen, dass ein anderes Programm, das vor dem Fenstermanager gestartet wird, nicht mittels abschließendem Kaufmanns-Und (&) in den Hintergrund versetzt wurde, oder der Aufruf des Fenstermanagers nicht richtig ist.

Sollte X nur ganz kurz sichtbar sein, und sich danach wieder beenden, könnte es daran liegen, dass die Datei immer zuende-geparst wird, da der letzte Programmaufruf ebenfalls in den Hintergrund gesetzt wird. Es kann ebenfalls sein, dass irgendwo in der Datei ein Beende-Befehl definiert wurde.

In beiden Fällen muss man die Datei in der Shell bearbeiten, und entweder nötige Kaufmanns-Unds an die Programmaufrufe anfügen, den Beende-Befehl abfangen oder entfernen, oder das letzte zu startende Programm nicht als Hintergrundprozess definieren.