Quelle est la différence entre .Xresources et .Xdefaults?

59

Ces deux fichiers semblent avoir la même fonction. Quelle est la différence entre les deux s'il y en a?

libéré
la source

Réponses:

68

~/.Xdefaultsest l'ancienne méthode de stockage des ressources X. Ce fichier est relu chaque fois qu'un programme Xlib est démarré. Si X11 est utilisé sur le réseau, le fichier doit être présent sur le même système de fichiers que les programmes.

~/.Xresourcesest plus récent. Il est chargé xrdbdans la RESOURCE_MANAGERpropriété de la fenêtre racine X11. Chaque fois qu'un programme recherche une ressource, elle est lue directement depuis RESOURCE_MANAGER.

Si cette propriété n'existe pas, Xlib revient à l'ancienne méthode de lecture .Xdefaultsà chaque démarrage du programme. Notez que la plupart des distributions se chargeront ~/.Xresourcesautomatiquement si elles sont présentes, ce .Xdefaultsqui les ignorera même si vous ne les avez jamais exécutées xrdbmanuellement.

L'avantage de la nouvelle méthode est qu'il suffit d'appeler xrdbune fois, et les ressources seront disponibles pour tout programme exécuté sur cet écran, qu'il soit local ou distant. (Le nom ~/.Xresourcesn'est qu'une convention - vous pouvez même xrdbcharger n'importe quel fichier .Xdefaults.)

Manuel de programmation Xlib P.441:

Avant X11R2, les paramètres de ressources X étaient lus à partir du fichier .Xdefaults du répertoire de base de l'utilisateur et éventuellement de la machine sur laquelle le client X était en cours d'exécution. Il était donc difficile de gérer plusieurs fichiers.

Ensuite, le programme xrdb a été créé pour stocker les paramètres de ressources des utilisateurs depuis .Xresources dans la propriété XA_RESOURCE_MANAGER de la fenêtre racine du serveur X actuel, afin que tous les clients connectés au même serveur puissent y accéder. Si l'utilisateur n'a pas appelé xrdb pour définir la propriété, alors .Xdefaults est lu.

Wikipedia :

[...] les ressources X sont stockées dans deux emplacements standard, selon qu'ils s'appliquent à tous les écrans ou à un écran particulier:

  • la propriété RESOURCE_MANAGER de la fenêtre racine de l'écran 0
  • la propriété SCREEN_RESOURCES de la fenêtre racine d'un écran arbitraire

Cela ne s'arrête pas là.

  • Il y a aussi la $XENVIRONMENTvariable, qui est définie par défaut si non définie. Ceci est utilisé de la même manière que , mais est toujours lu, qu'il soit présent ou non. Vous pouvez utiliser des fichiers pour conserver certains paramètres spécifiques à la machine lors de l'utilisation des paramètres globaux.~/.Xdefaults-hostname.XdefaultsRESOURCE_MANAGER.Xdefaults-hostnamexrdb

Les éléments n ° 4 et n ° 5 énumérés ci-dessous ne semblent être utilisés que par les programmes Xlib purs - et non par GTK 3 ou d’autres toolkits.

  • Le quatrième emplacement est le répertoire pointé par la $XAPPLRESDIRvariable d'environnement. (Bizarrement, si la variable n'est pas définie, $HOMEest utilisée par défaut.) Lorsqu'un programme est démarré, il recherche s'il existe l'un des fichiers suivants (le nom du fichier étant identique à celui de la classe du programme):

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

    ( languageest dérivé $LC_CTYPEen supprimant tout sauf le premier composant; par exemple, en_US.utf-8en.)

  • Le cinquième emplacement est constitué des répertoires "app-default" du système. De nouveau, les répertoires app-defaults sont vérifiés au démarrage du programme s'ils portent un fichier nommé d'après le programme. Par exemple, XTerm (sur Arch Linux) utilise:

    • /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

    Les fichiers app-default sont généralement installés /usr/shareavec le programme lui-même; les dérogations de l'administrateur iraient à /etc.


Tout ce qui est mentionné ci-dessus est documenté en détail dans la documentation de la boîte à outils X.org - article Intrinsics X Toolkit - Interface en langage C , section Chargement de la base de données .

Malheureusement, je n'ai trouvé aucun guide de l'utilisateur récent décrivant les ressources X, principalement parce qu'elles ne sont pas pertinentes en 2012. Mais pour des informations historiques (lire: horriblement obsolètes), vous pouvez lire le guide de l'utilisateur du système X Window pour X11 R3 et R4 de la section 9 du système X Window : Définition des ressources (à partir de la page 181).

Grawity
la source
Excellente réponse, mais il convient de noter que toutes les implémentations ne suivent pas les règles correctement. Par exemple, je me souviens que les applications SunOS 4 et Solaris 6 ne captureraient pas les modifications .Xdefaults à moins d'exécuter explicitement "xrdb" par la suite. Il peut également y avoir une certaine bizarrerie lorsque l'application et le serveur X s'exécutent sur des hôtes différents. Certaines applications lisent le fichier local et d'autres la base de données à partir du serveur X.
David C.
1
@DavidC .: Ce comportement Xdefaults est suit les règles décrites ci - dessus. Si xrdba déjà été exécuté pour cet affichage X depuis la connexion, c'est-à-dire si la propriété racine X existe, alors xlib n'utilisera plus du tout .Xdefaults.
Grawity
1
Ça a du sens. Mais il existe encore de nombreuses applications apparemment borken qui liront le contenu de ~ / .Xresources et ignoreront la base de données xrdb. Ce qui peut être très gênant si vous vous connectez à un hôte différent (qui possède un fichier .Xresources différent) et constatez que l'application n'affiche pas son contenu comme elle le fait lorsqu'elle est exécutée localement.
David C.