Jaka jest różnica między .Xresources a .Xdefaults?

59

Te dwa pliki wydają się mieć tę samą funkcję. Jaka jest różnica między tymi dwoma, jeśli w ogóle?

freedrull
źródło

Odpowiedzi:

68

~/.Xdefaultsjest starszą metodą przechowywania zasobów X. Ten plik jest ponownie odczytywany przy każdym uruchomieniu programu Xlib. Jeśli X11 jest używany przez sieć, plik musi znajdować się w tym samym systemie plików, co programy.

~/.Xresourcesjest nowszy. Jest ładowany xrdbwe RESOURCE_MANAGERwłaściwości okna głównego X11. Ilekroć jakiś program wyszukuje zasób, jest on odczytywany bezpośrednio z RESOURCE_MANAGER.

Jeśli ta właściwość nie istnieje, Xlib powraca do starej metody odczytu .Xdefaultsprzy każdym uruchomieniu programu. Zauważ, że większość dystrybucji ładuje się ~/.Xresourcesautomatycznie, jeśli jest obecna, co powoduje .Xdefaultsignorowanie, nawet jeśli nigdy nie działałeś xrdbręcznie.

Zaletą nowej metody jest to, że wystarczy zadzwonić xrdbraz, a zasoby będą dostępne dla każdego programu działającego na tym ekranie, zarówno lokalnego, jak i zdalnego. (Nazwa ~/.Xresourcesjest tylko konwencją - możesz użyć nawet xrdbdo załadowania dowolnego pliku .Xdefaults).

Podręcznik programowania Xlib P.441:

Przed X11R2 ustawienia zasobów X były odczytywane z pliku .Xdefaults w katalogu osobistym użytkowników i opcjonalnie na dowolnym komputerze, na którym działał klient X, więc wiele plików było trudnych w utrzymaniu.

Później opracowano program xrdb do przechowywania ustawień zasobów użytkowników z .Xresources we właściwości XA_RESOURCE_MANAGER okna głównego na bieżącym serwerze X, aby wszyscy klienci podłączeni do tego samego serwera mieli do nich dostęp. Jeśli użytkownik nie wywołał xrdb, aby ustawić właściwość, zostanie odczytany plik .Xdefaults.

Wikipedia :

[...] zasoby X są przechowywane w dwóch standardowych lokalizacjach, w zależności od tego, czy dotyczą wszystkich ekranów, czy konkretnego:

  • właściwość RESOURCE_MANAGER w oknie głównym ekranu 0
  • właściwość SCREEN_RESOURCES okna głównego dowolnego ekranu

Na tym się nie kończy.

  • Istnieje również $XENVIRONMENTzmienna, która domyślnie jest ustawiona, jeśli nie jest ustawiona. Jest to używane w taki sam sposób , ale zawsze jest odczytywane bez względu na to, czy jest obecne. Możesz użyć plików, aby zachować niektóre ustawienia specyficzne dla komputera podczas korzystania z globalnych.~/.Xdefaults-hostname.XdefaultsRESOURCE_MANAGER.Xdefaults-hostnamexrdb

Zarówno wymienione poniżej elementy # 4, jak i # 5 wydają się być używane tylko przez czyste programy Xlib - nie GTK 3 ani inne zestawy narzędzi.

  • Czwarta lokalizacja to katalog wskazywany przez $XAPPLRESDIRzmienną środowiskową. (Dziwne, jeśli zmienna nie jest ustawiona, $HOMEjest używana jako domyślna.) Po uruchomieniu programu sprawdza, czy istnieje jeden z następujących plików (nazwa pliku jest taka sama jak nazwa klasy programu):

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

    ( languagepochodzi z $LC_CTYPEusuwania wszystkich elementów oprócz pierwszego; na przykład en_US.utf-8en.)

  • Piąte miejsce jest „app-defaults” katalogi całego systemu. Ponownie, domyślne katalogi aplikacji są sprawdzane podczas uruchamiania programu, jeśli mają plik nazwany po programie. Na przykład XTerm (na Arch Linux) używa:

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

    Domyślne pliki aplikacji są zwykle instalowane /usr/sharewraz z samym programem; zastąpienia administratora pójdą do /etc.


Wszystko, co wspomniano powyżej, zostało szczegółowo opisane w dokumentacji zestawu narzędzi X.org - artykuł X Toolkit Intrinsics - Interfejs języka C , sekcja Ładowanie bazy danych zasobów .

Niestety nie mogłem znaleźć żadnej najnowszej instrukcji obsługi opisującej zasoby X, głównie dlatego, że są one nieistotne w roku 2012. Jednak w celu uzyskania informacji historycznych (czytaj: okropnie nieaktualne) można przeczytać instrukcję użytkownika X Window System dla X11 R3 i R4 X Window System sekcja 9: Ustawianie zasobów (od strony 181).

grawitacja
źródło
Świetna odpowiedź, ale należy zauważyć, że nie wszystkie implementacje poprawnie przestrzegają reguł. Na przykład pamiętam, że aplikacje SunOS 4 i Solaris 6 nie wykryłyby zmian .Xdefault, chyba że później wyraźnie uruchomiłem „xrdb”. Może być również dziwne, gdy aplikacja i serwer X działają na różnych hostach. Niektóre aplikacje czytają lokalny plik, a niektóre czytają bazę danych z serwera X.
David C.
1
@DavidC .: To zachowanie Xdefault jest zgodne z zasadami opisanymi powyżej. Jeśli xrdbnie zawsze prowadzony na tym wyświetlaczu od X logowania - to znaczy, jeżeli nieruchomość X korzeń istnieje - wtedy xlib nie używać .Xdefaults już w ogóle.
grawity
1
To ma sens. Ale wciąż istnieje wiele pozornie błędnych aplikacji, które będą czytać zawartość ~ / .Xresources i ignorować bazę danych xrdb. Co może być naprawdę denerwujące, jeśli prześlizgniesz się do innego hosta (który ma inne .Xresources) i stwierdzisz, że aplikacja nie wyświetla zawartości w sposób, w jaki działa lokalnie.
David C.