Qual è la differenza tra .Xresources e .Xdefaults?


59

Questi due file sembrano avere la stessa funzione. Qual è la differenza tra i due se presente?

Risposte:


68

~/.Xdefaultsè il vecchio metodo di archiviazione delle risorse X. Questo file viene riletto ogni volta che viene avviato un programma Xlib. Se X11 viene utilizzato in rete, il file deve essere presente sullo stesso filesystem dei programmi.

~/.Xresourcesè più recente. Viene caricato xrdbnella RESOURCE_MANAGERproprietà della finestra principale di X11. Ogni volta che un programma cerca una risorsa, viene letto direttamente da RESOURCE_MANAGER.

Se questa proprietà non esiste, Xlib ritorna al vecchio metodo di lettura .Xdefaultsall'avvio di ogni programma. Si noti che la maggior parte delle distribuzioni verrà caricata ~/.Xresourcesautomaticamente se è presente, causando .Xdefaultsl'ignoranza anche se non è mai stata eseguita xrdbmanualmente.

Il vantaggio del nuovo metodo è che è sufficiente chiamare xrdbuna volta e le risorse saranno disponibili per qualsiasi programma in esecuzione su questo display, sia locale che remoto. (Il nome ~/.Xresourcesè solo una convenzione - puoi usare anche xrdbper caricare qualsiasi file .Xdefaults.)

Manuale di programmazione Xlib P.441:

Prima di X11R2, le impostazioni delle risorse X venivano lette dal file .Xdefaults nella directory home degli utenti e facoltativamente su qualsiasi macchina su cui era in esecuzione il client X, quindi era difficile mantenere più file.

Successivamente, è stato creato il programma xrdb per memorizzare le impostazioni delle risorse degli utenti da .Xresources nella proprietà XA_RESOURCE_MANAGER della finestra principale sull'attuale server X, in modo che tutti i client collegati allo stesso server possano accedervi. Se l'utente non ha chiamato xrdb per impostare la proprietà, viene letto .Xdefaults.

Wikipedia :

[...] le risorse X sono archiviate in due posizioni standard, a seconda che si applichino a tutte le schermate oa una particolare:

  • la proprietà RESOURCE_MANAGER della finestra principale della schermata 0
  • la proprietà SCREEN_RESOURCES della finestra principale di una schermata arbitraria

Non finisce proprio per questo.

  • C'è anche la $XENVIRONMENTvariabile, che per impostazione predefinita è se non impostata. Viene utilizzato allo stesso modo di , ma viene sempre letto indipendentemente dal fatto che sia presente. È possibile utilizzare i file per mantenere alcune impostazioni specifiche della macchina durante l'utilizzo per quelle globali.~/.Xdefaults-hostname.XdefaultsRESOURCE_MANAGER.Xdefaults-hostnamexrdb

Entrambi gli articoli n. 4 e n. 5 elencati di seguito sembrano essere utilizzati solo da programmi Xlib puri, non da GTK 3 o altri toolkit.

  • La quarta posizione è la directory indicata dalla $XAPPLRESDIRvariabile d'ambiente. (Stranamente, se la variabile non è impostata, $HOMEviene utilizzata come impostazione predefinita.) Quando viene avviato un programma, viene visualizzato se esiste uno dei seguenti file (il nome del file è uguale al nome della classe del programma):

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

    ( languageè derivato dalla $LC_CTYPErimozione di tutti tranne il primo componente; ad esempio, en_US.utf-8en.)

  • La quinta posizione sono le directory "predefinite app" a livello di sistema. Ancora una volta, le directory predefinite dell'app vengono controllate all'avvio del programma se hanno un file che prende il nome dal programma. Ad esempio, XTerm (su Arch Linux) utilizza:

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

    I file di default delle app sono di solito installati /usr/shareinsieme al programma stesso; le sostituzioni dell'amministratore andrebbero a /etc.


Tutto quanto sopra menzionato è documentato in dettaglio nella documentazione del toolkit X.org - articolo X Toolkit Intrinsics - Interfaccia linguaggio C , sezione Caricamento del database delle risorse .

Sfortunatamente, non sono riuscito a trovare alcuna guida utente recente che descriva le risorse X, principalmente perché sono irrilevanti nell'anno 2012. Ma per informazioni storiche (leggi: orribilmente obsolete), puoi leggere la guida dell'utente di X Window System per X11 R3 e R4 della sezione 9 di X Window System : impostazione delle risorse (a partire da pagina 181).


Ottima risposta, ma va notato che non tutte le implementazioni seguono correttamente le regole. Ad esempio, ricordo che le app SunOS 4 e Solaris 6 non rilevavano le modifiche .Xdefaults a meno che non avessi eseguito esplicitamente "xrdb" in seguito. Ci possono anche essere delle stranezze quando l'app e il server X sono in esecuzione su host diversi. Alcune app leggono il file locale e altre leggono il database dal server X.
David C.

1
@DavidC .: Quel comportamento di Xdefaults sta seguendo le regole sopra descritte. Se xrdbè mai stato eseguito per questo display X dall'accesso, ovvero se esiste la proprietà X root, allora xlib non utilizzerà più .Xdefaults.
Grawity,

1
Questo ha senso. Ma ci sono ancora molte app apparentemente borken che leggeranno il contenuto di ~ / .Xresources e ignoreranno il database xrdb. Il che può essere davvero fastidioso se esegui l'accesso a un host diverso (con origini .Xresource diverse) e scopri che l'app non sta visualizzando i suoi contenuti come quando viene eseguita localmente.
David C.
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.