Answers:
~/.Xdefaults
是存储X资源的较旧方法。每次启动Xlib程序时都会重新读取此文件。如果通过网络使用X11,则该文件必须与程序位于同一文件系统中。
~/.Xresources
较新。它被加载xrdb
到RESOURCE_MANAGER
X11根窗口的属性中。每当任何程序查找资源时,都会直接从中读取资源RESOURCE_MANAGER
。
如果此属性不存在,则Xlib将.Xdefaults
在每次程序启动时退回到旧的读取方法。请注意,~/.Xresources
如果存在大多数发行版,它将自动加载,.Xdefaults
即使您从未xrdb
手动运行过,也会被忽略。
新方法的优点是调用xrdb
一次就足够了,并且该资源对于在此显示器上运行的任何程序(无论是本地的还是远程的)都可用。(名称~/.Xresources
仅是一个约定-您xrdb
甚至可以用来加载任何文件.Xdefaults
。)
Xlib编程手册P.441:
在X11R2之前,X资源设置是从用户主目录中的.Xdefaults文件读取的,并且可以选择在运行X客户端的任何计算机上读取,因此很难维护多个文件。
稍后,使用xrdb程序将.Xresources中的用户资源设置存储到当前X服务器上根窗口的XA_RESOURCE_MANAGER属性中,因此连接到同一服务器的所有客户端都可以访问它们。如果用户尚未调用xrdb来设置属性,则将读取.Xdefaults。
维基百科:
X资源存储在两个标准位置,具体取决于它们适用于所有屏幕还是特定屏幕:
- 屏幕0的根窗口的RESOURCE_MANAGER属性
- 任意屏幕的根窗口的SCREEN_RESOURCES属性
事情还没有结束。
$XENVIRONMENT
变量,如果未设置,则默认为。用法与相同,但是无论是否存在,始终读取。在用于全局设置时,可以使用文件来保留某些特定于计算机的设置。~/.Xdefaults-hostname
.Xdefaults
RESOURCE_MANAGER
.Xdefaults-hostname
xrdb
下面列出的#4和#5似乎仅由纯Xlib程序使用-而不是GTK 3或其他工具包。
第四个位置是$XAPPLRESDIR
环境变量指向的目录。(奇怪的是,如果未设置变量,则将其$HOME
用作默认值。)启动程序时,它将检查是否存在以下任何文件(文件名与程序的类名相同):
$XAPPLRESDIR/$LC_CTYPE/XTerm
$XAPPLRESDIR/language/XTerm
$XAPPLRESDIR/XTerm
(language
是$LC_CTYPE
通过去除除第一个组件之外的所有组件而得出的;例如en_US.utf-8
→ en
。)
在第五位置是系统范围的“默认应用程序”目录。同样,如果app-defaults目录中有一个以程序命名的文件,则会在程序启动时对其进行检查。例如,XTerm(在Arch Linux上)使用:
/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
app-defaults文件通常/usr/share
与程序本身一起安装;管理员优先权将转至/etc
。
X.org工具箱文档(文章X工具箱内在-C语言接口)的“ 加载资源数据库”部分中详细记录了上述所有内容。
不幸的是,我找不到描述X资源的最新用户指南,主要是因为它们与2012年无关。关于历史信息(阅读:非常过时),可以阅读X11 R3和R4的X Window系统用户指南。 X窗口系统的第9部分:设置资源(从第181页开始)。
xrdb
已经过了运行,因为这个登录X显示-也就是说,如果X根属性存在-那么的xlib不会使用.Xdefaults的所有了。