69 votes

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

Ces deux fichiers semblent avoir la même fonction. Quelle est la différence entre les deux, le cas échéant ?

84voto

James Mertz Points 390

~/.Xdefaults est l'ancienne méthode de stockage des ressources X. Ce fichier est relu à chaque fois qu'un programme Xlib est lancé. 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.

~/.Xresources est plus récent. Il est chargé avec xrdb dans le RESOURCE_MANAGER de la fenêtre racine X11. Lorsqu'un programme recherche une ressource, celle-ci est lue dans RESOURCE_MANAGER sans toucher aux fichiers.

Si la propriété RESOURCE_MANAGER n'existe pas Si le programme n'est pas chargé, Xlib revient à l'ancienne méthode qui consiste à lire ~/.Xdefaults à chaque démarrage du programme. Mais notez que la plupart des distributions chargeront ~/.Xresources automatiquement s'il est présent, ce qui signifie que la propriété existera toujours et donc que ~/.Xdefaults sera toujours ignoré même si vous n'avez jamais exécuté xrdb vous-même.

(Vous pouvez utiliser xprop -root pour jeter un coup d'oeil aux propriétés de la fenêtre racine X).

L'avantage de la nouvelle méthode est qu'il suffit d'appeler xrdb une fois, et les ressources seront disponibles pour tout programme s'exécutant sur cet écran, qu'il soit local ou distant. (Le nom ~/.Xresources est seulement une convention - vous pouvez utiliser xrdb pour charger tout même ~/.Xdefaults .)

Manuel de programmation Xlib P.441 :

Avant X11R2, les paramètres des ressources X étaient lus à partir du fichier .Xdefaults dans le répertoire personnel de l'utilisateur et, éventuellement, sur la machine sur laquelle le client X s'exécutait, ce qui rendait difficile la maintenance de plusieurs fichiers.

Plus tard, le programme xrdb a été créé pour stocker les paramètres de ressources des utilisateurs à partir de dans les .Xresources dans la propriété XA_RESOURCE_MANAGER de la fenêtre racine sur le serveur X actuel, afin que tous les clients connectés au même serveur y aient ont accès à ces paramètres. Si l'utilisateur n'a pas appelé xrdb pour définir la propriété, alors le fichier .Xdefaults est lu.

(Note : XA_RESOURCE_MANAGER est une macro C Xlib qui fait référence à un atome intégré, mais le nom réel de l'atome (pour XInternAtom) est juste RESOURCE_MANAGER).

Wikipedia :

[...] les ressources X sont stockées dans deux emplacements standard, selon qu'elles 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

Dossiers supplémentaires

Ça ne s'arrête pas tout à fait là.

  • Il y a aussi le $XENVIRONMENT qui a pour valeur par défaut ~/.Xdefaults-_hostname_ si elle n'est pas définie. Il est lu directement par les programmes, comme le .Xdefaults lui-même, mais il est toujours lu indépendamment de la présence ou non de RESOURCE_MANAGER. Vous pouvez utiliser .Xdefaults-_hostname_ pour conserver certains paramètres spécifiques à la machine tout en utilisant xrdb pour ceux du monde entier.

Les éléments #4 et #5 listés ci-dessous ne semblent être utilisés que par des programmes purement Xlib - pas par GTK 3 ou d'autres toolkits.

  • Le quatrième emplacement est le répertoire pointé par la commande $XAPPLRESDIR variable d'environnement. (Bizarrement, si la variable n'est pas définie, $HOME est utilisé comme valeur par défaut). Quand un programme est lancé, il regarde si l'un des fichiers suivants existe (le nom du fichier étant le même que le nom de la classe du programme) :

    • **$XAPPLRESDIR**/**$LC_CTYPE**/_XTerm_
    • **$XAPPLRESDIR**/**language**/_XTerm_
    • **$XAPPLRESDIR**/_XTerm_

    ( language est dérivé de $LC_CTYPE en supprimant tout sauf le premier composant ; par exemple, en_US.utf-8 en .)

  • Le site cinquième est l'emplacement des répertoires "app-defaults" du système. Là encore, les répertoires "app-defaults" sont vérifiés au démarrage du programme s'ils contiennent un fichier portant le nom du 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-defaults sont généralement installés dans /usr/share en même temps que le programme lui-même ; les dérogations de l'administrateur seraient envoyées à l'adresse suivante /etc .


Tout ce qui est mentionné ci-dessus est documenté de manière très détaillée dans la documentation de la boîte à outils X.org - article Intrinsèques de la boîte à outils X - Interface du langage C , section _Chargement de la base de données des ressources_ .

Malheureusement, je n'ai pas pu trouver de guide d'utilisation récent décrivant les ressources X, principalement parce qu'elles ne sont pas pertinentes en 2012. Mais pour des informations historiques (lisez : horriblement périmées), vous pouvez lire _Guide de l'utilisateur du système X Window pour X11 R3 et R4 du système X Window section 9 : Ressources de réglage_ (à partir de la page 181).

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X