.Xresources和.Xdefaults有什么区别?


58

这两个文件似乎具有相同的功能。两者之间有什么区别?

Answers:


68

~/.Xdefaults是存储X资源的较旧方法。每次启动Xlib程序时都会重新读取此文件。如果通过网络使用X11,则该文件必须与程序位于同一文件系统中。

~/.Xresources较新。它被加载xrdbRESOURCE_MANAGERX11根窗口的属性中。每当任何程序查找资源时,都会直接从中读取资源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.XdefaultsRESOURCE_MANAGER.Xdefaults-hostnamexrdb

下面列出的#4和#5似乎仅由纯Xlib程序使用-而不是GTK 3或其他工具包。

  • 第四个位置是$XAPPLRESDIR环境变量指向的目录。(奇怪的是,如果未设置变量,则将其$HOME用作默认值。)启动程序时,它将检查是否存在以下任何文件(文件名与程序的类名相同):

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

    language$LC_CTYPE通过去除除第一个组件之外的所有组件而得出的;例如en_US.utf-8en。)

  • 第五位置是系统范围的“默认应用程序”目录。同样,如果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页开始)。


很好的答案,但应注意,并非所有实现都正确遵循规则。例如,我记得SunOS 4和Solaris 6应用程序不会接受.Xdefaults的更改,除非我之后明确运行了“ xrdb”。当应用程序和X服务器在不同的主机上运行时,可能还会有些怪异。一些应用程序读取本地文件,而某些应用程序从X服务器读取数据库。
David C.

1
@DavidC:即Xdefaults行为遵循上述的规则。如果xrdb已经了运行,因为这个登录X显示-也就是说,如果X根属性存在-那么的xlib不会使用.Xdefaults的所有了。
grawity 2014年

1
那讲得通。但是仍然有许多看似损坏的应用程序,它们会读取〜/ .Xresources的内容并忽略xrdb数据库。如果您登录到其他主机(具有不同的.Xresources)并发现该应用程序未像在本地运行时那样显示其内容,这可能会很烦人。
David C.
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.