X 资源

出自 ArchWiki
(重定向自 Xdefaults

X 资源 文件 是用户级别的配置文件 点文件,通常位于 ~/.Xresources。它可以用于设置 X 客户端应用程序的配置参数。

它们可以用于,包括但不限于:

安装

安装 xorg-xrdb 软件包以获得X 服务器资源数据库实用程序,并安装 xorg-docs 软件包以获得 X.org 文档。

配置

X(7) § RESOURCESXrmGetDatabase(3) § FILE SYNTAX 提供了关于X 资源机制和文件语法的详细信息。

~/.Xresources 是一个约定俗成的文件名,xrdb 并没有规定必须使用它。你可以使用任何其他文件名,例如 ~/.config/X11/Xresources~/.config/X11/Xresources.d/application-name (另请参阅 #示例#包含文件)。

基本语法

X 资源文件的语法是一系列资源行,如下所示

application_name.Class.resourceName: value
      application_name.resourceName: value
                 Class.resourceName: value
      application_name*resourceName: value
                      *resourceName: value

application_nameClass 子字符串永远不会包含点号(.),resourceName 子字符串可能包含点号。例如,Dialog.bodyFont 是一个 XScreenSaver 内部资源,用于设置正文字体和后备字体

xscreensaver-auth.default.Dialog.bodyFont: times new roman 12, dejavu serif 12
application_name
应用程序的名称,例如 urxvtxpdfxterm 等。也可能被称为实例名称
Class
用于将资源分组在一起的分类。类名通常为大写。
resourceName
要设置其值的资源的名称。资源名称通常为小写,并使用大写字母连接。
value
资源的实际值。这可以是以下三种类型之一
  • 整数(整数)
  • 布尔值(true/false,yes/no,on/off)
  • 字符串(字符的字符串)——例如,一个单词(white),一种颜色(#ffffff),或一个路径(/usr/bin/firefox
分隔符
  • 点号(.)是紧密绑定,用于分隔紧邻的组件(换句话说,表示向下进入层级的每一步)——在上面的例子中,我们从应用程序名称开始,然后进入 Class,最后进入资源本身。
  • 星号(*)是松散绑定,用于表示任意数量的组件,包括零个。
  • 冒号(:)用于将资源名称与值分隔开。
注意
  • 从资源文件语法的角度来看,冒号(:)之前的所有内容都是资源名称。从用户的角度来看,我们通常只将最右边的组件称为资源。换句话说,资源名称是由应用程序名称Class资源名称 子字符串组成的字符串。这可能是造成混淆的根源。
  • 资源命名模式完全取决于应用程序。虽然一个应用程序可能使用 application_name.Class.resourceName,但另一个应用程序可能只理解 application_name.resourceNameClass.resourceName

通配符匹配

问号(?)和星号(*)可以用作通配符,从而可以轻松编写应用于许多不同应用程序或元素的单个规则。? 用于匹配任何单个组件名称,而 * 用于表示任意数量的中间组件,包括零个。

使用前面的示例,如果你想将相同的字体应用于所有包含类名 Dialog 且包含资源名称 headingFont 的程序(不只是 XScreenSaver),你可以写

?.Dialog.headingFont:     -*-fixed-bold-r-*-*-*-100-*-*-*-*-iso8859-1

如果你想将相同的规则应用于所有包含资源 headingFont 的程序,无论其类是什么,你可以写

*headingFont:    -*-fixed-bold-r-*-*-*-100-*-*-*-*-iso8859-1
注意
  • 问号(?)类似于组件名称,因此需要在其旁边放置绑定字符——点号(.)或星号(*)。
  • 星号(*)本身就是一个绑定字符,无需在其旁边放置点号,并且点号和星号的序列在文件处理期间会被替换为单个星号。

有关更多信息,请参阅 XrmGetResource(3) § MATCHING RULES

注释

以感叹号(!)开头的行将被忽略,例如

! The following rule will be ignored because it has been commented out
!Xft.antialias: true
注意
  • 感叹号必须是行中的第一个字符。
  • 如果你安装了 C 预处理器,例如 GNU CPP (gcc),你可以使用 C 风格的注释(///* … */)(另请参阅 #示例)。

双字符序列 \换行符(反斜杠后跟换行符)也将在注释中被识别,它允许一个值跨越多行。在以下示例中,所有四行都被注释掉了,尽管只使用了一个感叹号

! URxvt.font: xft:Input Mono:size=13:style=Regular, \
              xft:Font Awesome 6 Free:style=Solid,  \
              xft:Segoe UI Symbol:style=Regular,    \
              xft:Noto Emoji:style=Regular

包含文件

要将资源配置分散到多个文件(例如,为每个应用程序使用其自己的文件),请使用C 预处理器 #include 指令

~/.config/X11/Xresources
#include "Xresources.d/fonts"
#include "Xresources.d/rxvt-unicode"
#include "Xresources.d/xscreensaver"
#include "Xresources.d/xterm"

如果使用 #include 引用的文件无法从应用的配置文件目录访问,则需要传递一个要搜索的目录

$ xrdb -load -I${HOME}/.config/X11 ~/.Xresources

默认设置

要查看已安装的 X11 应用程序的默认设置,请查看 /usr/share/X11/app-defaults/

有关程序特定资源的详细信息通常在程序的 man 手册页中提供。xterm(1) § RESOURCES 是一个很好的例子,因为它包含 X 资源及其默认值的列表。

要查看当前加载的资源

$ xrdb -query -all

示例

用法

加载资源文件

资源存储在 X 服务器中,因此只需读取一次。它们也可以被远程 X11 客户端访问(例如那些通过 SSH 转发 的客户端)。

加载资源文件(例如,约定俗成的 .Xresources),替换任何当前设置

$ xrdb ~/.Xresources

加载资源文件,并与当前设置合并

$ xrdb -merge ~/.Xresources
注意
  • 大多数 显示管理器 在登录时加载 ~/.Xresources 文件。
  • 旧的 ~/.Xdefaults 文件在 X11 程序启动时读取,但前提是当前会话中尚未使用过 xrdb[1]

xinitrc

如果你正在使用默认 xinitrc 的副本作为你的 .xinitrc,它已经合并了 ~/.Xresources

如果你使用的是自定义的,请添加

.xinitrc
[[ -f ~/.Xresources ]] && xrdb -merge -I$HOME ~/.Xresources
注意: 不要在 ~/.xinitrc 中后台运行 xrdb 命令。否则,在 xrdb 完成加载资源之前启动的程序可能会查找资源。

获取资源值

如果你想获取资源的值(例如,如果你想在 bash 脚本中使用它),你可以使用 xgetresAUR

$ xgetres xscreensaver.Dialog.headingFont
-*-fixed-bold-r-*-*-*-100-*-*-*-*-iso8859-1

故障排除

解析错误

显示管理器(如 GDM)可能会为 xrdb 使用 --nocpp 参数。

xrdb -query 没有输出

xrdb -query 没有输出是很常见的。请尝试遵循上面的 #加载资源文件#xinitrc。并注意那里提到的一些文件可能是空的。

参见