X Window Resources

Autor: Dr. Burkhard Kirste

  1. Einleitung
  2. Automatischer Start von Applikationen
  3. Setzen von Ressourcen - Einführung
  4. Application Defaults
  5. Setzen von Ressourcen in der Kommandozeile
  6. .Xdefaults
  7. xrdb und .Xresources
  8. Präzedenz für Ressourcen
  9. Literatur

Einleitung

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).

Automatischer Start von Applikationen

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 &

Setzen von Ressourcen - Einführung

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:
  1. durch systemweite "application defaults", die sich (hier) standardmäßig im Verzeichnis /usr/lib/X11/app-defaults befinden
  2. durch benutzerspezifische, individuelle "application defaults" für die betreffenden Anwendungen
  3. über Kommandozeilen-Optionen
  4. mit Hilfe der Datei $HOME/.Xdefaults; es ist auch möglich, Host-spezifische Dateien anzulegen: $HOME/.Xdefaults-hostname
  5. alternativ mit Hilfe der Datei $HOME/.Xresources (unter automatischer Verwendung von xrdb)
  6. durch expliziten Aufruf von xrdb unter Verwendung einer Ressourcen-Datei beliebigen Namens
  7. in speziellen Fällen durch Umgebungsvariable

Application Defaults

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.

Setzen von Ressourcen in der Kommandozeile

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).

.Xdefaults

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

xrdb und .Xresources

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.

Präzedenz für Ressourcen

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):
  1. Hartcodierte Werte für Ressourcen.
  2. Kommandozeilen-Argumente.
  3. Durch $XENVIRONMENT gewählte Ressourcen.
  4. Über xrdb in die Resource Data Base geladene Werte.
  5. Ressourcen, die in einem der folgenden Verzeichnisse stehen:
    1. $XUSERFILESEARCHPATH - falls gesetzt, sonst
    2. $XAPPLRESDIR - falls gesetzt, sonst
    3. $HOME (oder damit verknüpft).
  6. Ressourcen in $HOME/.Xdefaults, falls nicht mit xrdb gearbeitet wird (RESOURCE_MANAGER).
  7. Werte der "application defaults" im systemweiten Verzeichnis, hier /usr/lib/X11/app-defaults/*.
  8. Werte, die durch den "fall back"-Mechanismus der Applikation gesetzt werden.

Literatur

Linda Mui and Eric Pearce, "X Window System Administrator's Guide", O'Reilly & Associates, Inc., Sebastopol CA, 1992.


Burkhard Kirste, 1994/02/17