X 资源

出自 ArchWiki
(重定向自 Xresources

X resources 文件 是用户级别的配置文件 dotfile,通常位于 ~/.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,最后到资源本身。
  • 星号 (*) 是松散绑定,用于表示任意数量的组件,包括零个。
  • 冒号 (:) 用于分隔资源名称和值。
注意
  • 从资源文件语法的角度来看,冒号 (:) 之前的所有内容都是资源名称。从用户角度来看,我们通常只将最右边的组件称为资源。换句话说,资源名称是由应用程序名称Classresource name 子字符串组成的字符串。这可能是造成混淆的根源。
  • 资源命名方案完全取决于应用程序。虽然一个应用程序可能使用 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 风格的 (///* … */) 注释(另请参阅 #示例)。

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

! 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 进行操作。并注意那里提到的一些文件可能是空的。

参见