blob: de6de98aa65992b3b9450c23072678f86f8c2ac6 [file] [log] [blame]
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>udev</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2"/></head><body><div class="refentry" title="udev"><a id="udev"/><div class="titlepage"/><div class="refnamediv"><h2>Name</h2><p>udev — Linux dynamic device management</p></div><div class="refsect1" title="Description"><a id="id278021"/><h2>Description</h2><p>udev supplies the system software with device events, manages permissions
of device nodes and may create additional symlinks in the <code class="filename">/dev</code>
directory, or renames network interfaces. The kernel usually just assigns unpredictable
device names based on the order of discovery. Meaningful symlinks or network device
names provide a way to reliably identify devices based on their properties or
current configuration.</p><p>The udev daemon <span class="citerefentry"><span class="refentrytitle">udevd</span>(8)</span> receives device uevents directly from
the kernel whenever a device is added or removed from the system, or it changes its
state. When udev receives a device event, it matches its configured set of rules
against various device attributes to identify the device. Rules that match, may
provide additional device information to be stored in the udev database, or information
to be used to create meaningful symlink names.</p><p>All device information udev processes, is stored in the udev database and
sent out to possible event subscribers. Access to all stored data and the event
sources are provided by the library libudev.</p></div><div class="refsect1" title="Configuration"><a id="id310199"/><h2>Configuration</h2><p>udev configuration files are placed in <code class="filename">/etc/udev/</code>
and <code class="filename">/lib/udev/</code>. All empty lines, or lines beginning with
'#' will be ignored.</p><div class="refsect2" title="Configuration file"><a id="id310220"/><h3>Configuration file</h3><p>udev expects its main configuration file at <code class="filename">/etc/udev/udev.conf</code>.
It consists of a set of variables allowing the user to override default udev values.
The following variables can be set:</p><div class="variablelist"><dl><dt><span class="term"><code class="option">udev_root</code></span></dt><dd><p>Specifies where to place the device nodes in the filesystem.
The default value is <code class="filename">/dev</code>.</p></dd><dt><span class="term"><code class="option">udev_log</code></span></dt><dd><p>The logging priority. Valid values are the numerical syslog priorities
or their textual representations: <code class="option">err</code>, <code class="option">info</code>
and <code class="option">debug</code>.</p></dd></dl></div></div><div class="refsect2" title="Rules files"><a id="id310294"/><h3>Rules files</h3><p>The udev rules are read from the files located in the
default rules directory <code class="filename">/lib/udev/rules.d/</code>,
the custom rules directory <code class="filename">/etc/udev/rules.d/</code>
and the temporary rules directory <code class="filename">/dev/.udev/rules.d/</code>.
All rule files are sorted and processed in lexical order, regardless
in which of these directories they live. Files in
<code class="filename">/etc/udev/rules.d/</code> have precedence over files with
the same name in <code class="filename">/lib/udev/rules.d/</code>. This can be
used to ignore a default rules file if needed.</p><p>Rule files must end in <code class="filename">.rules</code>, other extensions
are ignored.</p><p>Every line in the rules file contains at least one key value pair.
There are two kind of keys, match and assignment keys.
If all match keys are matching against its value, the rule gets applied and the
assign keys get the specified value assigned.</p><p>A matching rule may rename a network interface, add symlinks
pointing to the device node, or run a specified program as part of
the event handling.</p><p>A rule consists of a list of one or more key value pairs separated by
a comma. Each key has a distinct operation, depending on the used operator. Valid
operators are:</p><div class="variablelist"><dl><dt><span class="term"><code class="option">==</code></span></dt><dd><p>Compare for equality.</p></dd><dt><span class="term"><code class="option">!=</code></span></dt><dd><p>Compare for inequality.</p></dd><dt><span class="term"><code class="option">=</code></span></dt><dd><p>Assign a value to a key. Keys that represent a list, are reset
and only this single value is assigned.</p></dd><dt><span class="term"><code class="option">+=</code></span></dt><dd><p>Add the value to a key that holds a list of entries.</p></dd><dt><span class="term"><code class="option">:=</code></span></dt><dd><p>Assign a value to a key finally; disallow any later changes,
which may be used to prevent changes by any later rules.</p></dd></dl></div><p>The following key names can be used to match against device properties.
Some of the keys also match against properties of the parent devices in sysfs,
not only the device that has generated the event. If multiple keys that match
a parent device are specified in a single rule, all these keys must match at
one and the same parent device.</p><div class="variablelist"><dl><dt><span class="term"><code class="option">ACTION</code></span></dt><dd><p>Match the name of the event action.</p></dd><dt><span class="term"><code class="option">DEVPATH</code></span></dt><dd><p>Match the devpath of the event device.</p></dd><dt><span class="term"><code class="option">KERNEL</code></span></dt><dd><p>Match the name of the event device.</p></dd><dt><span class="term"><code class="option">NAME</code></span></dt><dd><p>Match the name of the node or network interface. It can
be used once the NAME key has been set in one of the preceding
rules.</p></dd><dt><span class="term"><code class="option">SYMLINK</code></span></dt><dd><p>Match the name of a symlink targeting the node. It can
be used once a SYMLINK key has been set in one of the preceding
rules. There may be multiple symlinks; only one needs to match.
</p></dd><dt><span class="term"><code class="option">SUBSYSTEM</code></span></dt><dd><p>Match the subsystem of the event device.</p></dd><dt><span class="term"><code class="option">DRIVER</code></span></dt><dd><p>Match the driver name of the event device. Only set for devices
which are bound to a driver at the time the event is generated.</p></dd><dt><span class="term"><code class="option">ATTR{<em class="replaceable"><code>filename</code></em>}</code></span></dt><dd><p>Match sysfs attribute values of the event device. Trailing
whitespace in the attribute values is ignored, if the specified match
value does not contain trailing whitespace itself.
</p></dd><dt><span class="term"><code class="option">KERNELS</code></span></dt><dd><p>Search the devpath upwards for a matching device name.</p></dd><dt><span class="term"><code class="option">SUBSYSTEMS</code></span></dt><dd><p>Search the devpath upwards for a matching device subsystem name.</p></dd><dt><span class="term"><code class="option">DRIVERS</code></span></dt><dd><p>Search the devpath upwards for a matching device driver name.</p></dd><dt><span class="term"><code class="option">ATTRS{<em class="replaceable"><code>filename</code></em>}</code></span></dt><dd><p>Search the devpath upwards for a device with matching sysfs attribute values.
If multiple <code class="option">ATTRS</code> matches are specified, all of them
must match on the same device. Trailing whitespace in the attribute values is ignored,
if the specified match value does not contain trailing whitespace itself.</p></dd><dt><span class="term"><code class="option">ENV{<em class="replaceable"><code>key</code></em>}</code></span></dt><dd><p>Match against a device property value.</p></dd><dt><span class="term"><code class="option">TAG</code></span></dt><dd><p>Match against a device tag.</p></dd><dt><span class="term"><code class="option">TEST{<em class="replaceable"><code>octal mode mask</code></em>}</code></span></dt><dd><p>Test the existence of a file. An octal mode mask can be specified
if needed.</p></dd><dt><span class="term"><code class="option">PROGRAM</code></span></dt><dd><p>Execute a program. The key is true, if the program returns
successfully. The device properties are made available to the
executed program in the environment. The program's output printed to
stdout, is available in the RESULT key.</p></dd><dt><span class="term"><code class="option">RESULT</code></span></dt><dd><p>Match the returned string of the last PROGRAM call. This key can
be used in the same or in any later rule after a PROGRAM call.</p></dd></dl></div><p>Most of the fields support a shell style pattern matching. The following
pattern characters are supported:</p><div class="variablelist"><dl><dt><span class="term"><code class="option">*</code></span></dt><dd><p>Matches zero, or any number of characters.</p></dd><dt><span class="term"><code class="option">?</code></span></dt><dd><p>Matches any single character.</p></dd><dt><span class="term"><code class="option">[]</code></span></dt><dd><p>Matches any single character specified within the brackets. For
example, the pattern string 'tty[SR]' would match either 'ttyS' or 'ttyR'.
Ranges are also supported within this match with the '-' character.
For example, to match on the range of all digits, the pattern [0-9] would
be used. If the first character following the '[' is a '!', any characters
not enclosed are matched.</p></dd></dl></div><p>The following keys can get values assigned:</p><div class="variablelist"><dl><dt><span class="term"><code class="option">NAME</code></span></dt><dd><p>The name, a network interface should be renamed to. Or as
a temporary workaround, the name a device node should be named.
Usually the kernel provides the defined node name, or even creates
and removes the node before udev even receives any event. Changing
the node name from the kernel's default creates inconsistencies
and is not supported. If the kernel and NAME specify different names,
an error will be logged. Udev is only expected to handle device node
permissions and to create additional symlinks, not to change
kernel-provided device node names. Instead of renaming a device node,
SYMLINK should be used. Symlink names must never conflict with
device node names, it will result in unpredictable behavior.</p></dd><dt><span class="term"><code class="option">SYMLINK</code></span></dt><dd><p>The name of a symlink targeting the node. Every matching rule will add
this value to the list of symlinks to be created. Multiple symlinks may be
specified by separating the names by the space character. In case multiple
devices claim the same name, the link will always point to the device with
the highest link_priority. If the current device goes away, the links will
be re-evaluated and the device with the next highest link_priority will own
the link. If no link_priority is specified, the order of the devices, and
which one of them will own the link, is undefined. Claiming the same name for
a symlink, which is or might be used for a device node, may result in
unexpected behavior and is not supported.
</p></dd><dt><span class="term"><code class="option">OWNER, GROUP, MODE</code></span></dt><dd><p>The permissions for the device node. Every specified value overwrites
the compiled-in default value.</p></dd><dt><span class="term"><code class="option">ATTR{<em class="replaceable"><code>key</code></em>}</code></span></dt><dd><p>The value that should be written to a sysfs attribute of the
event device.</p></dd><dt><span class="term"><code class="option">ENV{<em class="replaceable"><code>key</code></em>}</code></span></dt><dd><p>Set a device property value. Property names with a leading '.'
are not stored in the database or exported to external tool or events.</p></dd><dt><span class="term"><code class="option">TAG</code></span></dt><dd><p>Attach a tag to a device. This is used to filter events for users
of libudev's monitor functionality, or to enumerate a group of tagged
devices. The implementation can only work efficiently if only a few
tags are attached to a device. It is only meant to be used in
contexts with specific device filter requirements, and not as a
general-purpose flag. Excessive use might result in inefficient event
handling.</p></dd><dt><span class="term"><code class="option">RUN</code></span></dt><dd><p>Add a program to the list of programs to be executed for a specific
device. This can only be used for very short running tasks. Running an
event process for a long period of time may block all further events for
this or a dependent device. Long running tasks need to be immediately
detached from the event process itself. If the option
<code class="option">RUN{<em class="replaceable"><code>fail_event_on_error</code></em>}</code> is
specified, and the executed program returns non-zero, the event will be
marked as failed for a possible later handling.</p><p>If no absolute path is given, the program is expected to live in
<code class="filename">/lib/udev</code>, otherwise the absolute path must be
specified. Program name and arguments are separated by spaces. Single quotes
can be used to specify arguments with spaces.</p></dd><dt><span class="term"><code class="option">LABEL</code></span></dt><dd><p>Named label where a GOTO can jump to.</p></dd><dt><span class="term"><code class="option">GOTO</code></span></dt><dd><p>Jumps to the next LABEL with a matching name</p></dd><dt><span class="term"><code class="option">IMPORT{<em class="replaceable"><code>type</code></em>}</code></span></dt><dd><p>Import a set of variables as device properties,
depending on <em class="replaceable"><code>type</code></em>:</p><div class="variablelist"><dl><dt><span class="term"><code class="option">program</code></span></dt><dd><p>Execute an external program specified as the assigned value and
import its output, which must be in environment key
format. Path specification, command/argument separation,
and quoting work like in <code class="option">RUN</code>.</p></dd><dt><span class="term"><code class="option">file</code></span></dt><dd><p>Import a text file specified as the assigned value, which must be in
environment key format.</p></dd><dt><span class="term"><code class="option">db</code></span></dt><dd><p>Import a single property specified as the assigned value from the
current device database. This works only if the database is already populated
by an earlier event.</p></dd><dt><span class="term"><code class="option">cmdline</code></span></dt><dd><p>Import a single property from the kernel commandline. For simple flags
the value of the property will be set to '1'.</p></dd><dt><span class="term"><code class="option">parent</code></span></dt><dd><p>Import the stored keys from the parent device by reading
the database entry of the parent device. The value assigned to
<code class="option">IMPORT{parent}</code> is used as a filter of key names
to import (with the same shell-style pattern matching used for
comparisons).</p></dd></dl></div><p>If no option is given, udev will choose between <code class="option">program</code>
and <code class="option">file</code> based on the executable bit of the file
permissions.</p></dd><dt><span class="term"><code class="option">WAIT_FOR</code></span></dt><dd><p>Wait for a file to become available or until a 10
seconds timeout expires. The path is relative to the sysfs device,
i. e. if no path is specified this waits for an attribute to appear.</p></dd><dt><span class="term"><code class="option">OPTIONS</code></span></dt><dd><p>Rule and device options:</p><div class="variablelist"><dl><dt><span class="term"><code class="option">link_priority=<em class="replaceable"><code>value</code></em></code></span></dt><dd><p>Specify the priority of the created symlinks. Devices with higher
priorities overwrite existing symlinks of other devices. The default is 0.</p></dd><dt><span class="term"><code class="option">event_timeout=</code></span></dt><dd><p>Number of seconds an event will wait for operations to finish, before it
will terminate itself.</p></dd><dt><span class="term"><code class="option">string_escape=<em class="replaceable"><code>none|replace</code></em></code></span></dt><dd><p>Usually control and other possibly unsafe characters are replaced
in strings used for device naming. The mode of replacement can be specified
with this option.</p></dd><dt><span class="term"><code class="option">static_node=</code></span></dt><dd><p>Apply the permissions specified in this rule to a static device node with
the specified name. Static device nodes might be provided by kernel modules,
or copied from <code class="filename">/lib/udev/devices</code>. These nodes might not have
a corresponding kernel device at the time udevd is started, and allow to trigger
automatic kernel module on-demand loading.</p></dd><dt><span class="term"><code class="option">watch</code></span></dt><dd><p>Watch the device node with inotify, when closed after being opened for
writing, a change uevent will be synthesised.</p></dd><dt><span class="term"><code class="option">nowatch</code></span></dt><dd><p>Disable the watching of a device node with inotify.</p></dd></dl></div></dd></dl></div><p>The <code class="option">NAME</code>, <code class="option">SYMLINK</code>, <code class="option">PROGRAM</code>,
<code class="option">OWNER</code>, <code class="option">GROUP</code>, <code class="option">MODE</code> and <code class="option">RUN</code>
fields support simple printf-like string substitutions. The <code class="option">RUN</code>
format chars gets applied after all rules have been processed, right before the program
is executed. It allows the use of device properties set by earlier matching
rules. For all other fields, substitutions are applied while the individual rule is
being processed. The available substitutions are:</p><div class="variablelist"><dl><dt><span class="term"><code class="option">$kernel</code>, <code class="option">%k</code></span></dt><dd><p>The kernel name for this device.</p></dd><dt><span class="term"><code class="option">$number</code>, <code class="option">%n</code></span></dt><dd><p>The kernel number for this device. For example, 'sda3' has
kernel number of '3'</p></dd><dt><span class="term"><code class="option">$devpath</code>, <code class="option">%p</code></span></dt><dd><p>The devpath of the device.</p></dd><dt><span class="term"><code class="option">$id</code>, <code class="option">%b</code></span></dt><dd><p>The name of the device matched while searching the devpath upwards for
<code class="option">SUBSYSTEMS</code>, <code class="option">KERNELS</code>, <code class="option">DRIVERS</code> and <code class="option">ATTRS</code>.
</p></dd><dt><span class="term"><code class="option">$driver</code></span></dt><dd><p>The driver name of the device matched while searching the devpath upwards for
<code class="option">SUBSYSTEMS</code>, <code class="option">KERNELS</code>, <code class="option">DRIVERS</code> and <code class="option">ATTRS</code>.
</p></dd><dt><span class="term"><code class="option">$attr{<em class="replaceable"><code>file</code></em>}</code>, <code class="option">%s{<em class="replaceable"><code>file</code></em>}</code></span></dt><dd><p>The value of a sysfs attribute found at the device, where
all keys of the rule have matched. If the matching device does not have
such an attribute, and a previous KERNELS, SUBSYSTEMS, DRIVERS, or
ATTRS test selected a parent device, use the attribute from that
parent device.
If the attribute is a symlink, the last element of the symlink target is
returned as the value.</p></dd><dt><span class="term"><code class="option">$env{<em class="replaceable"><code>key</code></em>}</code>, <code class="option">%E{<em class="replaceable"><code>key</code></em>}</code></span></dt><dd><p>A device property value.</p></dd><dt><span class="term"><code class="option">$major</code>, <code class="option">%M</code></span></dt><dd><p>The kernel major number for the device.</p></dd><dt><span class="term"><code class="option">$minor</code>, <code class="option">%m</code></span></dt><dd><p>The kernel minor number for the device.</p></dd><dt><span class="term"><code class="option">$result</code>, <code class="option">%c</code></span></dt><dd><p>The string returned by the external program requested with PROGRAM.
A single part of the string, separated by a space character may be selected
by specifying the part number as an attribute: <code class="option">%c{N}</code>.
If the number is followed by the '+' char this part plus all remaining parts
of the result string are substituted: <code class="option">%c{N+}</code></p></dd><dt><span class="term"><code class="option">$parent</code>, <code class="option">%P</code></span></dt><dd><p>The node name of the parent device.</p></dd><dt><span class="term"><code class="option">$name</code></span></dt><dd><p>The current name of the device node. If not changed by a rule, it is the
name of the kernel device.</p></dd><dt><span class="term"><code class="option">$links</code></span></dt><dd><p>The current list of symlinks, separated by a space character. The value is
only set if an earlier rule assigned a value, or during a remove events.</p></dd><dt><span class="term"><code class="option">$root</code>, <code class="option">%r</code></span></dt><dd><p>The udev_root value.</p></dd><dt><span class="term"><code class="option">$sys</code>, <code class="option">%S</code></span></dt><dd><p>The sysfs mount point.</p></dd><dt><span class="term"><code class="option">$tempnode</code>, <code class="option">%N</code></span></dt><dd><p>The name of a created temporary device node to provide access to
the device from a external program before the real node is created.</p></dd><dt><span class="term"><code class="option">%%</code></span></dt><dd><p>The '%' character itself.</p></dd><dt><span class="term"><code class="option">$$</code></span></dt><dd><p>The '$' character itself.</p></dd></dl></div></div></div><div class="refsect1" title="Author"><a id="id320469"/><h2>Author</h2><p>Written by Greg Kroah-Hartman <code class="email">&lt;<a class="email" href="mailto:greg@kroah.com">greg@kroah.com</a>&gt;</code> and
Kay Sievers <code class="email">&lt;<a class="email" href="mailto:kay.sievers@vrfy.org">kay.sievers@vrfy.org</a>&gt;</code>. With much help from
Dan Stekloff and many others.</p></div><div class="refsect1" title="See Also"><a id="id320486"/><h2>See Also</h2><p><span class="citerefentry"><span class="refentrytitle">udevd</span>(8)</span>,
<span class="citerefentry"><span class="refentrytitle">udevadm</span>(8)</span></p></div></div></body></html>