X Window Resources
Autor:
Dr. Burkhard Kirste
- Einleitung
- Automatischer Start von Applikationen
- Setzen von Ressourcen - Einführung
- Application Defaults
- Setzen von Ressourcen in der Kommandozeile
- .Xdefaults
- xrdb und .Xresources
- Präzedenz für Ressourcen
- Literatur
In diesem Text werden Hinweise zur Konfiguration des X Window Systems
gegeben, die sich speziell auf SGI Indigo Workstations im
CHEMnet beziehen.
Zur Konfiguration des X Window Systems gehören folgende Aspekte:
die Wahl des Window Managers (mwm, 4Dwm, twm, ...),
die beim Login-Prozeß automatisch gestarteten Applikationen
und die Beeinflussung der Eigenschaften der X Applikationen über
die Ressourcen (engl. resources).
Normalerweise verwendet man im X Window System als Start-Skript
eine Datei namens
.xsession
im HOME-Verzeichnis. Auf den SGI Indigo Workstations empfiehlt es sich
allerdings, nicht mit .xsession zu arbeiten, da in diesem Fall
die systemweiten Initialisierungen
/usr/lib/X11/xdm/Xsession bzw.
/usr/lib/X11/xdm/Xsession-remote
ignoriert werden. Die entscheidenden Einstellungen müßten
folglich in .xsession vorgenommen werden: Setzen wichtiger
Umgebungsvariablen, Start eines Terminal-Fensters und ggf. weiterer
Anwendungen (toolchest), Start des Window-Managers usw.
Empfehlenswert ist statt dessen das Arbeiten mit
.sgisession
da die hierin aufgeführten Anweisungen zusätzlich
zu den systemweiten Einstellungen vorgenommen werden.
Ein einfaches Beispiel für ein derartiges Skript:
#!/bin/sh
/usr/bin/X11/xclock -digital -update 1 &
Unter Ressourcen (resources) versteht man Variablen, die die Eigenschaften
und das Verhalten von X-Applikationen (X clients) beeinflussen,
z.B. Farben, Geometrie, Fonts oder Titelzeile.
Es gibt im X Window System vielfältige Möglichkeiten,
die Ressourcen von X-Applikationen zu beeinflussen:
- durch systemweite "application defaults", die sich (hier)
standardmäßig im Verzeichnis
/usr/lib/X11/app-defaults befinden
- durch benutzerspezifische, individuelle "application defaults" für
die betreffenden Anwendungen
- über Kommandozeilen-Optionen
- mit Hilfe der Datei $HOME/.Xdefaults;
es ist auch möglich, Host-spezifische Dateien anzulegen:
$HOME/.Xdefaults-hostname
- alternativ mit Hilfe der Datei $HOME/.Xresources
(unter automatischer Verwendung von xrdb)
- durch expliziten Aufruf von xrdb unter Verwendung
einer Ressourcen-Datei beliebigen Namens
- in speziellen Fällen durch Umgebungsvariable
Zu jeder X-Applikation (client) kann eine Ressourcen-Datei
(application default) gehören. Ihr Name ist gleich dem
Klassennamen der Applikation, der mit ein oder zwei
Großbuchstaben beginnt (z.B. XTerm für xterm,
XClock für xclock oder Mwm für
mwm). Derartige Dateien findet man in einem systemweiten Verzeichnis,
hier /usr/lib/X11/app-defaults.
Die Einträge in einer Ressourcen-Datei haben folgende Syntax:
ressource:wert
ressource: wert ("white space" hier optional)
name*variable:wert
Beispiel:
Xwebster.panel.display_scroller.display.alignment: Left
Xwebster*alignment: Left
In der ersten Variante wurde der vollständige Bezeichner der
Ressource verwandt ("tight binding"). Die meisten Felder sind allerdings
nicht wesentlich, man kann sie durch ein Sternchen (*) ersetzen
und gelangt damit zur zweiten Variante, in der nur noch der
Name der Applikation und die Variable stehen ("loose binding").
Es ist in der Regel empfehlenswert, die zweite Form zu wählen.
Zeilen können auskommentiert werden, und zwar durch
Voranstellen eines Ausrufezeichens (!); das Doppelkreuz
(#, hash mark) darf hierfür nicht verwendet werden.
Wie erfährt man Namen, Variablen, mögliche Werte?
Derartige Informationen sollte man in der "man page" für die
betreffende Applikation finden. Es lohnt sich auch, die
"application default" im systemweiten Verzeichnis zu studieren.
Den Namen, genauer gesagt den Instanznamen (das ist der
aktuelle Name, s.u.) und den Klassennamen einer Applikation,
die gerade ein aktives Fenster hat, kann man mittels xprop
finden, z.B.:
xprop -name xterm
beim Eintrag WM_CLASS(STRING). Man erhält dabei noch weitere
nützliche Informationen über die Applikation.
Instanznamen und Klassennamen
Wie bereits erwähnt, beginnt der Klassenname einer Applikation
mit einem oder zwei Großbuchstaben. Er wird bei der Compilation
festgelegt und kann durch den Anwender nicht verändert werden.
Der aktuelle Name, der "Instanzname", kann hingegen beim Starten
einer Applikation beliebig gewählt werden, und zwar mit Hilfe
der Option -name. Falls diese Option nicht gesetzt wird,
ist der Instanzname gleich dem Programmnamen. Beispiel (für xterm):
Aufruf: xterm
Programmname: xterm
Klassenname: XTerm
Instanzname: xterm
Aufruf: xterm -name myterm
Programmname: xterm
Klassenname: XTerm
Instanzname: myterm
Ressourcen, die mit dem Klassennamen spezifiziert sind, gelten generell
für alle Instanznamen. Gibt es allerdings eine Ressource für
den betreffenden Instanznamen, so erhält diese Priorität.
Beispiel für xterm mit folgenden Ressourcen:
XTerm*background: cadetblue
xterm*foreground: red
myterm*background: gold
Aufruf und Ergebnis:
xterm (rot auf blauem Hintergrund)
xterm -name myterm (schwarz auf goldfarbenem Hintergrund)
Suchpfade für Application Defaults
Ressourcen (application defaults) werden im systemweiten Verzeichnis
gesucht, hier /usr/lib/X11/app-defaults/*. Falls die Umgebungsvariablen
XUSERFILESEARCHPATH oder XAPPLRESDIR gesetzt sind, wird zunächst
in den betreffenden Verzeichnissen nachgesehen. Noch höhere
Priorität haben Angaben, die mit der Umgebungsvariablen
XENVIRONMENT gemacht werden; genaueres zu den Prioritäten
findet man hier.
Die zur Verfügung stehenden Optionen kann man in
applikationsspezifische Optionen und in (generelle) Toolkit-Optionen
aufteilen. Vielfach gibt es spezielle Optionen, um
besonders wichtige Ressourcen zu setzen, z.B.:
xterm -bg yellow &
setzt die Hintergrundfarbe auf gelb. Man kann allerdings jede beliebige
Ressource auf der Kommandozeile setzen, und zwar mit der Option
-xrm. Für das obige Beispiel hätte man damit die
alternative Formulierung:
xterm -xrm "XTerm*background:yellow" &
Es ist hier notwendig, das Argument mit Anführungszeichen zu
umgeben, um eine Interpretation des Sternchens (*) durch die
Shell zu vermeiden. Es versteht sich, daß das Verfahren mittels
-xrm hauptsächlich für Testzwecke geeignet ist.
Wichtige Toolkit-Optionen
Generell stehen für alle X-Applikationen folgende Optionen
zur Verfügung, siehe
man X:
- -display display
- Angabe von X-Server und Bildschirm (Display)
- Bsp.: xterm -display bragg:0 &
- -bg color
- Spezifikation der Hintergrund-Farbe
- -fg color
- Spezifikation der Vordergrund-Farbe
- -fn font
- Spezifikation des Text-Fonts
- -iconic
- Startet die Applikation so, daß sie als Icon erscheint
- -name name
- Definiert einen "Instanznamen", der individuelle Ressourcen
ermöglicht
- -title titel
- Definiert den Titel, der als Fensterüberschrift erscheint
- -xrm resourcestring
- Erlaubt das Setzen einer beliebigen Ressource (s.o).
Die Datei .Xdefaults im HOME-Verzeichnis kann dazu dienen,
die Ressourcen verschiedener X-Applikationen zu setzen. Sie wird
allerdings nur beachtet, wenn nicht mit dem Resource Manager (xrdb)
gearbeitet wird. Die Syntax der Einträge ist im Abschnitt
Application Defaults beschrieben.
Beispiel für eine .Xdefaults-Datei:
4Dwm*useIconBox: true
4Dwm*iconBoxName: iconbox
4Dwm*iconBoxGeometry: 2x7-0+120
4Dwm*iconbox*clientDecoration: border
Mwm*useIconBox: true
Mwm*iconBoxName: iconbox
Mwm*iconBoxGeometry: 2x7-0+120
Mwm*icon*topShadowColor: #E0E0E0
Mwm*icon*background: #C0C0C0
Mwm*iconbox*clientDecoration: border
XWsh*geometry: 80x40+15+85
XWsh*foreground: #000000
XWsh*background: #909090
XWsh*boldColor: firebrick3
XWsh*font: -sgi-screen-bold-r-normal--14-*-*-*-*-*-*-*
XWsh*cursorColorBackground: firebrick1
XWsh*cursorColorForeground: whitesmoke
XWsh*autoFork: true
winterm*geometry: 80x60+15+85
winterm*foreground: #000000
winterm*background: #909090
winterm*boldColor: firebrick3
winterm*font: -sgi-screen-bold-r-normal--14-*-*-*-*-*-*-*
winterm*cursorColorBackground: firebrick1
winterm*cursorColorForeground: whitesmoke
winterm*autoFork: true
console*geometry: 80x60+15+85
console*font: -sgi-screen-bold-r-normal--14-*-*-*-*-*-*-*
xclock*background: sgilightblue
xclock*geometry: -0+0
xclock*font: -bitstream-charter-bold-r-normal--17-120-100-100\
-p-107-iso8859-1
XTerm*vt100.scrollBar: True
Man kann sich dafür entscheiden, mit dem Resource Manager
xrdb zu arbeiten. Eine eventuell vorhandene Datei
.Xdefaults wird dann ignoriert. In diesem
Falle sollte man im HOME-Verzeichnis eine Datei namens
.Xresources
anlegen. Falls eine solche Datei vorhanden ist, wird sie beim Starten
des X Window Systems automatisch mittels xrdb geladen.
Die Datei .Xresources kann die gleiche Syntax wie
.Xdefaults haben, sie darf aber darüber
hinaus Macros enthalten, die vom Präprozessor cpp
bearbeitet werden.
Ändert man während einer Sitzung die Datei .Xresources,
so hat das zunächst keine Auswirkungen auf neu gestartete
Applikationen. Man muß zu diesem Zweck xrdb
aufrufen, wobei zwei Varianten möglich sind:
- xrdb -load filename
- Alle alten Ressourcen werden gelöscht, dafür werden die
neuen Ressourcen geladen. Das ist das default-Verhalten.
- xrdb -merge filename
- Die alten Ressourcen bleiben prinzipiell erhalten, neue werden
hinzugeladen. Falls dieselben Ressourcen betroffen sind,
genießen allerdings die neuen Werte Vorrang.
- xrdb -query
- Anzeige aller gegenwärtig geladenen Ressourcen
Das Arbeiten mit xrdb (.Xresources) bietet gegenüber
.Xdefaults zwei Vorteile. Erstens erfolgt eine Bearbeitung
der Ressourcen-Datei (.Xresources) durch den Präprozessor,
zweitens ergibt sich eine einheitliche Behandlung aller Applikationen,
auch solcher, die von einer anderen Maschine gestartet werden.
Die Wahl der Ressourcen geschieht in der folgenden Reihenfolge,
wobei die Einträge an der Spitze die höchste
Priorität haben (vgl.
About X - Frequently Asked Questions):
- Hartcodierte Werte für Ressourcen.
- Kommandozeilen-Argumente.
- Durch $XENVIRONMENT gewählte Ressourcen.
- Über xrdb in die Resource Data Base geladene Werte.
- Ressourcen, die in einem der folgenden Verzeichnisse stehen:
- $XUSERFILESEARCHPATH - falls gesetzt, sonst
- $XAPPLRESDIR - falls gesetzt, sonst
- $HOME (oder damit verknüpft).
- Ressourcen in $HOME/.Xdefaults, falls nicht mit xrdb
gearbeitet wird (RESOURCE_MANAGER).
- Werte der "application defaults" im systemweiten Verzeichnis, hier
/usr/lib/X11/app-defaults/*.
- Werte, die durch den "fall back"-Mechanismus der Applikation
gesetzt werden.
Linda Mui and Eric Pearce, "X Window System Administrator's Guide",
O'Reilly & Associates, Inc., Sebastopol CA, 1992.
Burkhard Kirste, 1994/02/17