Copyright 2010 Lennart Poettering
systemd is free software; you can redistribute it and/or modify it
- under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
+ under the terms of the GNU Lesser General Public License as published by
+ the Free Software Foundation; either version 2.1 of the License, or
(at your option) any later version.
systemd is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- General Public License for more details.
+ Lesser General Public License for more details.
- You should have received a copy of the GNU General Public License
+ You should have received a copy of the GNU Lesser General Public License
along with systemd; If not, see <http://www.gnu.org/licenses/>.
-->
<refnamediv>
<refname>systemd.device</refname>
- <refpurpose>systemd device configuration files</refpurpose>
+ <refpurpose>Device unit configuration</refpurpose>
</refnamediv>
<refsynopsisdiv>
- <para><filename>systemd.device</filename></para>
+ <para><filename><replaceable>device</replaceable>.device</filename></para>
</refsynopsisdiv>
<refsect1>
<title>Description</title>
<para>A unit configuration file whose name ends in
- <filename>.device</filename> encodes information about
+ <literal>.device</literal> encodes information about
a device unit as exposed in the
sysfs/<citerefentry><refentrytitle>udev</refentrytitle><manvolnum>7</manvolnum></citerefentry>
device tree.</para>
since no device-specific options may be
configured.</para>
- <para>systemd will automatically create dynamic device
- units for all kernel devices that are marked with the
- "systemd" udev tag (by default all block and network
- devices, and a few others). This may be used to define
- dependencies between devices and other
- units.</para>
+ <para>systemd will dynamically create device units for
+ all kernel devices that are marked with the "systemd"
+ udev tag (by default all block and network devices,
+ and a few others). This may be used to define
+ dependencies between devices and other units. To tag a
+ udev device, use <literal>TAG+="systemd"</literal> in
+ the udev rules file, see
+ <citerefentry><refentrytitle>udev</refentrytitle><manvolnum>7</manvolnum></citerefentry>
+ for details.</para>
<para>Device units are named after the
<filename>/sys</filename> and
<filename>/dev</filename> paths they control. Example:
- the device <filename>/dev/sda5</filename> is exposed
+ the device <filename noindex='true'>/dev/sda5</filename> is exposed
in systemd as <filename>dev-sda5.device</filename>. For
details about the escaping logic used to convert a
file system path to a unit name see
<para>The settings of device units may either be
configured via unit files, or directly from the udev
- database (which is recommended). The following udev
+ database (which is recommended). The following udev device
properties are understood by systemd:</para>
- <variablelist>
+ <variablelist class='udev-directives'>
<varlistentry>
<term><varname>SYSTEMD_WANTS=</varname></term>
+ <term><varname>SYSTEMD_USER_WANTS=</varname></term>
<listitem><para>Adds dependencies of
- type <varname>Wants</varname> from
- this unit to all listed units. This
- may be used to activate arbitrary
- units, when a specific device becomes
- available. Note that this and the
+ type <varname>Wants</varname> from the
+ device unit to all listed units. The
+ first form is used by the system
+ systemd instance, the second by user
+ systemd instances. Those settings may
+ be used to activate arbitrary units
+ when a specific device becomes
+ available.</para>
+
+ <para>Note that this and the
other tags are not taken into account
unless the device is tagged with the
- "<literal>systemd</literal>" string in
+ <literal>systemd</literal> string in
the udev database, because otherwise
- the device is not exposed as systemd
- unit.</para></listitem>
+ the device is not exposed as a systemd
+ unit (see above).</para>
+
+ <para>Note that systemd will only act
+ on <varname>Wants</varname>
+ dependencies when a device first
+ becomes active. It will not act on
+ them if they are added to devices that
+ are already active. Use
+ <varname>SYSTEMD_READY=</varname> (see
+ below) to influence on which udev
+ event to trigger the dependencies.
+ </para></listitem>
</varlistentry>
<varlistentry>
name. (See above.)</para></listitem>
</varlistentry>
+ <varlistentry>
+ <term><varname>SYSTEMD_READY=</varname></term>
+ <listitem><para>If set to 0, systemd
+ will consider this device unplugged
+ even if it shows up in the udev
+ tree. If this property is unset or set
+ to 1, the device will be considered
+ plugged if it is visible in the
+ udev tree. This property has no
+ influence on the behavior when a
+ device disappears from the udev
+ tree.</para>
+
+ <para>This option is useful to support
+ devices that initially show up in an
+ uninitialized state in the tree, and
+ for which a <literal>changed</literal>
+ event is generated the moment they are
+ fully set up. Note that
+ <varname>SYSTEMD_WANTS=</varname> (see
+ above) is not acted on as long as
+ <varname>SYSTEMD_READY=0</varname> is
+ set for a device.</para></listitem>
+ </varlistentry>
+
<varlistentry>
<term><varname>ID_MODEL_FROM_DATABASE=</varname></term>
<term><varname>ID_MODEL=</varname></term>
<refsect1>
<title>See Also</title>
<para>
- <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>8</manvolnum></citerefentry>,
- <citerefentry><refentrytitle>systemctl</refentrytitle><manvolnum>8</manvolnum></citerefentry>,
+ <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
+ <citerefentry><refentrytitle>systemctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
<citerefentry><refentrytitle>systemd.unit</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
- <citerefentry><refentrytitle>udev</refentrytitle><manvolnum>7</manvolnum></citerefentry>
+ <citerefentry><refentrytitle>udev</refentrytitle><manvolnum>7</manvolnum></citerefentry>,
+ <citerefentry><refentrytitle>systemd.directives</refentrytitle><manvolnum>7</manvolnum></citerefentry>
</para>
</refsect1>