| <?xml version='1.0'?> |
| <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" |
| "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> |
| <!-- SPDX-License-Identifier: LGPL-2.1+ --> |
| |
| <refentry id="hwdb" conditional="ENABLE_HWDB"> |
| <refentryinfo> |
| <title>hwdb</title> |
| <productname>systemd</productname> |
| </refentryinfo> |
| |
| <refmeta> |
| <refentrytitle>hwdb</refentrytitle> |
| <manvolnum>7</manvolnum> |
| </refmeta> |
| |
| <refnamediv> |
| <refname>hwdb</refname> |
| <refpurpose>Hardware Database</refpurpose> |
| </refnamediv> |
| |
| <refsect1><title>Description</title> |
| <para>The hardware database is a key-value store for associating modalias-like keys to |
| udev-property-like values. It is used primarily by udev to add the relevant properties |
| to matching devices, but it can also be queried directly.</para> |
| </refsect1> |
| |
| <refsect1><title>Hardware Database Files</title> |
| <para>The hwdb files are read from the files located in the |
| system hwdb directory <filename>/usr/lib/udev/hwdb.d</filename> and |
| the local administration directory <filename>/etc/udev/hwdb.d</filename>. |
| All hwdb files are collectively sorted and processed in lexical order, |
| regardless of the directories in which they live. However, files with |
| identical filenames replace each other. Files in <filename>/etc/</filename> |
| have the highest priority and take precedence over files with the same |
| name in <filename>/usr/lib/</filename>. This can be used to override a |
| system-supplied hwdb file with a local file if needed; |
| a symlink in <filename>/etc/</filename> with the same name as a hwdb file in |
| <filename>/usr/lib/</filename>, pointing to <filename>/dev/null</filename>, |
| disables that hwdb file entirely. hwdb files must have the extension |
| <filename>.hwdb</filename>; other extensions are ignored.</para> |
| |
| <para>Each hwdb file contains data records consisting of matches and associated |
| key-value pairs. Every record in the hwdb starts with one or more match strings, |
| specifying a shell glob to compare the lookup string against. Multiple match lines |
| are specified in consecutive lines. Every match line is compared individually, and |
| they are combined by OR. Every match line must start at the first character of the |
| line.</para> |
| |
| <para>Match patterns consist of literal characters, and shell-style wildcards:</para> |
| <itemizedlist> |
| <listitem><para>Asterisk <literal>*</literal> matches any number of characters |
| </para></listitem> |
| <listitem><para>Question mark <literal>?</literal> matches a single character |
| </para></listitem> |
| <listitem><para>Character list <literal>[<replaceable>chars</replaceable>]</literal> matches one of |
| the characters <replaceable>chars</replaceable> listed between <literal>[</literal> and |
| <literal>]</literal>. A range may be specified as with a dash as |
| <literal>[<replaceable>first</replaceable>-<replaceable>last</replaceable>]</literal>. The match may |
| be inverted with a caret <literal>[^…]</literal>.</para></listitem> |
| </itemizedlist> |
| |
| <para>The match lines are followed by one or more key-value pair lines, which are |
| recognized by a leading space character. The key name and value are separated by |
| <literal>=</literal>. An empty line signifies the end of a record. Lines beginning |
| with <literal>#</literal> are ignored.</para> |
| |
| <para>In case multiple records match a given lookup string, the key-value pairs |
| from all records are combined. If a key is specified multiple times, the value |
| from the record with the highest priority is used (each key can have only a single |
| value). The priority is higher when the record is in a file that sorts later |
| lexicographically, and in case of records in the same file, later records have |
| higher priority.</para> |
| |
| <para>The content of all hwdb files is read by |
| <citerefentry><refentrytitle>systemd-hwdb</refentrytitle><manvolnum>8</manvolnum></citerefentry> |
| and compiled to a binary database located at <filename>/etc/udev/hwdb.bin</filename>, |
| or alternatively <filename>/usr/lib/udev/hwdb.bin</filename> if you want ship the |
| compiled database in an immutable image. During runtime, only the binary database |
| is used.</para> |
| </refsect1> |
| |
| <refsect1> |
| <title>Examples</title> |
| |
| <example> |
| <title>General syntax of hwdb files</title> |
| |
| <programlisting># /usr/lib/udev/hwdb.d/example.hwdb |
| # Comments can be placed before any records. This is a good spot |
| # to describe what that file is used for, what kind of properties |
| # it defines, and the ordering convention. |
| |
| # A record with three matches and one property |
| mouse:*:name:*Trackball*:* |
| mouse:*:name:*trackball*:* |
| mouse:*:name:*TrackBall*:* |
| ID_INPUT_TRACKBALL=1 |
| |
| # The rule above could be also be written in a form that |
| # matches Tb, tb, TB, tB: |
| mouse:*:name:*[tT]rack[bB]all*:* |
| ID_INPUT_TRACKBALL=1 |
| |
| # A record with a single match and five properties |
| 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 |
| </programlisting> |
| </example> |
| |
| <example> |
| <title>Overriding of properties</title> |
| |
| <programlisting># /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 |
| |
| # Match vendor name "Acer" and any product name starting with "X123" |
| evdev:atkbd:dmi:bvn*:bvr*:bd*:svnAcer:pnX123*:* |
| KEYBOARD_KEY_a2=wlan |
| |
| # /etc/udev/hwdb.d/70-keyboard.hwdb |
| # disable wlan key on all at keyboards |
| evdev:atkbd:* |
| KEYBOARD_KEY_a2=reserved |
| PROPERTY_WITH_SPACES=some string</programlisting> |
| |
| <para>If the hwdb consists of those two files, a keyboard with the lookup string |
| <literal>evdev:atkbd:dmi:bvnAcer:bdXXXXX:bd08/05/2010:svnAcer:pnX123</literal> |
| will match all three records, and end up with the following properties:</para> |
| |
| <programlisting>KEYBOARD_KEY_a1=help |
| KEYBOARD_KEY_a2=reserved |
| KEYBOARD_KEY_a3=battery |
| PROPERTY_WITH_SPACES=some string</programlisting> |
| |
| </example> |
| </refsect1> |
| |
| <refsect1> |
| <title>See Also</title> |
| <para> |
| <citerefentry> |
| <refentrytitle>systemd-hwdb</refentrytitle><manvolnum>8</manvolnum> |
| </citerefentry> |
| </para> |
| </refsect1> |
| </refentry> |