Câu trả lời:
~/.Xdefaults
là 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.
~/.Xresources
là mới hơn. Nó được tải xrdb
vào thuộc RESOURCE_MANAGER
tí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ũ .Xdefaults
trê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ẽ ~/.Xresources
tự động tải nếu có, khiến .Xdefaults
bị bỏ qua ngay cả khi bạn chưa bao giờ chạy xrdb
thủ công.
Ưu điểm của phương pháp mới là đủ để gọi xrdb
mộ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 ~/.Xresources
chỉ 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.
[...] 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 ở đó.
$XENVIRONMENT
biế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
.Xdefaults
RESOURCE_MANAGER
.Xdefaults-hostname
xrdb
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 $XAPPLRESDIR
biế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
( language
có nguồn gốc từ $LC_CTYPE
việc tước tất cả trừ thành phần đầu tiên; ví dụ: en_US.utf-8
→ en
.)
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/share
cù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).
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.