EinleitungMöchten Sie als neuer System-Administrator oder als Stand-Alone-User gerne größere Flexibilität bei der Einrichtung von angepassten X-Sessions für sich selbst oder Ihre User erwerben? Dieser Artikel verrät ihnen alles nötige dazu.
Er geht davon aus, daß das X Window System bereits installiert ist und mit "startx" gestartet werden kann. Die Konfiguration eines Mehrbenutzersystems mit xdm wird das Thema eines weiteren Artikels sein. Die wichtigsten Dateien werden im Folgenden beschrieben:
.xinitrc
.xinitrc ist ein Shell-Skript, das vom startx-Befehl an xinit übergeben wird. Dieses Skript setzt im Allgemeinen einige globale Variablen (Screensaver-Einstellungen, Tastatur-Definitionen, etc.). Der gesamte Startvorgang wird von den Einstellungen beeinflußt, die in diesem Skript vorgenommen werden.
.Xclients
Diese "Punkt"-Datei liegt im Home-Verzeichnis des Users und startet benutzerspezifische Programme (im Unterschied zur globalen .xinitrc).
.Xresources
Diese Datei wird verwendet, um systemweite Voreinstellungen bestimmter 'Resourcen' (Farben, Schriften, generelles Look and Feel) per Benutzer anpassen oder überschreiben zu können. Damit lassen sich einige spektakuläre graphische Effekte erreichen.
Nun, da wir gesehen haben, welche Dateien für die X-Konfiguration eine Rolle spielen, springen wir einfach mitten hinein ...
.xinitrcWenn der startx-Befehl gegeben wird, wertet xinit (der verantwortliche Befehl für den X-Startprozess) entweder die globale /etc/X11/xinit/xinitrc oder, falls vorhanden, die lokale ~/.xinitrc aus. Falls keine der beiden Dateien vorhanden ist, wird xinit die Konfiguration übernehmen (keine gute Wahl). Die Datei xinitrc (lokale hat Vorrang vor der globalen) ist ein Shellskript, das verschiedene X-Clients und zuletzt mittels des Befehls "exec" den gewünschten Window Manager startet.
Die einfachste xinitrc könnte so oder so ähnlich aussehen:
# /etc/X11/xinit/xinitrc
#!/bin/sh
exec /usr/X11R6/bin/fvwm2 Diese Datei startet nur den F(eeble) Virtual Window Manager 2 und keine anderen Clients. Nicht sehr nützlich, aber sinnvoll, wenn Sie in aller Eile ein Setup für einen neuen Window Manager zusammen"hacken" wollen. Wenn wir einige Definitionen einsetzen und einige zusätzliche Clients eintragen, die wir bei jedem Start von X zur Verfügung haben wollen, wird die Sache schon interessanter...
#/etc/X11/xinit/xinitrc
#!/bin/sh
# Beseitigung des störenden Backspace Problems
xmodmap -e "keycode 22=BackSpace"
# Hintergrund
xsetroot -solid LightSlateGrey
# Screensaver nach 5 Minuten
xset s 300
# X-Clients, die immer gestartet werden sollen
xterm -g 80x20+150+8 & # startet ein xterm-Fenster
xterm -g 80x20+150+325 & # startet ein 2.xterm darunter
xload -g +4+0 & # startet ein cpu load meter
xclock -g +815+0 -digital & # startet eine Digitaluhr
# Start Window Manager
exec fvwm2
Screenshot einer X-Session mit dieser Konfiguration
Nun haben wir eine Datei, die das lästige Backspace Problem beseitigt (meistens), unser NumLock setzt, den schlimmen Moiré-Hintergrund versteckt und ein paar Programme bei jedem Start von X aufruft.
Zur Erinnerung: Wenn sie existiert, wird immer die lokale .xinitrc im Home-Verzeichnis des Users benutzt. Dabei werden die Systemeinstellungen ignoriert. Beachten Sie bitte auch die -g Option in den meisten Befehlszeilen. Das ist die für viele X-Programme verfügbare Geometry-Option. Sie ermöglicht die Angabe von Größe und Position des Programmfensters. Dazu wird folgende Syntax verwendet:
Breite x Höhe + x-Position + y-Position
Hier sollte man beachten, daß xterm (und die meisten Terminalprogramme) die Beite und Höhe als Zeichen- und Zeilenanzahl versteht, während die anderen Programme für diese Werte Pixel einsetzen. Wenn Sie dies nicht beachten, können sie ein paar überraschend kleine Fenster bekommen! Schließlich sollten Sie auch das "&" am Ende aller Programmaufrufe (außer dem Window Manager) beachten. Dieses Zeichen bewirkt, daß das jeweilige Programm im Hintergrund läuft. Anderenfalls könnten Sie das nächste Programm erst starten, wenn das vorherige beendet ist - und das macht keinen Sinn. Also wird NUR der Window Manager im Vordergrund gestartet. Wenn Sie X verlassen, beendet er dadurch alle Programme, die durch xinit gestartet wurden.
Jetzt haben wir ein recht funktionales Skript, das man global verwenden oder auch in das Benutzerverzeichnis ablegen kann. Dort kann es weiter für bestimmte User angepasst werden (z.B., ein spezielles Skript für jede Abteilung, sodaß eine technische Abteilung eine andere X-Umgebung vorfindet als die Buchhaltung). Während es dabei interessante Aspekte gibt, haben wir hier viele Möglichkeiten ausgelassen. Da xinitrc ein Shellskript ist, kann man alle normalen Befehle einbinden und sie abarbeiten lassen.
Lassen Sie uns nun einen Blick auf ein fertiges Beispiel werfen, das die Befehle xmodmap und xrdb benutzt um die User-spezifischen Einstellungen mit der systemweiten xinitrc zu verbinden. Das erspart uns die Arbeit, eine spezielle .xinitrc in jedem Benutzerverzeichnis anzulegen (Die Benutzung von Xclients und Xresources wird weiter unten deutlich.
#/etc/X11/xinit/xinitrc
#!/bin/sh
# Pfad-Definition für globale and lokale Ressourcen
userclients=$HOME/.Xclients
userresources=$HOME/.Xresources
usermodmap=$HOME/.Xmodmap
sysresources=/usr/X11R6/lib/X11/xinit/.Xresources
sysmodmap=/usr/X11R6/lib/X11/xinit/.Xmodmap
# merge system and user Xdefaults and keyboard maps
if [ -f $sysresources ]; then xrdb -merge $sysresources; fi
if [ -f $sysmodmap ]; then xmodmap $sysmodmap; fi
if [ -f $userresources ]; then xrdb -merge $userresources; fi
if [ -f $usermodmap ]; then xmodmap $usermodmap; fi
# fix that annoying backspace problem
xmodmap -e "keycode 22=BackSpace"
# set background
xsetroot -solid LightSlateGrey
# screen saver after five minutes
xset s 300
# check for ~/.Xclients and execute else execute system
# default clients ( local and global are NOT merged)
if [ -f $userclients ]; then
exec $userclients
else
# start some default clients
xterm -g 80x20+150+8 &
xterm -g 80x20+150+325 &
xload -g +4+0 &
xclock -g +815+0 -digital &
# start window manager
fvwm2
fi
Screenshot einer X-Session mit dieser Konfiguration
Hier haben wir zuerst alle systemweiten Tastatur- und Programmvorgaben geladen, die in .Xmodmap und .Xresources festgelegt werden. Danach folgen die userspezifischen Einstellungen aus dem jeweiligen Home-Verzeichnis. Als Nächstes fügen wir die zusätzlich gewünschten Einstellungen hinzu, auch wenn sie nicht in den systemweiten oder speziellen Vorgaben existieren (z.B. für die Backspacetaste oder Numlock). Nun prüfen wir, ob der User in seinem Home-Verzeichnis Xclients definiert hat. Falls ja, wird es geladen, anderenfalls starten wir einige systemweite Einstellungen. Beachten Sie, daß diese zwei Zeilen im Unterschied zu den Vorigen nicht verbunden werden. Wenn der User Xclients nicht definiert hat, wird sein Bildschirm so aussehen wie unser erster Screenshot im Gegensatz zu dem zuletzt gezeigten Screen; so haben wir die Möglichkeit, mit einer xinitrc sowohl ein systemweites Look & Feel als auch eine weitgehend angepasste Umgebung zu konfigurieren. Schließlich prüfen wir noch, ob der/die gewünschte(n) Window Manager vorhanden ist/sind. Falls nicht, wird der "gute alte" fvwm2 oder, falls auch der nicht existiert, der twm geladen. Jetzt haben wir ein Setup, in dem wir, ohne jemals wieder unser Skript anzufassen, weitestgehende Anpassungen für unsere User nur durch das Benutzen von entweder systemweiten oder individuellen Skripte durchführen können. Dazu müssen nur noch die systemweiten Dateien angepasst werden.
Lassen Sie uns einen Blick auf die im obigen Beispiel erwähnten Dateien werfen...
.XclientsDie Datei ~/.Xclients enthält User-spezifische Clients, die beim Start einer X-Session eingelesen und ausgeführt werden sollen. Die Syntax entspricht vergleichbaren Befehlen in der xinitrc. Dies ist die ~/.Xclients-Datei, die im oben gezeigten Beispiel aufgerufen wird:
xv -rmode -noresetroot -quit /usr/local/backgrounds/slate.xpm &
kfm &
kcontrol -init &
kbgndwm &
krootwm &
kpanel &
kvt &
kwm Wie Sie an dem vorhergehenden Screenshot sehen, kann man .Xclients dazu einsetzen, mit einem zentralen xinitrc angepasste Desktop-Umgebungen zu schaffen. In der oben gezeigten .xinitrc werden keine Clients gestartet, wenn eine ~/.Xclients vorhanden ist. Ich benutze dieses Setup so,
daß jeder User seinen bevorzugten Window Manager über .Xclients starten kann. Falls system-spezifische Clients generell geladen werden sollen, muß das vor dem Aufruf einer ~/.Xclients geschehen (wenn .Xclients einen Aufruf eines Window Mangers enthält). Falls Sie an meiner Desktop-Konfiguration aus dem letzten Beispiel interessiert sind, so sehen Sie sich die Home-Page von KDE an. Die dritte Beta-Version ist gerade herausgekommen und enthält eine Menge schöner Tools zur Konfiguration der graphischen Oberfläche.
.XresourcesRessourcen in X legen Programmeinstellungen entweder lokal (~/.Xresources) oder global (/usr/X11R6/lib/X11/xinit/.Xresources) fest. X-Programme rufen Widgets auf, welche spezielle Bibliotheken zur Programmierung der X-Window-Oberfläche sind. Es sind graphische Kontrollelemente; es gibt Widgets, die Textfenster, Scrollbars, Fensterhintergründe etc. implementieren. Die graphische Oberfläche eines X-Programms besteht aus Widgets und ist daher weitreichend konfigurierbar.
Die graphische Oberfläche eines X-Programms ist gewöhnlich hierarchisch aufgebaut. Z.B. können innerhalb eines Menü-Widgets mehrere Widgets für die einzelnen Menüeinträge enthalten sein. Um Änderungen an einem bestimmten Widget zuordnen zu können muß die Position (der Pfadname) der entsprechenden Komponente innerhalb der Hierarchie angegeben werden. Als Beispiel sehen Sie einen Teil meiner ~/.Xdefaults, der die Einstellungen meiner Terminalfenster festlegt:.
XTerm*Font: -misc-fixed-bold-r-normal-15-140-75-75-c-90-iso8859-1
XTerm*Background: black
XTerm*Foreground: cyan
XTerm*scrollBar: true
XTerm*saveLines: 500
Xterm*VT100.geometry: 80x24 Wildcards sind in dieser Datei erlaubt, daher definiert
*Foreground: cyan
*Background: black
ein Standard Look & Feel für alle Programme, die ansonsten keine definierten Xresources-Einstellungen haben. Wenn Sie wie ich mehr Flexibilität (als durch die Wildcards erlaubt) wünschen, sich aber keine Widgets-Hierarchien merken können, sehen Sie sich editres an! editres ist ein GUI basiertes Konfigurationstool, das es Ihnen erlaubt, bis ins Kleinste konfigurierte Einstellungen zu erstellen, ohne eine .Xdefault-Datei schreiben zu müssen. Hier sehen Sie einen
Screenshot von editres in Aktion !
Nun sollten Sie langsam erkannt haben, daß Xdefaults einige aufregende Möglichkeiten bietet, sowohl ein allgemeines Look & Feel zu erstellen als auch einzelne Programme sehr komplex und detailliert zu konfigurieren. Sehen Sie sich an, was Xdefaults aus diesem einfachen xcalc machen kann. Auf der X-Tips-Seite von Isolation befindet sich ein Step-by-Step-Tutorial, mit dem man alle Fähigkeiten von editres ausschöpfen kann.
Nun, das wär´s für diesen Monat. Ich hoffe, Sie wissen nun, daß X so standardmäßig oder so speziell aussehen kann, wie Sie wollen, ohne daß Sie stundenlang Skripte für jeden neuen User schreiben müssen. In der nächsten Ausgabe werden wir (falls der Chefredakteur erlaubt) uns anschauen, wie man mehrere X-Logons auf der gleichen Workstation mit Hilfe des X-Display-Managers bekommt. Wenn Sie Fragen oder Kommentare haben, . Bis nächstes Mal....
|