Sự khác biệt giữa .Xresource và .Xdefaults là gì?


59

Hai tập tin này dường như có cùng chức năng. Sự khác biệt giữa hai nếu có?

Câu trả lời:


68

~/.Xdefaultslà phương pháp cũ hơn để lưu trữ tài nguyên X. Tập tin này được đọc lại mỗi khi chương trình Xlib được khởi động. Nếu X11 được sử dụng qua mạng, tệp phải có mặt trên cùng hệ thống tệp với các chương trình.

~/.Xresourceslà mới hơn. Nó được tải xrdbvào thuộc RESOURCE_MANAGERtính của cửa sổ gốc X11. Bất cứ khi nào bất kỳ chương trình tìm kiếm một tài nguyên, nó được đọc thẳng từ RESOURCE_MANAGER.

Nếu thuộc tính này không tồn tại, Xlib quay lại phương pháp đọc cũ .Xdefaultstrên mỗi lần khởi động chương trình. Lưu ý rằng hầu hết các bản phân phối sẽ ~/.Xresourcestự động tải nếu có, khiến .Xdefaultsbị bỏ qua ngay cả khi bạn chưa bao giờ chạy xrdbthủ công.

Ưu điểm của phương pháp mới là đủ để gọi xrdbmột lần và tài nguyên sẽ có sẵn cho bất kỳ chương trình nào đang chạy trên màn hình này, cho dù là cục bộ hay từ xa. (Tên ~/.Xresourceschỉ là quy ước - bạn có thể sử dụng xrdbđể tải bất kỳ tệp nào, thậm chí .Xdefaults.)

Hướng dẫn lập trình Xlib P.441:

Trước X11R2, cài đặt tài nguyên X đã được đọc từ tệp .Xdefaults trong thư mục chính của người dùng và tùy chọn trên bất kỳ máy nào mà máy khách X đang chạy, vì vậy nhiều tệp khó duy trì.

Sau đó, chương trình xrdb đã được thực hiện để lưu trữ cài đặt tài nguyên của người dùng từ .Xresource vào thuộc tính XA_RESOURCE_MANAGER của cửa sổ gốc trên máy chủ X hiện tại, vì vậy tất cả các máy khách được kết nối với cùng một máy chủ đều có quyền truy cập vào chúng. Nếu người dùng chưa gọi xrdb để đặt thuộc tính, thì .Xdefaults được đọc.

Wikipedia :

[...] tài nguyên X được lưu trữ ở hai vị trí tiêu chuẩn, tùy thuộc vào việc chúng áp dụng cho tất cả các màn hình hay cho một vị trí cụ thể:

  • thuộc tính RESOURCE_MANAGER của cửa sổ gốc của màn hình 0
  • thuộc tính SCREEN_RESOURCES của cửa sổ gốc của màn hình tùy ý

Nó không hoàn toàn kết thúc ở đó.

  • Ngoài ra còn có $XENVIRONMENTbiến, mặc định nếu không được đặt. Điều này được sử dụng theo cùng một cách , nhưng luôn luôn được đọc bất kể có mặt hay không. Bạn có thể sử dụng các tệp để giữ một số cài đặt dành riêng cho máy trong khi sử dụng cho các cài đặt chung .~/.Xdefaults-hostname.XdefaultsRESOURCE_MANAGER.Xdefaults-hostnamexrdb

Cả hai mục số 4 và số 5 được liệt kê dưới đây dường như chỉ được sử dụng bởi các chương trình Xlib thuần túy - không phải GTK 3 hoặc các bộ công cụ khác.

  • Vị trí thứ tư là thư mục được chỉ ra bởi $XAPPLRESDIRbiến môi trường. (Kỳ lạ, nếu biến không được đặt, $HOMEđược sử dụng làm mặc định.) Khi chương trình được khởi động, nó sẽ xuất hiện nếu có bất kỳ tệp nào sau đây tồn tại (tên tệp giống với tên lớp của chương trình):

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

    ( languagecó nguồn gốc từ $LC_CTYPEviệc tước tất cả trừ thành phần đầu tiên; ví dụ: en_US.utf-8en.)

  • Vị trí thứ năm là các thư mục "mặc định ứng dụng" trên toàn hệ thống. Một lần nữa, các thư mục mặc định ứng dụng được kiểm tra khi khởi động chương trình nếu chúng có tệp được đặt tên theo chương trình. Ví dụ: XTerm (trên Arch Linux) sử dụng:

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

    Các tệp mặc định ứng dụng thường được cài đặt /usr/sharecùng với chính chương trình; ghi đè quản trị viên sẽ đi đến /etc.


Tất cả mọi thứ được đề cập ở trên đều được ghi lại rất chi tiết trong tài liệu của bộ công cụ X.org - bài viết X Intkit Intrinsics - Giao diện ngôn ngữ C , phần Tải cơ sở dữ liệu tài nguyên .

Thật không may, tôi không thể tìm thấy bất kỳ hướng dẫn sử dụng nào gần đây mô tả tài nguyên X, chủ yếu là vì chúng không liên quan trong năm 2012. Nhưng để biết thông tin lịch sử (đọc: hết hạn khủng khiếp), bạn có thể đọc hướng dẫn sử dụng X Window System cho X11 R3 và R4 của Hệ thống cửa sổ X phần 9: Cài đặt tài nguyên (bắt đầu từ trang 181).


Câu trả lời tuyệt vời, nhưng cần lưu ý rằng không phải tất cả các triển khai đều tuân theo các quy tắc một cách chính xác. Chẳng hạn, tôi nhớ các ứng dụng SunOS 4 và Solaris 6 sẽ không nhận các thay đổi .Xdefaults trừ khi tôi rõ ràng đã chạy "xrdb" sau đó. Cũng có thể có một số điều kỳ lạ khi ứng dụng và máy chủ X đang chạy trên các máy chủ khác nhau. Một số ứng dụng đọc tệp cục bộ và một số đọc cơ sở dữ liệu từ máy chủ X.
David C.

1
@DavidC .: Đó là hành vi Xdefaults được theo các quy tắc mô tả ở trên. Nếu xrdbđã từng được chạy cho màn hình X này kể từ khi đăng nhập - nghĩa là, nếu thuộc tính gốc X tồn tại - thì xlib sẽ không sử dụng .Xdefaults nữa.
grawity

1
Điều đó có ý nghĩa. Nhưng vẫn còn nhiều ứng dụng rõ ràng sẽ đọc nội dung của ~ / .Xresours và bỏ qua cơ sở dữ liệu xrdb. Điều này có thể thực sự gây phiền nhiễu nếu bạn slogin đến một máy chủ khác (có nguồn .Xresres khác) và thấy rằng ứng dụng không hiển thị nội dung của nó theo cách nó hoạt động khi chạy cục bộ.
David C.
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.