hwdb 中文手册

译者:金步国


版权声明

本文译者是一位开源理念的坚定支持者,所以本文虽然不是软件,但是遵照开源的精神发布。

其他作品

本文译者十分愿意与他人分享劳动成果,如果你对我的其他翻译作品或者技术文章有兴趣,可以在如下位置查看现有的作品集:

联系方式

由于译者水平有限,因此不能保证译文内容准确无误。如果你发现了译文中的错误(哪怕是错别字也好),请来信指出,任何提高译文质量的建议我都将虚心接纳。


手册索引 · 指令索引systemd-241

名称

hwdb — 硬件数据库

描述

硬件数据库是一个由"modalias"风格的键(key)与"udev属性"风格的值(value)组成的 key-value 文本数据库。 主要用于 udev 为匹配到的硬件设备添加关联属性, 但也可以用于直接查询。

硬件数据库文件

硬件数据库文件(hwdb)位于 操作系统发行商维护的 /usr/lib/udev/hwdb.d 目录中, 以及系统管理员维护的 /etc/udev/hwdb.d 目录中。 所有的 hwdb 文件(无论位于哪个目录中),统一按照文件名的字典顺序处理。 对于不同目录下的同名 hwdb 文件,仅以 /etc/udev/hwdb.d 目录中的那一个为准。 依据这个特性,系统管理员可以使用 /etc/udev/hwdb.d 目录中的自定义文件 替代 /usr/lib/udev/hwdb.d 目录中的同名文件。 如果系统管理员想要屏蔽 /usr/lib/udev/hwdb.d 目录中的某个 hwdb 文件, 那么最佳做法是在 /etc/udev/hwdb.d 目录中创建一个指向 /dev/null 的同名符号链接, 即可彻底屏蔽 /usr/lib/udev/hwdb.d 目录中的同名文件。 注意,硬件数据库文件必须以 .hwdb 作为后缀名,否则将被忽略。

每个硬件数据库文件(hwdb)都包含一系列由"matche"与关联的"key-value"组成的记录。 每条记录由一个或多个用于匹配的"matche"字符串(可包含shell风格的通配符)开头, 多个"matche"字符串之间使用换行符分隔,但必须是依次紧紧相连的行(也就是中间不能出现空行), 每一行都必须是一个完整的"matche"字符串(也就是不能将一个"matche"字符串分为两行), 多行之间是逻辑或(OR)的关系。 每一个"matche"字符串都必须顶行书写(也就是行首不能是空白字符)。

"matche"行之后是一个或多个以空格开头的"key-value"行(必须以空格开头作为区分), "key-value"行必须符合 "key=value" 格式。 一个空白行表示一条记录结束。 以 "#" 开头的行将被视为注释而被忽略。

如果有多条记录的"matche"串都匹配同一个给定的查找字符串, 那么所有匹配记录中的"key-value"都将被融合在一起。如果某个"key"出现了多次, 那么仅以最高优先级记录中的"value"为准(每个"key"仅允许拥有一个单独的"value")。 对于不同硬件数据库文件(hwdb)中的记录来说,文件名的字典顺序越靠后,优先级越高; 对于同一个硬件数据库文件(hwdb)中的记录来说, 记录自身的位置越靠后,优先级越高。

所有 hwdb 文件都将被 systemd-hwdb(8) 编译为二进制格式的数据库,并存放在 /etc/udev/hwdb.bin 文件中。 注意,操作系统发行商应该将预装的二进制格式的数据库存放在 /usr/lib/udev/hwdb.bin 文件中。 系统在运行时,仅会读取二进制格式的硬件数据库。

例子

例 1.  hwdb 文件的一般语法

# /usr/lib/udev/hwdb.d/example.hwdb
# 注释一般放在记录之前。
# 用于描述该文件的用途、定义了哪些属性、
# 以及排序规则。

# 下面这条记录有三个 match 以及一个属性
mouse:*:name:*Trackball*:
mouse:*:name:*trackball*:
mouse:*:name:*TrackBall*:
 ID_INPUT_TRACKBALL=1

# 下面这条记录有一个 match 以及五个属性
mouse:usb:v046dp4041:name:Logitech MX Master:
 MOUSE_DPI=1000@166
 MOUSE_WHEEL_CLICK_ANGLE=15
 MOUSE_WHEEL_CLICK_ANGLE_HORIZONTAL=26
 MOUSE_WHEEL_CLICK_COUNT=24
 MOUSE_WHEEL_CLICK_COUNT_HORIZONTAL=14

例 2. 属性值的覆盖

# /usr/lib/udev/hwdb.d/60-keyboard.hwdb
evdev:atkbd:dmi:bvn*:bvr*:bd*:svnAcer*:pn*
 KEYBOARD_KEY_a1=help
 KEYBOARD_KEY_a2=setup
 KEYBOARD_KEY_a3=battery

evdev:atkbd:dmi:bvn*:bvr*:bd*:svnAcer*:pn123*
 KEYBOARD_KEY_a2=wlan

# /etc/udev/hwdb.d/70-keyboard.hwdb
# 禁用所有AT键盘上的 wlan 按钮
evdev:atkbd:*
 KEYBOARD_KEY_a2=reserved

如果硬件数据库仅由上述两个文件组成,那么查找字符串为 "evdev:atkbd:dmi:bvnAcer:bdXXXXX:bd08/05/2010:svnAcer:pn123" 的键盘将会匹配上述全部三条记录,并且最终获得如下"属性=值":

KEYBOARD_KEY_a1=help
KEYBOARD_KEY_a2=reserved
KEYBOARD_KEY_a3=battery

参见

systemd-hwdb(8)