Apa perbedaan antara .Xresources dan .Xdefaults?

59

Kedua file ini tampaknya memiliki fungsi yang sama. Apa perbedaan antara keduanya jika ada?

freedrull
sumber

Jawaban:

68

~/.Xdefaultsadalah metode lama untuk menyimpan sumber daya X. File ini dibaca ulang setiap kali program Xlib dimulai. Jika X11 digunakan melalui jaringan, file tersebut harus ada pada sistem file yang sama dengan program.

~/.Xresourceslebih baru. Itu dimuat dengan xrdbke RESOURCE_MANAGERproperti dari jendela root X11. Setiap kali program mencari sumber daya, itu dibaca langsung dari RESOURCE_MANAGER.

Jika properti ini tidak ada, Xlib kembali ke metode lama membaca .Xdefaultspada setiap startup program. Perhatikan bahwa sebagian besar distribusi akan dimuat ~/.Xresourcessecara otomatis jika ada, sehingga .Xdefaultsdiabaikan bahkan jika Anda belum pernah menjalankannya xrdbsecara manual.

Keuntungan dari metode baru ini adalah cukup untuk menelepon xrdbsekali, dan sumber daya akan tersedia untuk setiap program yang berjalan pada tampilan ini, baik lokal maupun jarak jauh. (Namanya ~/.Xresourceshanya konvensi - Anda dapat menggunakan xrdbuntuk memuat file apa pun, bahkan .Xdefaults.)

Manual Pemrograman Xlib P.441:

Sebelum X11R2, pengaturan sumber daya X dibaca dari file .Xdefaults di direktori home pengguna dan secara opsional pada mesin apa pun yang dijalankan klien X, sehingga beberapa file sulit untuk dipelihara.

Kemudian, program xrdb dibuat untuk menyimpan pengaturan sumber daya pengguna dari .Xresources ke properti XA_RESOURCE_MANAGER dari jendela root pada server X saat ini, sehingga semua klien yang terhubung ke server yang sama memiliki akses ke sana. Jika pengguna belum menelepon xrdb untuk mengatur properti, maka .Xdefaults dibaca.

Wikipedia :

[...] sumber daya X disimpan di dua lokasi standar, tergantung pada apakah mereka berlaku untuk semua layar atau yang tertentu:

  • properti RESOURCE_MANAGER dari jendela root layar 0
  • properti SCREEN_RESOURCES dari jendela akar layar sewenang-wenang

Itu tidak cukup berakhir di situ.

  • Ada juga $XENVIRONMENTvariabel, yang defaultnya jika tidak diatur. Ini digunakan dengan cara yang sama seperti , tetapi selalu dibaca terlepas dari apakah ada. Anda dapat menggunakan file untuk menjaga beberapa pengaturan spesifik mesin saat menggunakan untuk yang global.~/.Xdefaults-hostname.XdefaultsRESOURCE_MANAGER.Xdefaults-hostnamexrdb

Kedua item # 4 dan # 5 yang tercantum di bawah ini tampaknya hanya digunakan oleh program Xlib murni - bukan GTK 3 atau toolkit lainnya.

  • Lokasi keempat adalah direktori yang ditunjuk oleh $XAPPLRESDIRvariabel lingkungan. (Anehnya, jika variabel tidak disetel, $HOMEdigunakan sebagai default.) Ketika sebuah program dimulai, itu terlihat jika ada salah satu file berikut (nama file sama dengan nama kelas program):

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

    ( languageberasal dari $LC_CTYPEpengupasan semua kecuali komponen pertama; misalnya, en_US.utf-8en.)

  • Lokasi kelima adalah direktori "app-defaults" seluruh sistem. Sekali lagi, direktori app-default diperiksa pada startup program jika mereka memiliki file bernama setelah program. Misalnya, XTerm (di Arch Linux) menggunakan:

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

    File app-defaults biasanya diinstal /usr/sharebersama dengan program itu sendiri; penggantian administrator akan pergi ke /etc.


Segala sesuatu yang disebutkan di atas didokumentasikan dengan sangat rinci dalam dokumentasi toolkit X.org - artikel X Toolkit Intrinsik - C Language Interface , bagian Memuat Database Sumber Daya .

Sayangnya, saya tidak dapat menemukan panduan pengguna terbaru yang menggambarkan sumber X, sebagian besar karena mereka tidak relevan pada tahun 2012. Tetapi untuk informasi historis (baca: sangat ketinggalan zaman), Anda dapat membaca panduan pengguna Sistem X Window untuk X11 R3 dan R4 Sistem X Window bagian 9: Mengatur Sumber Daya (dimulai dengan halaman 181).

grawity
sumber
Jawaban yang bagus, tetapi harus dicatat bahwa tidak semua implementasi mengikuti aturan dengan benar. Sebagai contoh, saya ingat aplikasi SunOS 4 dan Solaris 6 tidak akan menerima perubahan .Xdefaults kecuali saya secara eksplisit menjalankan "xrdb" sesudahnya. Mungkin juga ada keanehan ketika aplikasi dan server X berjalan pada host yang berbeda. Beberapa aplikasi membaca file lokal dan beberapa membaca database dari server X.
David C.
1
@DavidC .: Bahwa perilaku Xdefaults adalah mengikuti aturan yang dijelaskan di atas. Jika xrdbtelah pernah dijalankan untuk tampilan X ini sejak login - yaitu, jika properti X akar ada - maka Xlib tidak akan menggunakan .Xdefaults sama sekali lagi.
grawity
1
Itu masuk akal. Tetapi masih ada banyak aplikasi yang tampaknya borken yang akan membaca konten ~ / .Xresources dan mengabaikan database xrdb. Yang bisa sangat menjengkelkan jika Anda slogin ke host yang berbeda (yang memiliki .Xresources berbeda) dan menemukan bahwa aplikasi tidak menampilkan isinya seperti yang dilakukannya ketika dijalankan secara lokal.
David C.