X 资源
X 资源 文件 是用户级别的配置文件 点文件,通常位于 ~/.Xresources
。它可以用于设置 X 客户端应用程序的配置参数。
它们可以用于,包括但不限于:
- 配置终端偏好设置(例如,终端颜色),
- 设置 DPI、抗锯齿、微调和其他 X 字体设置,
- 更改 Xcursor 主题,
- 主题化 XScreenSaver,
- 配置底层 X 应用程序,如 rxvt-unicode、xorg-xclock 和 xpdf。
安装
安装 xorg-xrdb 软件包以获得X 服务器资源数据库实用程序,并安装 xorg-docs 软件包以获得 X.org 文档。
配置
X(7) § RESOURCES 和 XrmGetDatabase(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_name
和 Class
子字符串永远不会包含点号(.
),resourceName
子字符串可能包含点号。例如,Dialog.bodyFont
是一个 XScreenSaver 内部资源,用于设置正文字体和后备字体
xscreensaver-auth.default.Dialog.bodyFont: times new roman 12, dejavu serif 12
- application_name
- 应用程序的名称,例如
urxvt
、xpdf
、xterm
等。也可能被称为实例名称。
- Class
- 用于将资源分组在一起的分类。类名通常为大写。
- resourceName
- 要设置其值的资源的名称。资源名称通常为小写,并使用大写字母连接。
- value
- 资源的实际值。这可以是以下三种类型之一
- 整数(整数)
- 布尔值(true/false,yes/no,on/off)
- 字符串(字符的字符串)——例如,一个单词(
white
),一种颜色(#ffffff
),或一个路径(/usr/bin/firefox
)
- 分隔符
- 点号(
.
)是紧密绑定,用于分隔紧邻的组件(换句话说,表示向下进入层级的每一步)——在上面的例子中,我们从应用程序名称开始,然后进入 Class,最后进入资源本身。 - 星号(
*
)是松散绑定,用于表示任意数量的组件,包括零个。 - 冒号(
:
)用于将资源名称与值分隔开。
- 从资源文件语法的角度来看,冒号(
:
)之前的所有内容都是资源名称。从用户的角度来看,我们通常只将最右边的组件称为资源。换句话说,资源名称是由应用程序名称、Class 和 资源名称 子字符串组成的字符串。这可能是造成混淆的根源。 - 资源命名模式完全取决于应用程序。虽然一个应用程序可能使用
application_name.Class.resourceName
,但另一个应用程序可能只理解application_name.resourceName
和Class.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
双字符序列 \换行符
(反斜杠后跟换行符)也将在注释中被识别,它允许一个值跨越多行。在以下示例中,所有四行都被注释掉了,尽管只使用了一个感叹号
! 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 资源
- 字体配置#不使用 Fontconfig 的应用程序
- rxvt-unicode#配置
- xpdf(1) § OPTIONS
- Xterm#配置
- klassiker (mrdotx) — Rxvt-unicode 补丁开发者 点文件
用法
加载资源文件
资源存储在 X 服务器中,因此只需读取一次。它们也可以被远程 X11 客户端访问(例如那些通过 SSH 转发 的客户端)。
加载资源文件(例如,约定俗成的 .Xresources
),替换任何当前设置
$ xrdb ~/.Xresources
加载资源文件,并与当前设置合并
$ xrdb -merge ~/.Xresources
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。并注意那里提到的一些文件可能是空的。
参见
- X 资源中被忽略的点,作者 Thomas Dickey
- 使用 .Xdefaults 文件,作者 Purdue Engineering Computer Network