<refentry id="udev">
<refentryinfo>
<title>udev</title>
- <productname>udev</productname>
+ <productname>systemd</productname>
+ <authorgroup>
+ <author>
+ <contrib>Developer</contrib>
+ <firstname>Greg</firstname>
+ <surname>Kroah-Hartmann</surname>
+ <email>greg@kroah.com</email>
+ </author>
+ <author>
+ <contrib>Developer</contrib>
+ <firstname>Kay</firstname>
+ <surname>Sievers</surname>
+ <email>kay@vrfy.org</email>
+ </author>
+ </authorgroup>
</refentryinfo>
<refmeta>
names provide a way to reliably identify devices based on their properties or
current configuration.</para>
- <para>The udev daemon, <citerefentry><refentrytitle>udevd</refentrytitle>
+ <para>The udev daemon, <citerefentry><refentrytitle>systemd-udevd.service</refentrytitle>
<manvolnum>8</manvolnum></citerefentry>, 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
The following variables can be set:</para>
<variablelist>
<varlistentry>
- <term><option>udev_root</option></term>
- <listitem>
- <para>Specifies where to place the device nodes in the filesystem.
- The default value is <filename>/dev</filename>.</para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><option>udev_log</option></term>
+ <term><varname>udev_log</varname></term>
<listitem>
<para>The logging priority. Valid values are the numerical syslog priorities
or their textual representations: <option>err</option>, <option>info</option>
extensions are ignored.</para>
<para>Every line in the rules file contains at least one key-value pair.
- There are two kind of keys: match and assignment.
+ There are two kinds of keys: match and assignment.
If all match keys are matching against its value, the rule gets applied and the
assignment keys get the specified value assigned.</para>
operators are:</para>
<variablelist>
<varlistentry>
- <term><option>==</option></term>
+ <term><literal>==</literal></term>
<listitem>
<para>Compare for equality.</para>
</listitem>
</varlistentry>
<varlistentry>
- <term><option>!=</option></term>
+ <term><literal>!=</literal></term>
<listitem>
<para>Compare for inequality.</para>
</listitem>
</varlistentry>
<varlistentry>
- <term><option>=</option></term>
+ <term><literal>=</literal></term>
<listitem>
<para>Assign a value to a key. Keys that represent a list are reset
and only this single value is assigned.</para>
</varlistentry>
<varlistentry>
- <term><option>+=</option></term>
+ <term><literal>+=</literal></term>
<listitem>
<para>Add the value to a key that holds a list of entries.</para>
</listitem>
</varlistentry>
<varlistentry>
- <term><option>:=</option></term>
+ <term><literal>:=</literal></term>
<listitem>
<para>Assign a value to a key finally; disallow any later changes.</para>
</listitem>
successfully. The device properties are made available to the
executed program in the environment. The program's stdout
is available in the RESULT key.</para>
+ <para>This can only be used for very short-running foreground tasks. For details
+ see <option>RUN</option>.</para>
</listitem>
</varlistentry>
pattern characters are supported:</para>
<variablelist>
<varlistentry>
- <term><option>*</option></term>
+ <term><literal>*</literal></term>
<listitem>
<para>Matches zero or more characters.</para>
</listitem>
</varlistentry>
<varlistentry>
- <term><option>?</option></term>
+ <term><literal>?</literal></term>
<listitem>
<para>Matches any single character.</para>
</listitem>
</varlistentry>
<varlistentry>
- <term><option>[]</option></term>
+ <term><literal>[]</literal></term>
<listitem>
<para>Matches any single character specified within the brackets. For
example, the pattern string 'tty[SR]' would match either 'ttyS' or 'ttyR'.
<term><option>NAME</option></term>
<listitem>
<para>The name to use for a network interface. The name of a device node
- can not be changed by udev, only additional symlinks can be created.</para>
+ cannot be changed by udev, only additional symlinks can be created.</para>
</listitem>
</varlistentry>
<term><option>SYMLINK</option></term>
<listitem>
<para>The name of a symlink targeting the node. Every matching rule adds
- 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 always points to the device with
- the highest link_priority. If the current device goes away, the links are
- re-evaluated and the device with the next highest link_priority becomes the owner of
- the link. If no link_priority is specified, the order of the devices (and
- which one of them owns the link) is undefined. Also, symlink names must
- never conflict with the kernel's default device node names, as that would
- result in unpredictable behavior.
+ this value to the list of symlinks to be created.</para>
+ <para>The set of characters to name a symlink is limited. Allowed
+ characters are [0-9A-Za-z#+-.:=@_/], valid utf8 character sequences,
+ and "\x00" hex encoding. All other characters are replaced by
+ a '_' character.</para>
+ <para>Multiple symlinks may be specified by separating the names by the
+ space character. In case multiple devices claim the same name, the link
+ always points to the device with the highest link_priority. If the current
+ device goes away, the links are re-evaluated and the device with the
+ next highest link_priority becomes the owner of the link. If no
+ link_priority is specified, the order of the devices (and which one of
+ them owns the link) is undefined.</para>
+ <para>Symlink names must never conflict with the kernel's default device
+ node names, as that would result in unpredictable behavior.
</para>
</listitem>
</varlistentry>
<varlistentry>
- <term><option>OWNER, GROUP, MODE</option></term>
+ <term><option>OWNER</option>, <option>GROUP</option>, <option>MODE</option></term>
<listitem>
<para>The permissions for the device node. Every specified value overrides
the compiled-in default value.</para>
/usr/lib/udev, otherwise the absolute path must be specified. The program
name and following arguments are separated by spaces. Single quotes can
be used to specify arguments with spaces.</para>
- <para>This can only be used for very short running tasks. Running an
+ <para>This can only be used for very short-running foreground tasks. Running an
event process for a long period of time may block all further events for
- this or a dependent device. Starting daemons or other long running processes
- is not appropriate for udev.</para>
+ this or a dependent device.</para>
+ <para>Starting daemons or other long running processes is not appropriate
+ for udev; the forked processes, detached or not, will be unconditionally
+ killed after the event handling has finished.</para>
</listitem>
</varlistentry>
<term><option>IMPORT{<replaceable>type</replaceable>}</option></term>
<listitem>
<para>Import a set of variables as device properties,
- depending on <replaceable>type</replaceable>:</para>
+ depending on <literal>type</literal>:</para>
<variablelist>
<varlistentry>
- <term><option>program</option></term>
+ <term><literal>program</literal></term>
<listitem>
<para>Execute an external program specified as the assigned value and
import its output, which must be in environment key
</listitem>
</varlistentry>
<varlistentry>
- <term><option>file</option></term>
+ <term><literal>file</literal></term>
<listitem>
<para>Import a text file specified as the assigned value, the content
of which must be in environment key format.</para>
</listitem>
</varlistentry>
<varlistentry>
- <term><option>db</option></term>
+ <term><literal>db</literal></term>
<listitem>
<para>Import a single property specified as the assigned value from the
current device database. This works only if the database is already populated
</listitem>
</varlistentry>
<varlistentry>
- <term><option>cmdline</option></term>
+ <term><literal>cmdline</literal></term>
<listitem>
<para>Import a single property from the kernel command line. For simple flags
the value of the property is set to '1'.</para>
</listitem>
</varlistentry>
<varlistentry>
- <term><option>parent</option></term>
+ <term><literal>parent</literal></term>
<listitem>
<para>Import the stored keys from the parent device by reading
the database entry of the parent device. The value assigned to
</listitem>
</varlistentry>
</variablelist>
+ <para>This can only be used for very short-running foreground tasks. For details
+ see <option>RUN</option>.</para>
</listitem>
</varlistentry>
<term><option>static_node=</option></term>
<listitem>
<para>Apply the permissions specified in this rule to the static device node with
- the specified name. Static device nodes might be provided by kernel modules
- or copied from <filename>/usr/lib/udev/devices</filename>. These nodes might not have
- a corresponding kernel device at the time udevd is started; they can trigger
- automatic kernel module loading.</para>
+ the specified name. Static device node creation can be requested by kernel modules.
+ These nodes might not have a corresponding kernel device at the time systemd-udevd is
+ started; they can trigger automatic kernel module loading.</para>
</listitem>
</varlistentry>
<varlistentry>
</varlistentry>
<varlistentry>
- <term><option>%%</option></term>
+ <term><literal>%%</literal></term>
<listitem>
<para>The '%' character itself.</para>
</listitem>
</varlistentry>
<varlistentry>
- <term><option>$$</option></term>
+ <term><literal>$$</literal></term>
<listitem>
<para>The '$' character itself.</para>
</listitem>
</refsect2>
</refsect1>
- <refsect1><title>Author</title>
- <para>Written by Greg Kroah-Hartman <email>greg@kroah.com</email> and
- Kay Sievers <email>kay.sievers@vrfy.org</email>. With much help from
- Dan Stekloff and many others.</para>
- </refsect1>
-
<refsect1>
<title>See Also</title>
<para><citerefentry>
- <refentrytitle>udevd</refentrytitle><manvolnum>8</manvolnum>
+ <refentrytitle>systemd-udevd.service</refentrytitle><manvolnum>8</manvolnum>
</citerefentry>,
<citerefentry>
<refentrytitle>udevadm</refentrytitle><manvolnum>8</manvolnum>