199ca880aSopenharmony_ci<?xml version='1.0'?> <!--*- Mode: nxml; nxml-child-indent: 2; indent-tabs-mode: nil -*-->
299ca880aSopenharmony_ci<?xml-stylesheet type="text/xsl" href="http://docbook.sourceforge.net/release/xsl/current/xhtml/docbook.xsl"?>
399ca880aSopenharmony_ci<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
499ca880aSopenharmony_ci  "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
599ca880aSopenharmony_ci
699ca880aSopenharmony_ci<refentry id="udev">
799ca880aSopenharmony_ci  <refentryinfo>
899ca880aSopenharmony_ci    <title>udev</title>
999ca880aSopenharmony_ci    <productname>udev</productname>
1099ca880aSopenharmony_ci    <authorgroup>
1199ca880aSopenharmony_ci      <author>
1299ca880aSopenharmony_ci        <contrib>Developer</contrib>
1399ca880aSopenharmony_ci        <firstname>Greg</firstname>
1499ca880aSopenharmony_ci        <surname>Kroah-Hartmann</surname>
1599ca880aSopenharmony_ci        <email>greg@kroah.com</email>
1699ca880aSopenharmony_ci      </author>
1799ca880aSopenharmony_ci      <author>
1899ca880aSopenharmony_ci        <contrib>Developer</contrib>
1999ca880aSopenharmony_ci        <firstname>Kay</firstname>
2099ca880aSopenharmony_ci        <surname>Sievers</surname>
2199ca880aSopenharmony_ci        <email>kay@vrfy.org</email>
2299ca880aSopenharmony_ci      </author>
2399ca880aSopenharmony_ci    </authorgroup>
2499ca880aSopenharmony_ci  </refentryinfo>
2599ca880aSopenharmony_ci
2699ca880aSopenharmony_ci  <refmeta>
2799ca880aSopenharmony_ci    <refentrytitle>udev</refentrytitle>
2899ca880aSopenharmony_ci    <manvolnum>7</manvolnum>
2999ca880aSopenharmony_ci  </refmeta>
3099ca880aSopenharmony_ci
3199ca880aSopenharmony_ci  <refnamediv>
3299ca880aSopenharmony_ci    <refname>udev</refname>
3399ca880aSopenharmony_ci    <refpurpose>Dynamic device management</refpurpose>
3499ca880aSopenharmony_ci  </refnamediv>
3599ca880aSopenharmony_ci
3699ca880aSopenharmony_ci  <refsect1><title>Description</title>
3799ca880aSopenharmony_ci    <para>udev supplies the system software with device events, manages permissions
3899ca880aSopenharmony_ci    of device nodes and may create additional symlinks in the <filename>/dev</filename>
3999ca880aSopenharmony_ci    directory, or renames network interfaces. The kernel usually just assigns unpredictable
4099ca880aSopenharmony_ci    device names based on the order of discovery. Meaningful symlinks or network device
4199ca880aSopenharmony_ci    names provide a way to reliably identify devices based on their properties or
4299ca880aSopenharmony_ci    current configuration.</para>
4399ca880aSopenharmony_ci
4499ca880aSopenharmony_ci    <para>The udev daemon, <citerefentry><refentrytitle>udevd</refentrytitle>
4599ca880aSopenharmony_ci    <manvolnum>8</manvolnum></citerefentry>, receives device uevents directly from
4699ca880aSopenharmony_ci    the kernel whenever a device is added or removed from the system, or it changes its
4799ca880aSopenharmony_ci    state. When udev receives a device event, it matches its configured set of rules
4899ca880aSopenharmony_ci    against various device attributes to identify the device. Rules that match may
4999ca880aSopenharmony_ci    provide additional device information to be stored in the udev database or
5099ca880aSopenharmony_ci    to be used to create meaningful symlink names.</para>
5199ca880aSopenharmony_ci
5299ca880aSopenharmony_ci    <para>All device information udev processes is stored in the udev database and
5399ca880aSopenharmony_ci    sent out to possible event subscribers. Access to all stored data and the event
5499ca880aSopenharmony_ci    sources is provided by the library libudev.</para>
5599ca880aSopenharmony_ci  </refsect1>
5699ca880aSopenharmony_ci
5799ca880aSopenharmony_ci  <refsect1><title>Rules Files</title>
5899ca880aSopenharmony_ci      <para>The udev rules are read from the files located in the
5999ca880aSopenharmony_ci      system rules directory <filename>/lib/udev/rules.d</filename>,
6099ca880aSopenharmony_ci      the volatile runtime directory <filename>/run/udev/rules.d</filename>
6199ca880aSopenharmony_ci      and the local administration directory <filename>/etc/udev/rules.d</filename>.
6299ca880aSopenharmony_ci      All rules files are collectively sorted and processed in lexical order,
6399ca880aSopenharmony_ci      regardless of the directories in which they live. However, files with
6499ca880aSopenharmony_ci      identical filenames replace each other. Files in <filename>/etc</filename>
6599ca880aSopenharmony_ci      have the highest priority, files in <filename>/run</filename> take precedence
6699ca880aSopenharmony_ci      over files with the same name in <filename>/lib</filename>. This can be
6799ca880aSopenharmony_ci      used to override a system-supplied rules file with a local file if needed;
6899ca880aSopenharmony_ci      a symlink in <filename>/etc</filename> with the same name as a rules file in
6999ca880aSopenharmony_ci      <filename>/lib</filename>, pointing to <filename>/dev/null</filename>,
7099ca880aSopenharmony_ci      disables the rules file entirely. Rule files must have the extension
7199ca880aSopenharmony_ci      <filename>.rules</filename>; other extensions are ignored.</para>
7299ca880aSopenharmony_ci
7399ca880aSopenharmony_ci      <para>Every line in the rules file contains at least one key-value pair.
7499ca880aSopenharmony_ci      Except for empty lines or lines beginning with <literal>#</literal>, which are ignored.
7599ca880aSopenharmony_ci      There are two kinds of keys: match and assignment.
7699ca880aSopenharmony_ci      If all match keys match against their values, the rule gets applied and the
7799ca880aSopenharmony_ci      assignment keys get the specified values assigned.</para>
7899ca880aSopenharmony_ci
7999ca880aSopenharmony_ci      <para>A matching rule may rename a network interface, add symlinks
8099ca880aSopenharmony_ci      pointing to the device node, or run a specified program as part of
8199ca880aSopenharmony_ci      the event handling.</para>
8299ca880aSopenharmony_ci
8399ca880aSopenharmony_ci      <para>A rule consists of a comma-separated list of one or more key-value pairs.
8499ca880aSopenharmony_ci      Each key has a distinct operation, depending on the used operator. Valid
8599ca880aSopenharmony_ci      operators are:</para>
8699ca880aSopenharmony_ci      <variablelist>
8799ca880aSopenharmony_ci        <varlistentry>
8899ca880aSopenharmony_ci          <term><literal>==</literal></term>
8999ca880aSopenharmony_ci          <listitem>
9099ca880aSopenharmony_ci            <para>Compare for equality.</para>
9199ca880aSopenharmony_ci          </listitem>
9299ca880aSopenharmony_ci        </varlistentry>
9399ca880aSopenharmony_ci
9499ca880aSopenharmony_ci        <varlistentry>
9599ca880aSopenharmony_ci          <term><literal>!=</literal></term>
9699ca880aSopenharmony_ci          <listitem>
9799ca880aSopenharmony_ci            <para>Compare for inequality.</para>
9899ca880aSopenharmony_ci          </listitem>
9999ca880aSopenharmony_ci        </varlistentry>
10099ca880aSopenharmony_ci
10199ca880aSopenharmony_ci        <varlistentry>
10299ca880aSopenharmony_ci          <term><literal>=</literal></term>
10399ca880aSopenharmony_ci          <listitem>
10499ca880aSopenharmony_ci            <para>Assign a value to a key. Keys that represent a list are reset
10599ca880aSopenharmony_ci            and only this single value is assigned.</para>
10699ca880aSopenharmony_ci          </listitem>
10799ca880aSopenharmony_ci        </varlistentry>
10899ca880aSopenharmony_ci
10999ca880aSopenharmony_ci        <varlistentry>
11099ca880aSopenharmony_ci          <term><literal>+=</literal></term>
11199ca880aSopenharmony_ci          <listitem>
11299ca880aSopenharmony_ci            <para>Add the value to a key that holds a list of entries.</para>
11399ca880aSopenharmony_ci          </listitem>
11499ca880aSopenharmony_ci        </varlistentry>
11599ca880aSopenharmony_ci
11699ca880aSopenharmony_ci        <varlistentry>
11799ca880aSopenharmony_ci          <term><literal>-=</literal></term>
11899ca880aSopenharmony_ci          <listitem>
11999ca880aSopenharmony_ci            <para>Remove the value from a key that holds a list of entries.</para>
12099ca880aSopenharmony_ci          </listitem>
12199ca880aSopenharmony_ci        </varlistentry>
12299ca880aSopenharmony_ci
12399ca880aSopenharmony_ci        <varlistentry>
12499ca880aSopenharmony_ci          <term><literal>:=</literal></term>
12599ca880aSopenharmony_ci          <listitem>
12699ca880aSopenharmony_ci            <para>Assign  a  value  to  a key finally; disallow any later changes.</para>
12799ca880aSopenharmony_ci          </listitem>
12899ca880aSopenharmony_ci        </varlistentry>
12999ca880aSopenharmony_ci      </variablelist>
13099ca880aSopenharmony_ci
13199ca880aSopenharmony_ci      <para>The following key names can be used to match against device properties.
13299ca880aSopenharmony_ci      Some of the keys also match against properties of the parent devices in sysfs,
13399ca880aSopenharmony_ci      not only the device that has generated the event. If multiple keys that match
13499ca880aSopenharmony_ci      a parent device are specified in a single rule, all these keys must match at
13599ca880aSopenharmony_ci      one and the same parent device.</para>
13699ca880aSopenharmony_ci      <variablelist class='udev-directives'>
13799ca880aSopenharmony_ci        <varlistentry>
13899ca880aSopenharmony_ci          <term><varname>ACTION</varname></term>
13999ca880aSopenharmony_ci          <listitem>
14099ca880aSopenharmony_ci            <para>Match the name of the event action.</para>
14199ca880aSopenharmony_ci          </listitem>
14299ca880aSopenharmony_ci        </varlistentry>
14399ca880aSopenharmony_ci
14499ca880aSopenharmony_ci        <varlistentry>
14599ca880aSopenharmony_ci          <term><varname>DEVPATH</varname></term>
14699ca880aSopenharmony_ci          <listitem>
14799ca880aSopenharmony_ci            <para>Match the devpath of the event device.</para>
14899ca880aSopenharmony_ci          </listitem>
14999ca880aSopenharmony_ci        </varlistentry>
15099ca880aSopenharmony_ci
15199ca880aSopenharmony_ci        <varlistentry>
15299ca880aSopenharmony_ci          <term><varname>KERNEL</varname></term>
15399ca880aSopenharmony_ci          <listitem>
15499ca880aSopenharmony_ci            <para>Match the name of the event device.</para>
15599ca880aSopenharmony_ci          </listitem>
15699ca880aSopenharmony_ci        </varlistentry>
15799ca880aSopenharmony_ci
15899ca880aSopenharmony_ci        <varlistentry>
15999ca880aSopenharmony_ci          <term><varname>NAME</varname></term>
16099ca880aSopenharmony_ci          <listitem>
16199ca880aSopenharmony_ci            <para>Match the name of a network interface. It can be used once the
16299ca880aSopenharmony_ci            NAME key has been set in one of the preceding rules.</para>
16399ca880aSopenharmony_ci          </listitem>
16499ca880aSopenharmony_ci        </varlistentry>
16599ca880aSopenharmony_ci
16699ca880aSopenharmony_ci        <varlistentry>
16799ca880aSopenharmony_ci          <term><varname>SYMLINK</varname></term>
16899ca880aSopenharmony_ci          <listitem>
16999ca880aSopenharmony_ci            <para>Match the name of a symlink targeting the node. It can
17099ca880aSopenharmony_ci            be used once a SYMLINK key has been set in one of the preceding
17199ca880aSopenharmony_ci            rules. There may be multiple symlinks; only one needs to match.
17299ca880aSopenharmony_ci            </para>
17399ca880aSopenharmony_ci          </listitem>
17499ca880aSopenharmony_ci        </varlistentry>
17599ca880aSopenharmony_ci
17699ca880aSopenharmony_ci        <varlistentry>
17799ca880aSopenharmony_ci          <term><varname>SUBSYSTEM</varname></term>
17899ca880aSopenharmony_ci          <listitem>
17999ca880aSopenharmony_ci            <para>Match the subsystem of the event device.</para>
18099ca880aSopenharmony_ci          </listitem>
18199ca880aSopenharmony_ci        </varlistentry>
18299ca880aSopenharmony_ci        <varlistentry>
18399ca880aSopenharmony_ci          <term><varname>DRIVER</varname></term>
18499ca880aSopenharmony_ci          <listitem>
18599ca880aSopenharmony_ci            <para>Match the driver name of the event device. Only set this key for devices
18699ca880aSopenharmony_ci            which are bound to a driver at the time the event is generated.</para>
18799ca880aSopenharmony_ci          </listitem>
18899ca880aSopenharmony_ci        </varlistentry>
18999ca880aSopenharmony_ci        <varlistentry>
19099ca880aSopenharmony_ci          <term><varname>ATTR{<replaceable>filename</replaceable>}</varname></term>
19199ca880aSopenharmony_ci          <listitem>
19299ca880aSopenharmony_ci            <para>Match sysfs attribute values of the event device. Trailing
19399ca880aSopenharmony_ci            whitespace in the attribute values is ignored unless the specified match
19499ca880aSopenharmony_ci            value itself contains trailing whitespace.
19599ca880aSopenharmony_ci            </para>
19699ca880aSopenharmony_ci          </listitem>
19799ca880aSopenharmony_ci          <term><varname>SYSCTL{<replaceable>kernel parameter</replaceable>}</varname></term>
19899ca880aSopenharmony_ci          <listitem>
19999ca880aSopenharmony_ci            <para>Match a kernel parameter value.
20099ca880aSopenharmony_ci            </para>
20199ca880aSopenharmony_ci          </listitem>
20299ca880aSopenharmony_ci        </varlistentry>
20399ca880aSopenharmony_ci
20499ca880aSopenharmony_ci        <varlistentry>
20599ca880aSopenharmony_ci          <term><varname>KERNELS</varname></term>
20699ca880aSopenharmony_ci          <listitem>
20799ca880aSopenharmony_ci            <para>Search the devpath upwards for a matching device name.</para>
20899ca880aSopenharmony_ci          </listitem>
20999ca880aSopenharmony_ci        </varlistentry>
21099ca880aSopenharmony_ci
21199ca880aSopenharmony_ci        <varlistentry>
21299ca880aSopenharmony_ci          <term><varname>SUBSYSTEMS</varname></term>
21399ca880aSopenharmony_ci          <listitem>
21499ca880aSopenharmony_ci            <para>Search the devpath upwards for a matching device subsystem name.</para>
21599ca880aSopenharmony_ci          </listitem>
21699ca880aSopenharmony_ci        </varlistentry>
21799ca880aSopenharmony_ci
21899ca880aSopenharmony_ci        <varlistentry>
21999ca880aSopenharmony_ci          <term><varname>DRIVERS</varname></term>
22099ca880aSopenharmony_ci          <listitem>
22199ca880aSopenharmony_ci            <para>Search the devpath upwards for a matching device driver name.</para>
22299ca880aSopenharmony_ci          </listitem>
22399ca880aSopenharmony_ci        </varlistentry>
22499ca880aSopenharmony_ci
22599ca880aSopenharmony_ci        <varlistentry>
22699ca880aSopenharmony_ci          <term><varname>ATTRS{<replaceable>filename</replaceable>}</varname></term>
22799ca880aSopenharmony_ci          <listitem>
22899ca880aSopenharmony_ci            <para>Search the devpath upwards for a device with matching sysfs attribute values.
22999ca880aSopenharmony_ci            If multiple <varname>ATTRS</varname> matches are specified, all of them
23099ca880aSopenharmony_ci            must match on the same device. Trailing whitespace in the attribute values is ignored
23199ca880aSopenharmony_ci            unless the specified match value itself contains trailing whitespace.</para>
23299ca880aSopenharmony_ci          </listitem>
23399ca880aSopenharmony_ci        </varlistentry>
23499ca880aSopenharmony_ci
23599ca880aSopenharmony_ci        <varlistentry>
23699ca880aSopenharmony_ci          <term><varname>TAGS</varname></term>
23799ca880aSopenharmony_ci          <listitem>
23899ca880aSopenharmony_ci            <para>Search the devpath upwards for a device with matching tag.</para>
23999ca880aSopenharmony_ci          </listitem>
24099ca880aSopenharmony_ci        </varlistentry>
24199ca880aSopenharmony_ci
24299ca880aSopenharmony_ci        <varlistentry>
24399ca880aSopenharmony_ci          <term><varname>ENV{<replaceable>key</replaceable>}</varname></term>
24499ca880aSopenharmony_ci          <listitem>
24599ca880aSopenharmony_ci            <para>Match against a device property value.</para>
24699ca880aSopenharmony_ci          </listitem>
24799ca880aSopenharmony_ci        </varlistentry>
24899ca880aSopenharmony_ci
24999ca880aSopenharmony_ci        <varlistentry>
25099ca880aSopenharmony_ci          <term><varname>TAG</varname></term>
25199ca880aSopenharmony_ci          <listitem>
25299ca880aSopenharmony_ci            <para>Match against a device tag.</para>
25399ca880aSopenharmony_ci          </listitem>
25499ca880aSopenharmony_ci        </varlistentry>
25599ca880aSopenharmony_ci
25699ca880aSopenharmony_ci        <varlistentry>
25799ca880aSopenharmony_ci          <term><varname>TEST{<replaceable>octal mode mask</replaceable>}</varname></term>
25899ca880aSopenharmony_ci          <listitem>
25999ca880aSopenharmony_ci            <para>Test the existence of a file. An octal mode mask can be specified
26099ca880aSopenharmony_ci            if needed.</para>
26199ca880aSopenharmony_ci          </listitem>
26299ca880aSopenharmony_ci        </varlistentry>
26399ca880aSopenharmony_ci
26499ca880aSopenharmony_ci        <varlistentry>
26599ca880aSopenharmony_ci          <term><varname>PROGRAM</varname></term>
26699ca880aSopenharmony_ci          <listitem>
26799ca880aSopenharmony_ci            <para>Execute a program to determine whether there
26899ca880aSopenharmony_ci            is a match; the key is true if the program returns
26999ca880aSopenharmony_ci            successfully. The device properties are made available to the
27099ca880aSopenharmony_ci            executed program in the environment. The program's standard output
27199ca880aSopenharmony_ci            is available in the <varname>RESULT</varname> key.</para>
27299ca880aSopenharmony_ci            <para>This can only be used for very short-running foreground tasks. For details,
27399ca880aSopenharmony_ci            see <varname>RUN</varname>.</para>
27499ca880aSopenharmony_ci          </listitem>
27599ca880aSopenharmony_ci        </varlistentry>
27699ca880aSopenharmony_ci
27799ca880aSopenharmony_ci        <varlistentry>
27899ca880aSopenharmony_ci          <term><varname>RESULT</varname></term>
27999ca880aSopenharmony_ci          <listitem>
28099ca880aSopenharmony_ci            <para>Match the returned string of the last <varname>PROGRAM</varname> call.
28199ca880aSopenharmony_ci            This key can be used in the same or in any later rule after a
28299ca880aSopenharmony_ci            <varname>PROGRAM</varname> call.</para>
28399ca880aSopenharmony_ci          </listitem>
28499ca880aSopenharmony_ci        </varlistentry>
28599ca880aSopenharmony_ci      </variablelist>
28699ca880aSopenharmony_ci
28799ca880aSopenharmony_ci      <para>Most of the fields support shell glob pattern matching and
28899ca880aSopenharmony_ci      alternate patterns. The following special characters are supported:</para>
28999ca880aSopenharmony_ci      <variablelist>
29099ca880aSopenharmony_ci        <varlistentry>
29199ca880aSopenharmony_ci          <term><literal>*</literal></term>
29299ca880aSopenharmony_ci          <listitem>
29399ca880aSopenharmony_ci            <para>Matches zero or more characters.</para>
29499ca880aSopenharmony_ci          </listitem>
29599ca880aSopenharmony_ci        </varlistentry>
29699ca880aSopenharmony_ci        <varlistentry>
29799ca880aSopenharmony_ci          <term><literal>?</literal></term>
29899ca880aSopenharmony_ci          <listitem>
29999ca880aSopenharmony_ci            <para>Matches any single character.</para>
30099ca880aSopenharmony_ci          </listitem>
30199ca880aSopenharmony_ci        </varlistentry>
30299ca880aSopenharmony_ci        <varlistentry>
30399ca880aSopenharmony_ci          <term><literal>[]</literal></term>
30499ca880aSopenharmony_ci          <listitem>
30599ca880aSopenharmony_ci            <para>Matches any single character specified within the brackets. For
30699ca880aSopenharmony_ci            example, the pattern string <literal>tty[SR]</literal>
30799ca880aSopenharmony_ci            would match either <literal>ttyS</literal> or <literal>ttyR</literal>.
30899ca880aSopenharmony_ci            Ranges are also supported via the <literal>-</literal> character.
30999ca880aSopenharmony_ci            For example, to match on the range of all digits, the pattern
31099ca880aSopenharmony_ci            <literal>[0-9]</literal> could be used. If the first character
31199ca880aSopenharmony_ci            following the <literal>[</literal> is a <literal>!</literal>,
31299ca880aSopenharmony_ci            any characters not enclosed are matched.</para>
31399ca880aSopenharmony_ci          </listitem>
31499ca880aSopenharmony_ci        </varlistentry>
31599ca880aSopenharmony_ci        <varlistentry>
31699ca880aSopenharmony_ci          <term><literal>|</literal></term>
31799ca880aSopenharmony_ci          <listitem>
31899ca880aSopenharmony_ci            <para>Separates alternative patterns. For example, the pattern string
31999ca880aSopenharmony_ci            <literal>abc|x*</literal> would match either <literal>abc</literal>
32099ca880aSopenharmony_ci            or <literal>x*</literal>.</para>
32199ca880aSopenharmony_ci          </listitem>
32299ca880aSopenharmony_ci        </varlistentry>
32399ca880aSopenharmony_ci      </variablelist>
32499ca880aSopenharmony_ci
32599ca880aSopenharmony_ci      <para>The following keys can get values assigned:</para>
32699ca880aSopenharmony_ci      <variablelist class='udev-directives'>
32799ca880aSopenharmony_ci        <varlistentry>
32899ca880aSopenharmony_ci          <term><varname>NAME</varname></term>
32999ca880aSopenharmony_ci          <listitem>
33099ca880aSopenharmony_ci            <para>The name to use for a network interface. The name of a device node
33199ca880aSopenharmony_ci            cannot be changed by udev, only additional symlinks can be created.</para>
33299ca880aSopenharmony_ci          </listitem>
33399ca880aSopenharmony_ci        </varlistentry>
33499ca880aSopenharmony_ci
33599ca880aSopenharmony_ci        <varlistentry>
33699ca880aSopenharmony_ci          <term><varname>SYMLINK</varname></term>
33799ca880aSopenharmony_ci          <listitem>
33899ca880aSopenharmony_ci            <para>The name of a symlink targeting the node. Every matching rule adds
33999ca880aSopenharmony_ci            this value to the list of symlinks to be created.</para>
34099ca880aSopenharmony_ci            <para>The set of characters to name a symlink is limited. Allowed
34199ca880aSopenharmony_ci            characters are <literal>0-9A-Za-z#+-.:=@_/</literal>, valid UTF-8 character
34299ca880aSopenharmony_ci            sequences, and <literal>\x00</literal> hex encoding. All other
34399ca880aSopenharmony_ci            characters are replaced by a <literal>_</literal> character.</para>
34499ca880aSopenharmony_ci            <para>Multiple symlinks may be specified by separating the names by the
34599ca880aSopenharmony_ci            space character. In case multiple devices claim the same name, the link
34699ca880aSopenharmony_ci            always points to the device with the highest link_priority. If the current
34799ca880aSopenharmony_ci            device goes away, the links are re-evaluated and the device with the
34899ca880aSopenharmony_ci            next highest link_priority becomes the owner of the link. If no
34999ca880aSopenharmony_ci            link_priority is specified, the order of the devices (and which one of
35099ca880aSopenharmony_ci            them owns the link) is undefined.</para>
35199ca880aSopenharmony_ci            <para>Symlink names must never conflict with the kernel's default device
35299ca880aSopenharmony_ci            node names, as that would result in unpredictable behavior.
35399ca880aSopenharmony_ci            </para>
35499ca880aSopenharmony_ci          </listitem>
35599ca880aSopenharmony_ci        </varlistentry>
35699ca880aSopenharmony_ci
35799ca880aSopenharmony_ci        <varlistentry>
35899ca880aSopenharmony_ci          <term><varname>OWNER</varname>, <varname>GROUP</varname>, <varname>MODE</varname></term>
35999ca880aSopenharmony_ci          <listitem>
36099ca880aSopenharmony_ci            <para>The permissions for the device node. Every specified value overrides
36199ca880aSopenharmony_ci            the compiled-in default value.</para>
36299ca880aSopenharmony_ci          </listitem>
36399ca880aSopenharmony_ci        </varlistentry>
36499ca880aSopenharmony_ci
36599ca880aSopenharmony_ci        <varlistentry>
36699ca880aSopenharmony_ci          <term><varname>SECLABEL{<replaceable>module</replaceable>}</varname></term>
36799ca880aSopenharmony_ci          <listitem>
36899ca880aSopenharmony_ci            <para>Applies the specified Linux Security Module label to the device node.</para>
36999ca880aSopenharmony_ci          </listitem>
37099ca880aSopenharmony_ci        </varlistentry>
37199ca880aSopenharmony_ci
37299ca880aSopenharmony_ci        <varlistentry>
37399ca880aSopenharmony_ci          <term><varname>ATTR{<replaceable>key</replaceable>}</varname></term>
37499ca880aSopenharmony_ci          <listitem>
37599ca880aSopenharmony_ci            <para>The value that should be written to a sysfs attribute of the
37699ca880aSopenharmony_ci            event device.</para>
37799ca880aSopenharmony_ci          </listitem>
37899ca880aSopenharmony_ci        </varlistentry>
37999ca880aSopenharmony_ci
38099ca880aSopenharmony_ci        <varlistentry>
38199ca880aSopenharmony_ci          <term><varname>SYSCTL{<replaceable>kernel parameter</replaceable>}</varname></term>
38299ca880aSopenharmony_ci          <listitem>
38399ca880aSopenharmony_ci            <para>The value that should be written to kernel parameter.</para>
38499ca880aSopenharmony_ci          </listitem>
38599ca880aSopenharmony_ci        </varlistentry>
38699ca880aSopenharmony_ci
38799ca880aSopenharmony_ci        <varlistentry>
38899ca880aSopenharmony_ci          <term><varname>ENV{<replaceable>key</replaceable>}</varname></term>
38999ca880aSopenharmony_ci          <listitem>
39099ca880aSopenharmony_ci            <para>Set a device property value. Property names with a leading <literal>.</literal>
39199ca880aSopenharmony_ci            are neither stored in the database nor exported to events or
39299ca880aSopenharmony_ci            external tools (run by, for example, the <varname>PROGRAM</varname>
39399ca880aSopenharmony_ci            match key).</para>
39499ca880aSopenharmony_ci          </listitem>
39599ca880aSopenharmony_ci        </varlistentry>
39699ca880aSopenharmony_ci
39799ca880aSopenharmony_ci        <varlistentry>
39899ca880aSopenharmony_ci          <term><varname>TAG</varname></term>
39999ca880aSopenharmony_ci          <listitem>
40099ca880aSopenharmony_ci            <para>Attach a tag to a device. This is used to filter events for users
40199ca880aSopenharmony_ci            of libudev's monitor functionality, or to enumerate a group of tagged
40299ca880aSopenharmony_ci            devices. The implementation can only work efficiently if only a few
40399ca880aSopenharmony_ci            tags are attached to a device. It is only meant to be used in
40499ca880aSopenharmony_ci            contexts with specific device filter requirements, and not as a
40599ca880aSopenharmony_ci            general-purpose flag. Excessive use might result in inefficient event
40699ca880aSopenharmony_ci            handling.</para>
40799ca880aSopenharmony_ci          </listitem>
40899ca880aSopenharmony_ci        </varlistentry>
40999ca880aSopenharmony_ci
41099ca880aSopenharmony_ci        <varlistentry>
41199ca880aSopenharmony_ci          <term><varname>RUN{<replaceable>type</replaceable>}</varname></term>
41299ca880aSopenharmony_ci          <listitem>
41399ca880aSopenharmony_ci            <para>Add a program to the list of programs to be executed after
41499ca880aSopenharmony_ci            processing all the rules for a specific event, depending on
41599ca880aSopenharmony_ci            <literal>type</literal>:</para>
41699ca880aSopenharmony_ci            <variablelist>
41799ca880aSopenharmony_ci              <varlistentry>
41899ca880aSopenharmony_ci                <term><literal>program</literal></term>
41999ca880aSopenharmony_ci                <listitem>
42099ca880aSopenharmony_ci                  <para>Execute an external program specified as the assigned
42199ca880aSopenharmony_ci                  value. If no absolute path is given, the program is expected
42299ca880aSopenharmony_ci                  to live in <filename>/lib/udev</filename>, otherwise, the
42399ca880aSopenharmony_ci                  absolute path must be specified.</para>
42499ca880aSopenharmony_ci                  <para>This is the default if no <replaceable>type</replaceable>
42599ca880aSopenharmony_ci                  is specified.</para>
42699ca880aSopenharmony_ci                </listitem>
42799ca880aSopenharmony_ci              </varlistentry>
42899ca880aSopenharmony_ci              <varlistentry>
42999ca880aSopenharmony_ci                <term><literal>builtin</literal></term>
43099ca880aSopenharmony_ci                <listitem>
43199ca880aSopenharmony_ci                  <para>As <varname>program</varname>, but use one of the
43299ca880aSopenharmony_ci                  built-in programs rather than an external one.</para>
43399ca880aSopenharmony_ci                </listitem>
43499ca880aSopenharmony_ci              </varlistentry>
43599ca880aSopenharmony_ci            </variablelist>
43699ca880aSopenharmony_ci            <para>The program name and following arguments are separated by spaces.
43799ca880aSopenharmony_ci            Single quotes can be used to specify arguments with spaces.</para>
43899ca880aSopenharmony_ci            <para>This can only be used for very short-running foreground tasks. Running an
43999ca880aSopenharmony_ci            event process for a long period of time may block all further events for
44099ca880aSopenharmony_ci            this or a dependent device.</para>
44199ca880aSopenharmony_ci            <para>Starting daemons or other long-running processes is not appropriate
44299ca880aSopenharmony_ci            for udev; the forked processes, detached or not, will be unconditionally
44399ca880aSopenharmony_ci            killed after the event handling has finished.</para>
44499ca880aSopenharmony_ci          </listitem>
44599ca880aSopenharmony_ci        </varlistentry>
44699ca880aSopenharmony_ci
44799ca880aSopenharmony_ci        <varlistentry>
44899ca880aSopenharmony_ci          <term><varname>LABEL</varname></term>
44999ca880aSopenharmony_ci          <listitem>
45099ca880aSopenharmony_ci            <para>A named label to which a <varname>GOTO</varname> may jump.</para>
45199ca880aSopenharmony_ci          </listitem>
45299ca880aSopenharmony_ci        </varlistentry>
45399ca880aSopenharmony_ci
45499ca880aSopenharmony_ci        <varlistentry>
45599ca880aSopenharmony_ci          <term><varname>GOTO</varname></term>
45699ca880aSopenharmony_ci          <listitem>
45799ca880aSopenharmony_ci            <para>Jumps to the next <varname>LABEL</varname> with a matching name.</para>
45899ca880aSopenharmony_ci          </listitem>
45999ca880aSopenharmony_ci        </varlistentry>
46099ca880aSopenharmony_ci
46199ca880aSopenharmony_ci        <varlistentry>
46299ca880aSopenharmony_ci          <term><varname>IMPORT{<replaceable>type</replaceable>}</varname></term>
46399ca880aSopenharmony_ci          <listitem>
46499ca880aSopenharmony_ci            <para>Import a set of variables as device properties,
46599ca880aSopenharmony_ci            depending on <literal>type</literal>:</para>
46699ca880aSopenharmony_ci            <variablelist>
46799ca880aSopenharmony_ci              <varlistentry>
46899ca880aSopenharmony_ci                <term><literal>program</literal></term>
46999ca880aSopenharmony_ci                <listitem>
47099ca880aSopenharmony_ci                  <para>Execute an external program specified as the assigned value and
47199ca880aSopenharmony_ci                  import its output, which must be in environment key
47299ca880aSopenharmony_ci                  format. Path specification, command/argument separation,
47399ca880aSopenharmony_ci                  and quoting work like in <varname>RUN</varname>.</para>
47499ca880aSopenharmony_ci                </listitem>
47599ca880aSopenharmony_ci              </varlistentry>
47699ca880aSopenharmony_ci              <varlistentry>
47799ca880aSopenharmony_ci                <term><literal>builtin</literal></term>
47899ca880aSopenharmony_ci                <listitem>
47999ca880aSopenharmony_ci                  <para>Similar to <literal>program</literal>, but use one of the
48099ca880aSopenharmony_ci                  built-in programs rather than an external one.</para>
48199ca880aSopenharmony_ci                </listitem>
48299ca880aSopenharmony_ci              </varlistentry>
48399ca880aSopenharmony_ci             <varlistentry>
48499ca880aSopenharmony_ci                <term><literal>file</literal></term>
48599ca880aSopenharmony_ci                <listitem>
48699ca880aSopenharmony_ci                  <para>Import a text file specified as the assigned value, the content
48799ca880aSopenharmony_ci                  of which must be in environment key format.</para>
48899ca880aSopenharmony_ci                </listitem>
48999ca880aSopenharmony_ci              </varlistentry>
49099ca880aSopenharmony_ci              <varlistentry>
49199ca880aSopenharmony_ci                <term><literal>db</literal></term>
49299ca880aSopenharmony_ci                <listitem>
49399ca880aSopenharmony_ci                  <para>Import a single property specified as the assigned value from the
49499ca880aSopenharmony_ci                  current device database. This works only if the database is already populated
49599ca880aSopenharmony_ci                  by an earlier event.</para>
49699ca880aSopenharmony_ci                </listitem>
49799ca880aSopenharmony_ci              </varlistentry>
49899ca880aSopenharmony_ci              <varlistentry>
49999ca880aSopenharmony_ci                <term><literal>cmdline</literal></term>
50099ca880aSopenharmony_ci                <listitem>
50199ca880aSopenharmony_ci                  <para>Import a single property from the kernel command line. For simple flags
50299ca880aSopenharmony_ci                  the value of the property is set to <literal>1</literal>.</para>
50399ca880aSopenharmony_ci                </listitem>
50499ca880aSopenharmony_ci              </varlistentry>
50599ca880aSopenharmony_ci              <varlistentry>
50699ca880aSopenharmony_ci                <term><literal>parent</literal></term>
50799ca880aSopenharmony_ci                <listitem>
50899ca880aSopenharmony_ci                  <para>Import the stored keys from the parent device by reading
50999ca880aSopenharmony_ci                  the database entry of the parent device. The value assigned to
51099ca880aSopenharmony_ci                  <option>IMPORT{parent}</option> is used as a filter of key names
51199ca880aSopenharmony_ci                  to import (with the same shell glob pattern matching used for
51299ca880aSopenharmony_ci                  comparisons).</para>
51399ca880aSopenharmony_ci                </listitem>
51499ca880aSopenharmony_ci              </varlistentry>
51599ca880aSopenharmony_ci            </variablelist>
51699ca880aSopenharmony_ci            <para>This can only be used for very short-running foreground tasks. For details
51799ca880aSopenharmony_ci            see <option>RUN</option>.</para>
51899ca880aSopenharmony_ci          </listitem>
51999ca880aSopenharmony_ci        </varlistentry>
52099ca880aSopenharmony_ci
52199ca880aSopenharmony_ci        <varlistentry>
52299ca880aSopenharmony_ci          <term><varname>WAIT_FOR</varname></term>
52399ca880aSopenharmony_ci          <listitem>
52499ca880aSopenharmony_ci            <para>Wait for a file to become available or until a timeout of
52599ca880aSopenharmony_ci            10 seconds expires. The path is relative to the sysfs device;
52699ca880aSopenharmony_ci            if no path is specified, this waits for an attribute to appear.</para>
52799ca880aSopenharmony_ci          </listitem>
52899ca880aSopenharmony_ci        </varlistentry>
52999ca880aSopenharmony_ci
53099ca880aSopenharmony_ci        <varlistentry>
53199ca880aSopenharmony_ci          <term><varname>OPTIONS</varname></term>
53299ca880aSopenharmony_ci          <listitem>
53399ca880aSopenharmony_ci            <para>Rule and device options:</para>
53499ca880aSopenharmony_ci            <variablelist class='udev-directives'>
53599ca880aSopenharmony_ci              <varlistentry>
53699ca880aSopenharmony_ci                <term><option>link_priority=<replaceable>value</replaceable></option></term>
53799ca880aSopenharmony_ci                <listitem>
53899ca880aSopenharmony_ci                  <para>Specify the priority of the created symlinks. Devices with higher
53999ca880aSopenharmony_ci                  priorities overwrite existing symlinks of other devices. The default is 0.</para>
54099ca880aSopenharmony_ci                </listitem>
54199ca880aSopenharmony_ci              </varlistentry>
54299ca880aSopenharmony_ci              <varlistentry>
54399ca880aSopenharmony_ci                <term><option>string_escape=<replaceable>none|replace</replaceable></option></term>
54499ca880aSopenharmony_ci                <listitem>
54599ca880aSopenharmony_ci                  <para>Usually control and other possibly unsafe characters are replaced
54699ca880aSopenharmony_ci                  in strings used for device naming. The mode of replacement can be specified
54799ca880aSopenharmony_ci                  with this option.</para>
54899ca880aSopenharmony_ci                </listitem>
54999ca880aSopenharmony_ci              </varlistentry>
55099ca880aSopenharmony_ci              <varlistentry>
55199ca880aSopenharmony_ci                <term><option>static_node=</option></term>
55299ca880aSopenharmony_ci                <listitem>
55399ca880aSopenharmony_ci                  <para>Apply the permissions specified in this rule to the
55499ca880aSopenharmony_ci                  static device node with the specified name.  Static device node
55599ca880aSopenharmony_ci                  creation can be requested by kernel modules.  These nodes might
55699ca880aSopenharmony_ci                  not have a corresponding kernel device at the time udevd is started;
55799ca880aSopenharmony_ci                  they can trigger automatic kernel module loading.</para>
55899ca880aSopenharmony_ci                </listitem>
55999ca880aSopenharmony_ci              </varlistentry>
56099ca880aSopenharmony_ci              <varlistentry>
56199ca880aSopenharmony_ci                <term><option>watch</option></term>
56299ca880aSopenharmony_ci                <listitem>
56399ca880aSopenharmony_ci                  <para>Watch the device node with inotify; when the node is
56499ca880aSopenharmony_ci                  closed after being opened for writing, a change uevent is
56599ca880aSopenharmony_ci                  synthesized.</para>
56699ca880aSopenharmony_ci                </listitem>
56799ca880aSopenharmony_ci              </varlistentry>
56899ca880aSopenharmony_ci              <varlistentry>
56999ca880aSopenharmony_ci                <term><option>nowatch</option></term>
57099ca880aSopenharmony_ci                <listitem>
57199ca880aSopenharmony_ci                  <para>Disable the watching of a device node with inotify.</para>
57299ca880aSopenharmony_ci                </listitem>
57399ca880aSopenharmony_ci              </varlistentry>
57499ca880aSopenharmony_ci            </variablelist>
57599ca880aSopenharmony_ci          </listitem>
57699ca880aSopenharmony_ci        </varlistentry>
57799ca880aSopenharmony_ci      </variablelist>
57899ca880aSopenharmony_ci
57999ca880aSopenharmony_ci      <para>The <varname>NAME</varname>, <varname>SYMLINK</varname>,
58099ca880aSopenharmony_ci      <varname>PROGRAM</varname>, <varname>OWNER</varname>,
58199ca880aSopenharmony_ci      <varname>GROUP</varname>, <varname>MODE</varname>, and
58299ca880aSopenharmony_ci      <varname>RUN</varname> fields support simple string substitutions.
58399ca880aSopenharmony_ci      The <varname>RUN</varname> substitutions are performed after all rules
58499ca880aSopenharmony_ci      have been processed, right before the program is executed, allowing for
58599ca880aSopenharmony_ci      the use of device properties set by earlier matching rules. For all other
58699ca880aSopenharmony_ci      fields, substitutions are performed while the individual rule is being
58799ca880aSopenharmony_ci      processed. The available substitutions are:</para>
58899ca880aSopenharmony_ci      <variablelist class='udev-directives'>
58999ca880aSopenharmony_ci        <varlistentry>
59099ca880aSopenharmony_ci          <term><option>$kernel</option>, <option>%k</option></term>
59199ca880aSopenharmony_ci          <listitem>
59299ca880aSopenharmony_ci            <para>The kernel name for this device.</para>
59399ca880aSopenharmony_ci          </listitem>
59499ca880aSopenharmony_ci        </varlistentry>
59599ca880aSopenharmony_ci
59699ca880aSopenharmony_ci        <varlistentry>
59799ca880aSopenharmony_ci          <term><option>$number</option>, <option>%n</option></term>
59899ca880aSopenharmony_ci          <listitem>
59999ca880aSopenharmony_ci            <para>The kernel number for this device. For example,
60099ca880aSopenharmony_ci              <literal>sda3</literal> has kernel number <literal>3</literal>.
60199ca880aSopenharmony_ci            </para>
60299ca880aSopenharmony_ci          </listitem>
60399ca880aSopenharmony_ci        </varlistentry>
60499ca880aSopenharmony_ci
60599ca880aSopenharmony_ci        <varlistentry>
60699ca880aSopenharmony_ci          <term><option>$devpath</option>, <option>%p</option></term>
60799ca880aSopenharmony_ci          <listitem>
60899ca880aSopenharmony_ci            <para>The devpath of the device.</para>
60999ca880aSopenharmony_ci          </listitem>
61099ca880aSopenharmony_ci        </varlistentry>
61199ca880aSopenharmony_ci
61299ca880aSopenharmony_ci        <varlistentry>
61399ca880aSopenharmony_ci          <term><option>$id</option>, <option>%b</option></term>
61499ca880aSopenharmony_ci          <listitem>
61599ca880aSopenharmony_ci            <para>The name of the device matched while searching the devpath
61699ca880aSopenharmony_ci              upwards for <option>SUBSYSTEMS</option>, <option>KERNELS</option>,
61799ca880aSopenharmony_ci              <option>DRIVERS</option>, and <option>ATTRS</option>.
61899ca880aSopenharmony_ci            </para>
61999ca880aSopenharmony_ci          </listitem>
62099ca880aSopenharmony_ci        </varlistentry>
62199ca880aSopenharmony_ci
62299ca880aSopenharmony_ci        <varlistentry>
62399ca880aSopenharmony_ci          <term><option>$driver</option></term>
62499ca880aSopenharmony_ci          <listitem>
62599ca880aSopenharmony_ci            <para>The driver name of the device matched while searching the
62699ca880aSopenharmony_ci              devpath upwards for <option>SUBSYSTEMS</option>,
62799ca880aSopenharmony_ci              <option>KERNELS</option>, <option>DRIVERS</option>, and
62899ca880aSopenharmony_ci              <option>ATTRS</option>.
62999ca880aSopenharmony_ci            </para>
63099ca880aSopenharmony_ci          </listitem>
63199ca880aSopenharmony_ci        </varlistentry>
63299ca880aSopenharmony_ci
63399ca880aSopenharmony_ci        <varlistentry>
63499ca880aSopenharmony_ci          <term><option>$attr{<replaceable>file</replaceable>}</option>, <option>%s{<replaceable>file</replaceable>}</option></term>
63599ca880aSopenharmony_ci          <listitem>
63699ca880aSopenharmony_ci            <para>The value of a sysfs attribute found at the device where
63799ca880aSopenharmony_ci              all keys of the rule have matched. If the matching device does not
63899ca880aSopenharmony_ci              have such an attribute, and a previous <option>KERNELS</option>,
63999ca880aSopenharmony_ci              <option>SUBSYSTEMS</option>, <option>DRIVERS</option>, or
64099ca880aSopenharmony_ci              <option>ATTRS</option> test selected a parent device, then the
64199ca880aSopenharmony_ci              attribute from that parent device is used.
64299ca880aSopenharmony_ci            </para>
64399ca880aSopenharmony_ci            <para>If the attribute is a symlink, the last element of the
64499ca880aSopenharmony_ci              symlink target is returned as the value.
64599ca880aSopenharmony_ci            </para>
64699ca880aSopenharmony_ci          </listitem>
64799ca880aSopenharmony_ci        </varlistentry>
64899ca880aSopenharmony_ci
64999ca880aSopenharmony_ci        <varlistentry>
65099ca880aSopenharmony_ci          <term><option>$env{<replaceable>key</replaceable>}</option>, <option>%E{<replaceable>key</replaceable>}</option></term>
65199ca880aSopenharmony_ci          <listitem>
65299ca880aSopenharmony_ci            <para>A device property value.</para>
65399ca880aSopenharmony_ci          </listitem>
65499ca880aSopenharmony_ci        </varlistentry>
65599ca880aSopenharmony_ci
65699ca880aSopenharmony_ci        <varlistentry>
65799ca880aSopenharmony_ci          <term><option>$major</option>, <option>%M</option></term>
65899ca880aSopenharmony_ci          <listitem>
65999ca880aSopenharmony_ci            <para>The kernel major number for the device.</para>
66099ca880aSopenharmony_ci          </listitem>
66199ca880aSopenharmony_ci        </varlistentry>
66299ca880aSopenharmony_ci
66399ca880aSopenharmony_ci        <varlistentry>
66499ca880aSopenharmony_ci          <term><option>$minor</option>, <option>%m</option></term>
66599ca880aSopenharmony_ci          <listitem>
66699ca880aSopenharmony_ci            <para>The kernel minor number for the device.</para>
66799ca880aSopenharmony_ci          </listitem>
66899ca880aSopenharmony_ci        </varlistentry>
66999ca880aSopenharmony_ci
67099ca880aSopenharmony_ci        <varlistentry>
67199ca880aSopenharmony_ci          <term><option>$result</option>, <option>%c</option></term>
67299ca880aSopenharmony_ci          <listitem>
67399ca880aSopenharmony_ci            <para>The string returned by the external program requested with
67499ca880aSopenharmony_ci            <varname>PROGRAM</varname>.
67599ca880aSopenharmony_ci            A single part of the string, separated by a space character, may be selected
67699ca880aSopenharmony_ci            by specifying the part number as an attribute: <literal>%c{N}</literal>.
67799ca880aSopenharmony_ci            If the number is followed by the <literal>+</literal> character, this part plus all remaining parts
67899ca880aSopenharmony_ci            of the result string are substituted: <literal>%c{N+}</literal>.</para>
67999ca880aSopenharmony_ci          </listitem>
68099ca880aSopenharmony_ci        </varlistentry>
68199ca880aSopenharmony_ci
68299ca880aSopenharmony_ci        <varlistentry>
68399ca880aSopenharmony_ci          <term><option>$parent</option>, <option>%P</option></term>
68499ca880aSopenharmony_ci          <listitem>
68599ca880aSopenharmony_ci            <para>The node name of the parent device.</para>
68699ca880aSopenharmony_ci          </listitem>
68799ca880aSopenharmony_ci        </varlistentry>
68899ca880aSopenharmony_ci
68999ca880aSopenharmony_ci        <varlistentry>
69099ca880aSopenharmony_ci          <term><option>$name</option></term>
69199ca880aSopenharmony_ci          <listitem>
69299ca880aSopenharmony_ci            <para>The current name of the device. If not changed by a rule, it is the
69399ca880aSopenharmony_ci            name of the kernel device.</para>
69499ca880aSopenharmony_ci          </listitem>
69599ca880aSopenharmony_ci        </varlistentry>
69699ca880aSopenharmony_ci
69799ca880aSopenharmony_ci        <varlistentry>
69899ca880aSopenharmony_ci          <term><option>$links</option></term>
69999ca880aSopenharmony_ci          <listitem>
70099ca880aSopenharmony_ci            <para>A space-separated list of the current symlinks. The value is
70199ca880aSopenharmony_ci            only set during a remove event or if an earlier rule assigned a value.</para>
70299ca880aSopenharmony_ci          </listitem>
70399ca880aSopenharmony_ci        </varlistentry>
70499ca880aSopenharmony_ci
70599ca880aSopenharmony_ci        <varlistentry>
70699ca880aSopenharmony_ci          <term><option>$sys</option>, <option>%S</option></term>
70799ca880aSopenharmony_ci          <listitem>
70899ca880aSopenharmony_ci            <para>The sysfs mount point.</para>
70999ca880aSopenharmony_ci          </listitem>
71099ca880aSopenharmony_ci        </varlistentry>
71199ca880aSopenharmony_ci
71299ca880aSopenharmony_ci        <varlistentry>
71399ca880aSopenharmony_ci          <term><option>$devnode</option>, <option>%N</option></term>
71499ca880aSopenharmony_ci          <listitem>
71599ca880aSopenharmony_ci            <para>The name of the device node.</para>
71699ca880aSopenharmony_ci          </listitem>
71799ca880aSopenharmony_ci        </varlistentry>
71899ca880aSopenharmony_ci
71999ca880aSopenharmony_ci        <varlistentry>
72099ca880aSopenharmony_ci          <term><option>%%</option></term>
72199ca880aSopenharmony_ci          <listitem>
72299ca880aSopenharmony_ci          <para>The <literal>%</literal> character itself.</para>
72399ca880aSopenharmony_ci          </listitem>
72499ca880aSopenharmony_ci        </varlistentry>
72599ca880aSopenharmony_ci
72699ca880aSopenharmony_ci        <varlistentry>
72799ca880aSopenharmony_ci          <term><option>$$</option></term>
72899ca880aSopenharmony_ci          <listitem>
72999ca880aSopenharmony_ci          <para>The <literal>$</literal> character itself.</para>
73099ca880aSopenharmony_ci          </listitem>
73199ca880aSopenharmony_ci        </varlistentry>
73299ca880aSopenharmony_ci      </variablelist>
73399ca880aSopenharmony_ci  </refsect1>
73499ca880aSopenharmony_ci
73599ca880aSopenharmony_ci  <refsect1><title>Hardware Database Files</title>
73699ca880aSopenharmony_ci      <para>The hwdb files are read from the files located in the
73799ca880aSopenharmony_ci      system hwdb directory <filename>/usr/lib/udev/hwdb.d</filename>,
73899ca880aSopenharmony_ci      the volatile runtime directory <filename>/run/udev/hwdb.d</filename>
73999ca880aSopenharmony_ci      and the local administration directory <filename>/etc/udev/hwdb.d</filename>.
74099ca880aSopenharmony_ci      All hwdb files are collectively sorted and processed in lexical order,
74199ca880aSopenharmony_ci      regardless of the directories in which they live. However, files with
74299ca880aSopenharmony_ci      identical filenames replace each other. Files in <filename>/etc</filename>
74399ca880aSopenharmony_ci      have the highest priority, files in <filename>/run</filename> take precedence
74499ca880aSopenharmony_ci      over files with the same name in <filename>/usr/lib</filename>. This can be
74599ca880aSopenharmony_ci      used to override a system-supplied hwdb file with a local file if needed;
74699ca880aSopenharmony_ci      a symlink in <filename>/etc</filename> with the same name as a hwdb file in
74799ca880aSopenharmony_ci      <filename>/usr/lib</filename>, pointing to <filename>/dev/null</filename>,
74899ca880aSopenharmony_ci      disables the hwdb file entirely. hwdb files must have the extension
74999ca880aSopenharmony_ci      <filename>.hwdb</filename>; other extensions are ignored.</para>
75099ca880aSopenharmony_ci
75199ca880aSopenharmony_ci      <para>The hwdb file contains data records consisting of matches and
75299ca880aSopenharmony_ci      associated key-value pairs. Every record in the hwdb starts with one or
75399ca880aSopenharmony_ci      more match string, specifying a shell glob to compare the database
75499ca880aSopenharmony_ci      lookup string against. Multiple match lines are specified in additional
75599ca880aSopenharmony_ci      consecutive lines. Every match line is compared indivdually, they are
75699ca880aSopenharmony_ci      combined by OR. Every match line must start at the first character of
75799ca880aSopenharmony_ci      the line.</para>
75899ca880aSopenharmony_ci
75999ca880aSopenharmony_ci      <para>The match lines are followed by one or more key-value pair lines, which
76099ca880aSopenharmony_ci      are recognized by a leading space character. The key name and value are separated
76199ca880aSopenharmony_ci      by <literal>=</literal>. An empty line signifies the end
76299ca880aSopenharmony_ci      of a record. Lines beginning with <literal>#</literal> are ignored.</para>
76399ca880aSopenharmony_ci
76499ca880aSopenharmony_ci      <para>The content of all hwdb files is read by
76599ca880aSopenharmony_ci      <citerefentry><refentrytitle>udevadm</refentrytitle><manvolnum>8</manvolnum></citerefentry>
76699ca880aSopenharmony_ci      and compiled to a binary database located at <filename>/etc/udev/hwdb.bin</filename>,
76799ca880aSopenharmony_ci      or alternatively <filename>/usr/lib/udev/hwdb.bin</filename> if you want ship the compiled
76899ca880aSopenharmony_ci      database in an immutable image.
76999ca880aSopenharmony_ci      During runtime only the binary database is used.</para>
77099ca880aSopenharmony_ci  </refsect1>
77199ca880aSopenharmony_ci
77299ca880aSopenharmony_ci  <refsect1>
77399ca880aSopenharmony_ci    <title>See Also</title>
77499ca880aSopenharmony_ci    <para>
77599ca880aSopenharmony_ci      <citerefentry>
77699ca880aSopenharmony_ci        <refentrytitle>udevd</refentrytitle><manvolnum>8</manvolnum>
77799ca880aSopenharmony_ci      </citerefentry>,
77899ca880aSopenharmony_ci      <citerefentry>
77999ca880aSopenharmony_ci        <refentrytitle>udevadm</refentrytitle><manvolnum>8</manvolnum>
78099ca880aSopenharmony_ci    </citerefentry></para>
78199ca880aSopenharmony_ci  </refsect1>
78299ca880aSopenharmony_ci</refentry>
783