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