X 资源
X 资源 文件 是用户级别的配置文件 点文件,通常位于 ~/.Xresources
。它可以用于设置 X 客户端应用程序的配置参数。
它们可以用于,包括但不限于:
- 配置终端偏好设置(例如终端颜色),
- 设置 DPI、抗锯齿、提示和其他 X 字体设置,
- 更改 Xcursor 主题,
- 主题化 XScreenSaver,
- 配置底层 X 应用程序,如 rxvt-unicode、xorg-xclock 和 xpdf。
安装
安装 xorg-xrdb 软件包以获得X 服务器资源数据库实用程序,并安装 xorg-docs 以获得 X.org 文档。
配置
X(7) § 资源 和 XrmGetDatabase(3) § 文件语法 提供了关于 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 和 resource name 子字符串组成的字符串。这可能是造成混淆的根源。 - 资源命名方案完全取决于应用程序。虽然一个应用程序可能使用
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) § 匹配规则。
注释
以感叹号 (!
) 开头的行将被忽略,例如
! The following rule will be ignored because it has been commented out !Xft.antialias: true
双字符序列 \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) § 资源 是一个很好的例子,因为它包含 X 资源及其默认值的列表。
要查看当前加载的资源
$ xrdb -query -all
示例
- 控制台中的颜色输出#终端模拟器
- 光标主题#X 资源
- 字体配置#不支持 Fontconfig 的应用程序
- rxvt-unicode#配置
- xpdf(1) § 选项
- 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 工程计算机网络