Was ist der Unterschied zwischen .Xresources und .Xdefaults?

59

Diese beiden Dateien scheinen dieselbe Funktion zu haben. Was ist der Unterschied zwischen den beiden, wenn überhaupt?

freedrull
quelle

Antworten:

68

~/.Xdefaultsist die ältere Methode zum Speichern von X-Ressourcen. Diese Datei wird jedes Mal neu gelesen, wenn ein Xlib-Programm gestartet wird. Wenn X11 über das Netzwerk verwendet wird, muss sich die Datei auf demselben Dateisystem wie die Programme befinden.

~/.Xresourcesist neuer. Es wird mit xrdbin die RESOURCE_MANAGEREigenschaft des X11-Root-Fensters geladen . Wann immer ein Programm eine Ressource nachschlägt, wird es direkt von dieser gelesen RESOURCE_MANAGER.

Wenn diese Eigenschaft nicht existiert, greift Xlib .Xdefaultsbei jedem Programmstart auf die alte Lesemethode zurück. Beachten Sie, dass die meisten Distributionen ~/.Xresourcesautomatisch geladen werden, wenn sie vorhanden sind, sodass .Xdefaultssie ignoriert werden, auch wenn Sie sie noch nie xrdbmanuell ausgeführt haben.

Der Vorteil der neuen Methode besteht darin, dass sie nur xrdbeinmal aufgerufen werden muss und die Ressourcen für alle Programme verfügbar sind, die auf dieser Anzeige ausgeführt werden, egal ob lokal oder remote. (Der Name ~/.Xresourcesist nur eine Konvention - Sie können xrdbsogar jede Datei laden .Xdefaults.)

Xlib-Programmierhandbuch S.441:

Vor X11R2 wurden die X-Ressourceneinstellungen aus der Datei .Xdefaults im Ausgangsverzeichnis des Benutzers und optional auf jedem Computer, auf dem der X-Client ausgeführt wurde, gelesen, sodass es schwierig war, mehrere Dateien zu verwalten.

Später wurde das Programm xrdb erstellt, um die Ressourceneinstellungen der Benutzer aus .Xresources in der Eigenschaft XA_RESOURCE_MANAGER des Stammfensters auf dem aktuellen X-Server zu speichern, sodass alle mit demselben Server verbundenen Clients auf sie zugreifen können. Wenn der Benutzer nicht xrdb aufgerufen hat, um die Eigenschaft festzulegen, wird .Xdefaults gelesen.

Wikipedia :

[...] Die X-Ressourcen werden an zwei Standardpositionen gespeichert, je nachdem, ob sie für alle oder für eine bestimmte Anzeige gelten:

  • die RESOURCE_MANAGER-Eigenschaft des Stammfensters von Bildschirm 0
  • die SCREEN_RESOURCES-Eigenschaft des Stammfensters eines beliebigen Bildschirms

Damit ist es noch nicht zu Ende.

  • Es gibt auch die $XENVIRONMENTVariable, die standardmäßig gesetzt ist, wenn sie nicht gesetzt ist. Dies wird genauso verwendet wie , wird jedoch immer gelesen, unabhängig davon, ob vorhanden. Sie können Dateien verwenden, um einige Einstellungen maschinenspezifisch zu halten, während Sie für die globalen Einstellungen verwenden.~/.Xdefaults-hostname.XdefaultsRESOURCE_MANAGER.Xdefaults-hostnamexrdb

Die beiden unten aufgeführten Elemente 4 und 5 werden anscheinend nur von reinen Xlib-Programmen verwendet - nicht von GTK 3 oder anderen Toolkits.

  • Der vierte Speicherort ist das Verzeichnis, auf das die $XAPPLRESDIRUmgebungsvariable verweist. (Seltsamerweise wird, wenn die Variable nicht festgelegt $HOMEist, als Standard verwendet.) Wenn ein Programm gestartet wird, wird geprüft, ob eine der folgenden Dateien vorhanden ist (der Dateiname stimmt mit dem Klassennamen des Programms überein):

    • $XAPPLRESDIR/$LC_CTYPE/XTerm
    • $XAPPLRESDIR/language/XTerm
    • $XAPPLRESDIR/XTerm

    ( languageergibt sich aus $LC_CTYPEdem Entfernen aller Komponenten bis auf die erste; z. B. en_US.utf-8en.)

  • Der fünfte Speicherort sind die systemweiten "App-Defaults" -Verzeichnisse. Auch hier werden die App-Defaults-Verzeichnisse beim Programmstart überprüft, wenn sie eine Datei haben, die nach dem Programm benannt ist. Zum Beispiel verwendet XTerm (unter Arch Linux):

    • /etc/X11/$LC_CTYPE/app-defaults/XTerm
    • /etc/X11/language/app-defaults/XTerm
    • /etc/X11/app-defaults/XTerm
    • /usr/share/X11/$LC_CTYPE/app-defaults/XTerm
    • /usr/share/X11/language/app-defaults/XTerm
    • /usr/share/X11/app-defaults/XTerm

    Die App-Standarddateien werden normalerweise /usr/sharezusammen mit dem Programm selbst installiert . Administratorüberschreibungen würden zu gehen /etc.


Alles, was oben erwähnt wurde, ist in der Dokumentation zum X.org-Toolkit - Artikel X Toolkit Intrinsics - C Language Interface , Abschnitt Laden der Ressourcendatenbank, ausführlich dokumentiert .

Leider konnte ich kein aktuelles Benutzerhandbuch finden, das die X-Ressourcen beschreibt, hauptsächlich, weil sie im Jahr 2012 irrelevant sind. Für historische (schrecklich veraltete) Informationen können Sie das X Window System-Benutzerhandbuch für X11 R3 und R4 lesen des X Window System- Abschnitts 9: Festlegen von Ressourcen (ab Seite 181).

Grawity
quelle
Gute Antwort, aber es sollte beachtet werden, dass nicht alle Implementierungen den Regeln korrekt folgen. Ich erinnere mich zum Beispiel, dass SunOS 4- und Solaris 6-Apps .Xdefaults-Änderungen nur dann übernehmen würden, wenn ich danach explizit "xrdb" ausführte. Es kann auch komisch sein, wenn die App und der X-Server auf verschiedenen Hosts ausgeführt werden. Einige Apps lesen die lokale Datei und andere die Datenbank vom X-Server.
David C.
1
@DavidC .: Das Xdefaults Verhalten wird nach den oben beschriebenen Regeln. Wenn xrdbhat jemals für diesen X - Display , da Login ausgeführt wurde - das heißt, wenn die X - Root - Eigenschaft vorhanden ist - dann wird xlib nicht Xdefaults überhaupt nicht mehr verwenden.
Grawity
1
Das macht Sinn. Aber es gibt immer noch viele anscheinend borken Apps, die den Inhalt von ~ / .Xresources lesen und die xrdb-Datenbank ignorieren. Was sehr ärgerlich sein kann, wenn Sie sich bei einem anderen Host anmelden (der über andere .X-Ressourcen verfügt) und feststellen, dass die App ihren Inhalt nicht so anzeigt, wie sie lokal ausgeführt wird.
David C.