hwdb 中文手册
名称
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