本文译者是一位开源理念的坚定支持者,所以本文虽然不是软件,但是遵照开源的精神发布。
本文译者十分愿意与他人分享劳动成果,如果你对我的其他翻译作品或者技术文章有兴趣,可以在如下位置查看现有的作品集:
由于译者水平有限,因此不能保证译文内容准确无误。如果你发现了译文中的错误(哪怕是错别字也好),请来信指出,任何提高译文质量的建议我都将虚心接纳。
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