summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2012-05-21 15:12:18 +0200
committerLennart Poettering <lennart@poettering.net>2012-05-21 15:14:51 +0200
commit49dbfa7b2b0bf3906704dac1eaeb4eba91056a19 (patch)
treeb7bf6ad5bef741f68b45a431807f58a81a5c845a
parenta223b325b409b325f4c2c2e11268596edd842631 (diff)
units: introduce new Documentation= field and make use of it everywhere
This should help making the boot process a bit easier to explore and understand for the administrator. The simple idea is that "systemctl status" now shows a link to documentation alongside the other status and decriptionary information of a service. This patch adds the necessary fields to all our shipped units if we have proper documentation for them.
-rw-r--r--man/systemd.special.xml65
-rw-r--r--man/systemd.unit.xml17
-rw-r--r--src/core/dbus-unit.c1
-rw-r--r--src/core/dbus-unit.h1
-rw-r--r--src/core/load-fragment-gperf.gperf.m41
-rw-r--r--src/core/load-fragment.c37
-rw-r--r--src/core/load-fragment.h1
-rw-r--r--src/core/unit.c8
-rw-r--r--src/core/unit.h1
-rw-r--r--src/shared/util.c21
-rw-r--r--src/shared/util.h2
-rw-r--r--src/systemctl/systemctl.c38
-rw-r--r--units/basic.target3
-rw-r--r--units/bluetooth.target3
-rw-r--r--units/cryptsetup.target3
-rw-r--r--units/dev-hugepages.mount1
-rw-r--r--units/dev-mqueue.mount1
-rw-r--r--units/emergency.service.in2
-rw-r--r--units/emergency.target3
-rw-r--r--units/final.target3
-rw-r--r--units/getty.target1
-rw-r--r--units/getty@.service.m41
-rw-r--r--units/graphical.target3
-rw-r--r--units/halt.target3
-rw-r--r--units/hibernate.target3
-rw-r--r--units/http-daemon.target3
-rw-r--r--units/kexec.target3
-rw-r--r--units/local-fs-pre.target3
-rw-r--r--units/local-fs.target3
-rw-r--r--units/mail-transfer-agent.target3
-rw-r--r--units/multi-user.target3
-rw-r--r--units/network.target3
-rw-r--r--units/nss-lookup.target3
-rw-r--r--units/nss-user-lookup.target3
-rw-r--r--units/poweroff.target3
-rw-r--r--units/printer.target3
-rw-r--r--units/proc-sys-fs-binfmt_misc.mount1
-rw-r--r--units/reboot.target3
-rw-r--r--units/remote-fs-pre.target3
-rw-r--r--units/remote-fs.target3
-rw-r--r--units/rescue.service.m4.in2
-rw-r--r--units/rescue.target3
-rw-r--r--units/rpcbind.target3
-rw-r--r--units/serial-getty@.service.m41
-rw-r--r--units/shutdown.target3
-rw-r--r--units/sigpwr.target3
-rw-r--r--units/sleep.target3
-rw-r--r--units/smartcard.target3
-rw-r--r--units/sockets.target3
-rw-r--r--units/sound.target3
-rw-r--r--units/suspend.target3
-rw-r--r--units/swap.target3
-rw-r--r--units/sysinit.target3
-rw-r--r--units/syslog.socket4
-rw-r--r--units/syslog.target4
-rw-r--r--units/systemd-ask-password-console.path1
-rw-r--r--units/systemd-ask-password-console.service.in1
-rw-r--r--units/systemd-ask-password-plymouth.path1
-rw-r--r--units/systemd-ask-password-plymouth.service.in1
-rw-r--r--units/systemd-ask-password-wall.path1
-rw-r--r--units/systemd-ask-password-wall.service.in1
-rw-r--r--units/systemd-binfmt.service.in2
-rw-r--r--units/systemd-hostnamed.service.in5
-rw-r--r--units/systemd-initctl.service.in2
-rw-r--r--units/systemd-initctl.socket2
-rw-r--r--units/systemd-journald.service.in3
-rw-r--r--units/systemd-journald.socket3
-rw-r--r--units/systemd-localed.service.in5
-rw-r--r--units/systemd-logind.service.in4
-rw-r--r--units/systemd-modules-load.service.in1
-rw-r--r--units/systemd-shutdownd.service.in2
-rw-r--r--units/systemd-shutdownd.socket2
-rw-r--r--units/systemd-sysctl.service.in1
-rw-r--r--units/systemd-timedated-ntp.target1
-rw-r--r--units/systemd-timedated.service.in4
-rw-r--r--units/systemd-tmpfiles-clean.service.in1
-rw-r--r--units/systemd-tmpfiles-clean.timer1
-rw-r--r--units/systemd-tmpfiles-setup.service.in1
-rw-r--r--units/systemd-udev-control.socket9
-rw-r--r--units/systemd-udev-kernel.socket9
-rw-r--r--units/systemd-udev-settle.service.in9
-rw-r--r--units/systemd-udev-trigger.service.in9
-rw-r--r--units/systemd-udev.service.in9
-rw-r--r--units/systemd-update-utmp-runlevel.service.in1
-rw-r--r--units/systemd-update-utmp-shutdown.service.in1
-rw-r--r--units/systemd-vconsole-setup.service.in1
-rw-r--r--units/time-sync.target3
-rw-r--r--units/umount.target3
-rw-r--r--units/user/default.target3
-rw-r--r--units/user/exit.service.in3
-rw-r--r--units/user/exit.target3
91 files changed, 312 insertions, 107 deletions
diff --git a/man/systemd.special.xml b/man/systemd.special.xml
index 984e998aba..96befd5f5d 100644
--- a/man/systemd.special.xml
+++ b/man/systemd.special.xml
@@ -49,7 +49,9 @@
<refsynopsisdiv>
<para><filename>basic.target</filename>,
+ <filename>bluetooth.target</filename>,
<filename>ctrl-alt-del.target</filename>,
+ <filename>cryptsetup.target</filename>,
<filename>dbus.service</filename>,
<filename>dbus.socket</filename>,
<filename>default.target</filename>,
@@ -57,6 +59,7 @@
<filename>emergency.target</filename>,
<filename>exit.service</filename>,
<filename>final.service</filename>,
+ <filename>getty.target</filename>,
<filename>graphical.target</filename>,
<filename>hibernate.target</filename>,
<filename>http-daemon.target</filename>,
@@ -69,7 +72,9 @@
<filename>multi-user.target</filename>,
<filename>network.target</filename>,
<filename>nss-lookup.target</filename>,
+ <filename>nss-user-lookup.target</filename>,
<filename>poweroff.target</filename>,
+ <filename>printer.target</filename>,
<filename>reboot.target</filename>,
<filename>remote-fs.target</filename>,
<filename>remote-fs-pre.target</filename>,
@@ -82,7 +87,9 @@
<filename>shutdown.target</filename>,
<filename>sigpwr.target</filename>,
<filename>sleep.target</filename>,
+ <filename>smartcard.target</filename>,
<filename>sockets.target</filename>,
+ <filename>sound.target</filename>,
<filename>suspend.target</filename>,
<filename>swap.target</filename>,
<filename>sysinit.target</filename>,
@@ -128,6 +135,16 @@
</listitem>
</varlistentry>
<varlistentry>
+ <term><filename>bluetooth.target</filename></term>
+ <listitem>
+ <para>This target is started
+ automatically as soon as a
+ bluetooth controller is
+ plugged in or becomes
+ available at boot.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
<term><filename>ctrl-alt-del.target</filename></term>
<listitem>
<para>systemd starts this
@@ -140,6 +157,15 @@
</listitem>
</varlistentry>
<varlistentry>
+ <term><filename>cryptsetup.target</filename></term>
+ <listitem>
+ <para>A target that pulls in
+ setup services for all
+ encrypted block
+ devices.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
<term><filename>dbus.service</filename></term>
<listitem>
<para>A special unit for the
@@ -227,6 +253,15 @@
</listitem>
</varlistentry>
<varlistentry>
+ <term><filename>getty.target</filename></term>
+ <listitem>
+ <para>A special target unit
+ that pulls in all local TTY
+ <filename>getty</filename> instances.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
<term><filename>graphical.target</filename></term>
<listitem>
<para>A special target unit
@@ -443,6 +478,16 @@
</listitem>
</varlistentry>
<varlistentry>
+ <term><filename>printer.target</filename></term>
+ <listitem>
+ <para>This target is started
+ automatically as soon as a
+ printer is plugged in or
+ becomes available at
+ boot.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
<term><filename>reboot.target</filename></term>
<listitem>
<para>A special target unit
@@ -616,6 +661,16 @@
</listitem>
</varlistentry>
<varlistentry>
+ <term><filename>smartcard.target</filename></term>
+ <listitem>
+ <para>This target is started
+ automatically as soon as a
+ smartcard controller is
+ plugged in or becomes
+ available at boot.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
<term><filename>sockets.target</filename></term>
<listitem>
<para>A special target unit
@@ -630,6 +685,16 @@
</listitem>
</varlistentry>
<varlistentry>
+ <term><filename>sound.target</filename></term>
+ <listitem>
+ <para>This target is started
+ automatically as soon as a
+ sound card is plugged in or
+ becomes available at
+ boot.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
<term><filename>suspend.target</filename></term>
<listitem>
<para>A special target unit
diff --git a/man/systemd.unit.xml b/man/systemd.unit.xml
index c81c7a30b0..dbc5fedea9 100644
--- a/man/systemd.unit.xml
+++ b/man/systemd.unit.xml
@@ -295,6 +295,23 @@
</varlistentry>
<varlistentry>
+ <term><varname>Documentation=</varname></term>
+ <listitem><para>A space separated list
+ of URIs referencing documentation for
+ this unit or its
+ configuration. Accepted are only URIs
+ of the types
+ <literal>http://</literal>,
+ <literal>https://</literal>,
+ <literal>file:</literal>,
+ <literal>info:</literal>,
+ <literal>man:</literal>. For more
+ information about the syntax of these
+ URIs see
+ <citerefentry><refentrytitle>uri</refentrytitle><manvolnum>7</manvolnum></citerefentry>.</para></listitem>
+ </varlistentry>
+
+ <varlistentry>
<term><varname>Requires=</varname></term>
<listitem><para>Configures requirement
diff --git a/src/core/dbus-unit.c b/src/core/dbus-unit.c
index 834fbd7693..812f1b9f16 100644
--- a/src/core/dbus-unit.c
+++ b/src/core/dbus-unit.c
@@ -808,6 +808,7 @@ const BusProperty bus_unit_properties[] = {
{ "PropagateReloadTo", bus_unit_append_dependencies, "as", offsetof(Unit, dependencies[UNIT_PROPAGATE_RELOAD_TO]), true },
{ "PropagateReloadFrom", bus_unit_append_dependencies, "as", offsetof(Unit, dependencies[UNIT_PROPAGATE_RELOAD_FROM]), true },
{ "RequiresMountsFor", bus_property_append_strv, "as", offsetof(Unit, requires_mounts_for), true },
+ { "Documentation", bus_property_append_strv, "as", offsetof(Unit, documentation), true },
{ "Description", bus_unit_append_description, "s", 0 },
{ "LoadState", bus_unit_append_load_state, "s", offsetof(Unit, load_state) },
{ "ActiveState", bus_unit_append_active_state, "s", 0 },
diff --git a/src/core/dbus-unit.h b/src/core/dbus-unit.h
index d22802d274..9680b56f06 100644
--- a/src/core/dbus-unit.h
+++ b/src/core/dbus-unit.h
@@ -87,6 +87,7 @@
" <property name=\"PropagateReloadFrom\" type=\"as\" access=\"read\"/>\n" \
" <property name=\"RequiresMountsFor\" type=\"as\" access=\"read\"/>\n" \
" <property name=\"Description\" type=\"s\" access=\"read\"/>\n" \
+ " <property name=\"Documentation\" type=\"as\" access=\"read\"/>\n" \
" <property name=\"LoadState\" type=\"s\" access=\"read\"/>\n" \
" <property name=\"ActiveState\" type=\"s\" access=\"read\"/>\n" \
" <property name=\"SubState\" type=\"s\" access=\"read\"/>\n" \
diff --git a/src/core/load-fragment-gperf.gperf.m4 b/src/core/load-fragment-gperf.gperf.m4
index d929273877..f0e25c0c5d 100644
--- a/src/core/load-fragment-gperf.gperf.m4
+++ b/src/core/load-fragment-gperf.gperf.m4
@@ -92,6 +92,7 @@ $1.ControlGroupPersistent, config_parse_tristate, 0,
)m4_dnl
Unit.Names, config_parse_unit_names, 0, 0
Unit.Description, config_parse_unit_string_printf, 0, offsetof(Unit, description)
+Unit.Documentation, config_parse_documentation, 0, offsetof(Unit, documentation)
Unit.Requires, config_parse_unit_deps, UNIT_REQUIRES, 0
Unit.RequiresOverridable, config_parse_unit_deps, UNIT_REQUIRES_OVERRIDABLE, 0
Unit.Requisite, config_parse_unit_deps, UNIT_REQUISITE, 0
diff --git a/src/core/load-fragment.c b/src/core/load-fragment.c
index c2efec6657..3bc053341c 100644
--- a/src/core/load-fragment.c
+++ b/src/core/load-fragment.c
@@ -2063,6 +2063,43 @@ int config_parse_unit_requires_mounts_for(
return r;
}
+int config_parse_documentation(
+ const char *filename,
+ unsigned line,
+ const char *section,
+ const char *lvalue,
+ int ltype,
+ const char *rvalue,
+ void *data,
+ void *userdata) {
+
+ Unit *u = userdata;
+ int r;
+ char **a, **b;
+
+ assert(filename);
+ assert(lvalue);
+ assert(rvalue);
+ assert(u);
+
+ r = config_parse_unit_strv_printf(filename, line, section, lvalue, ltype, rvalue, data, userdata);
+ if (r < 0)
+ return r;
+
+ for (a = b = u->documentation; a && *a; a++) {
+
+ if (is_valid_documentation_url(*a))
+ *(b++) = *a;
+ else {
+ log_error("[%s:%u] Invalid URL, ignoring: %s", filename, line, *a);
+ free(*a);
+ }
+ }
+ *b = NULL;
+
+ return r;
+}
+
#define FOLLOW_MAX 8
static int open_follow(char **filename, FILE **_f, Set *names, char **_final) {
diff --git a/src/core/load-fragment.h b/src/core/load-fragment.h
index ccc436420e..3b2ed096b5 100644
--- a/src/core/load-fragment.h
+++ b/src/core/load-fragment.h
@@ -36,6 +36,7 @@ int config_parse_unit_names(const char *filename, unsigned line, const char *sec
int config_parse_unit_string_printf(const char *filename, unsigned line, const char *section, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata);
int config_parse_unit_strv_printf(const char *filename, unsigned line, const char *section, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata);
int config_parse_unit_path_printf(const char *filename, unsigned line, const char *section, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata);
+int config_parse_documentation(const char *filename, unsigned line, const char *section, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata);
int config_parse_socket_listen(const char *filename, unsigned line, const char *section, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata);
int config_parse_socket_bind(const char *filename, unsigned line, const char *section, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata);
int config_parse_exec_nice(const char *filename, unsigned line, const char *section, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata);
diff --git a/src/core/unit.c b/src/core/unit.c
index 200d196878..1f1a5314f7 100644
--- a/src/core/unit.c
+++ b/src/core/unit.c
@@ -397,6 +397,7 @@ void unit_free(Unit *u) {
cgroup_attribute_free_list(u->cgroup_attributes);
free(u->description);
+ strv_free(u->documentation);
free(u->fragment_path);
free(u->instance);
@@ -624,7 +625,7 @@ const char *unit_description(Unit *u) {
}
void unit_dump(Unit *u, FILE *f, const char *prefix) {
- char *t;
+ char *t, **j;
UnitDependency d;
Iterator i;
char *p2;
@@ -672,6 +673,9 @@ void unit_dump(Unit *u, FILE *f, const char *prefix) {
SET_FOREACH(t, u->names, i)
fprintf(f, "%s\tName: %s\n", prefix, t);
+ STRV_FOREACH(j, u->documentation)
+ fprintf(f, "%s\tDocumentation: %s\n", prefix, *j);
+
if ((following = unit_following(u)))
fprintf(f, "%s\tFollowing: %s\n", prefix, following->id);
@@ -698,8 +702,6 @@ void unit_dump(Unit *u, FILE *f, const char *prefix) {
}
if (!strv_isempty(u->requires_mounts_for)) {
- char **j;
-
fprintf(f,
"%s\tRequiresMountsFor:", prefix);
diff --git a/src/core/unit.h b/src/core/unit.h
index e8e6b09866..87dc88c961 100644
--- a/src/core/unit.h
+++ b/src/core/unit.h
@@ -157,6 +157,7 @@ struct Unit {
char **requires_mounts_for;
char *description;
+ char **documentation;
char *fragment_path; /* if loaded from a config file this is the primary path to it */
usec_t fragment_mtime;
diff --git a/src/shared/util.c b/src/shared/util.c
index 0b81e1c4f9..ae0ce320ad 100644
--- a/src/shared/util.c
+++ b/src/shared/util.c
@@ -5610,3 +5610,24 @@ int can_sleep(const char *type) {
free(p);
return found;
}
+
+bool is_valid_documentation_url(const char *url) {
+ assert(url);
+
+ if (startswith(url, "http://") && url[7])
+ return true;
+
+ if (startswith(url, "https://") && url[8])
+ return true;
+
+ if (startswith(url, "file:") && url[5])
+ return true;
+
+ if (startswith(url, "info:") && url[5])
+ return true;
+
+ if (startswith(url, "man:") && url[4])
+ return true;
+
+ return false;
+}
diff --git a/src/shared/util.h b/src/shared/util.h
index f1bcb8a101..3dce047b40 100644
--- a/src/shared/util.h
+++ b/src/shared/util.h
@@ -508,4 +508,6 @@ int getenv_for_pid(pid_t pid, const char *field, char **_value);
int can_sleep(const char *type);
+bool is_valid_documentation_url(const char *url);
+
#endif
diff --git a/src/systemctl/systemctl.c b/src/systemctl/systemctl.c
index 92c79d038f..0d2044f874 100644
--- a/src/systemctl/systemctl.c
+++ b/src/systemctl/systemctl.c
@@ -2158,6 +2158,8 @@ typedef struct UnitStatusInfo {
const char *description;
const char *following;
+ char **documentation;
+
const char *path;
const char *default_control_group;
@@ -2303,6 +2305,19 @@ static void print_status_info(UnitStatusInfo *i) {
if (i->what)
printf("\t What: %s\n", i->what);
+ if (!strv_isempty(i->documentation)) {
+ char **t;
+ bool first = true;
+
+ STRV_FOREACH(t, i->documentation) {
+ if (first) {
+ printf("\t Docs: %s\n", *t);
+ first = false;
+ } else
+ printf("\t %s\n", *t);
+ }
+ }
+
if (i->accept)
printf("\tAccepted: %u; Connected: %u\n", i->n_accepted, i->n_connections);
@@ -2609,6 +2624,27 @@ static int status_property(const char *name, DBusMessageIter *iter, UnitStatusIn
dbus_message_iter_next(&sub);
}
+ } else if (dbus_message_iter_get_element_type(iter) == DBUS_TYPE_STRING &&
+ streq(name, "Documentation")) {
+
+ DBusMessageIter sub;
+
+ dbus_message_iter_recurse(iter, &sub);
+ while (dbus_message_iter_get_arg_type(&sub) == DBUS_TYPE_STRING) {
+ const char *s;
+ char **l;
+
+ dbus_message_iter_get_basic(&sub, &s);
+
+ l = strv_append(i->documentation, s);
+ if (!l)
+ return -ENOMEM;
+
+ strv_free(i->documentation);
+ i->documentation = l;
+
+ dbus_message_iter_next(&sub);
+ }
}
break;
@@ -2932,6 +2968,8 @@ static int show_one(const char *verb, DBusConnection *bus, const char *path, boo
if (!show_properties)
print_status_info(&info);
+ strv_free(info.documentation);
+
if (!streq_ptr(info.active_state, "active") &&
!streq_ptr(info.active_state, "reloading") &&
streq(verb, "status"))
diff --git a/units/basic.target b/units/basic.target
index c3c7ced7c6..f9d03fa16f 100644
--- a/units/basic.target
+++ b/units/basic.target
@@ -5,10 +5,9 @@
# the Free Software Foundation; either version 2.1 of the License, or
# (at your option) any later version.
-# See systemd.special(7) for details
-
[Unit]
Description=Basic System
+Documentation=man:systemd.special(7)
Requires=sysinit.target sockets.target
After=sysinit.target sockets.target
RefuseManualStart=yes
diff --git a/units/bluetooth.target b/units/bluetooth.target
index 6b9b5b5442..dd4ae14cfb 100644
--- a/units/bluetooth.target
+++ b/units/bluetooth.target
@@ -5,8 +5,7 @@
# the Free Software Foundation; either version 2.1 of the License, or
# (at your option) any later version.
-# See systemd.special(7) for details
-
[Unit]
Description=Bluetooth
+Documentation=man:systemd.special(7)
StopWhenUnneeded=yes
diff --git a/units/cryptsetup.target b/units/cryptsetup.target
index af38e5d673..25d3e33f6a 100644
--- a/units/cryptsetup.target
+++ b/units/cryptsetup.target
@@ -5,7 +5,6 @@
# the Free Software Foundation; either version 2.1 of the License, or
# (at your option) any later version.
-# See systemd.special(7) for details
-
[Unit]
Description=Encrypted Volumes
+Documentation=man:systemd.special(7)
diff --git a/units/dev-hugepages.mount b/units/dev-hugepages.mount
index fcc50736e0..9381167c83 100644
--- a/units/dev-hugepages.mount
+++ b/units/dev-hugepages.mount
@@ -7,6 +7,7 @@
[Unit]
Description=Huge Pages File System
+Documentation=https://www.kernel.org/doc/Documentation/vm/hugetlbpage.txt
DefaultDependencies=no
Before=sysinit.target
ConditionPathExists=/sys/kernel/mm/hugepages
diff --git a/units/dev-mqueue.mount b/units/dev-mqueue.mount
index a55ac935c4..5786bb1519 100644
--- a/units/dev-mqueue.mount
+++ b/units/dev-mqueue.mount
@@ -7,6 +7,7 @@
[Unit]
Description=POSIX Message Queue File System
+Documentation=man:mq_overview(7)
DefaultDependencies=no
Before=sysinit.target
ConditionPathExists=/proc/sys/fs/mqueue
diff --git a/units/emergency.service.in b/units/emergency.service.in
index 75007563d7..87864f1c53 100644
--- a/units/emergency.service.in
+++ b/units/emergency.service.in
@@ -5,8 +5,6 @@
# the Free Software Foundation; either version 2.1 of the License, or
# (at your option) any later version.
-# See systemd.special(7) for details
-
[Unit]
Description=Emergency Shell
DefaultDependencies=no
diff --git a/units/emergency.target b/units/emergency.target
index 791dbe595c..0760d66f95 100644
--- a/units/emergency.target
+++ b/units/emergency.target
@@ -5,10 +5,9 @@
# the Free Software Foundation; either version 2.1 of the License, or
# (at your option) any later version.
-# See systemd.special(7) for details
-
[Unit]
Description=Emergency Mode
+Documentation=man:systemd.special(7)
Requires=emergency.service
After=emergency.service
AllowIsolate=yes
diff --git a/units/final.target b/units/final.target
index d516f38e9e..42819105c8 100644
--- a/units/final.target
+++ b/units/final.target
@@ -5,10 +5,9 @@
# the Free Software Foundation; either version 2.1 of the License, or
# (at your option) any later version.
-# See systemd.special(7) for details
-
[Unit]
Description=Final Step
+Documentation=man:systemd.special(7)
DefaultDependencies=no
RefuseManualStart=yes
After=shutdown.target umount.target
diff --git a/units/getty.target b/units/getty.target
index f1c926c72d..d53da35f9c 100644
--- a/units/getty.target
+++ b/units/getty.target
@@ -7,3 +7,4 @@
[Unit]
Description=Login Prompts
+Documentation=man:systemd.special(7)
diff --git a/units/getty@.service.m4 b/units/getty@.service.m4
index 431a3dd722..6d458360a4 100644
--- a/units/getty@.service.m4
+++ b/units/getty@.service.m4
@@ -7,6 +7,7 @@
[Unit]
Description=Getty on %I
+Documentation=man:agetty(8)
After=systemd-user-sessions.service plymouth-quit-wait.service
m4_ifdef(`TARGET_FEDORA',
After=rc-local.service
diff --git a/units/graphical.target b/units/graphical.target
index 2e82d6f898..7c6ebd4789 100644
--- a/units/graphical.target
+++ b/units/graphical.target
@@ -5,10 +5,9 @@
# the Free Software Foundation; either version 2.1 of the License, or
# (at your option) any later version.
-# See systemd.special(7) for details
-
[Unit]
Description=Graphical Interface
+Documentation=man:systemd.special(7)
Requires=multi-user.target
After=multi-user.target
Conflicts=rescue.target
diff --git a/units/halt.target b/units/halt.target
index dc908805db..41266b96f0 100644
--- a/units/halt.target
+++ b/units/halt.target
@@ -5,10 +5,9 @@
# the Free Software Foundation; either version 2.1 of the License, or
# (at your option) any later version.
-# See systemd.special(7) for details
-
[Unit]
Description=Halt
+Documentation=man:systemd.special(7)
DefaultDependencies=no
Requires=halt.service
After=halt.service
diff --git a/units/hibernate.target b/units/hibernate.target
index 05238a7cbf..23a9f99984 100644
--- a/units/hibernate.target
+++ b/units/hibernate.target
@@ -5,10 +5,9 @@
# the Free Software Foundation; either version 2.1 of the License, or
# (at your option) any later version.
-# See systemd.special(7) for details
-
[Unit]
Description=Hibernate
+Documentation=man:systemd.special(7)
DefaultDependencies=no
BindTo=hibernate.service
After=hibernate.service
diff --git a/units/http-daemon.target b/units/http-daemon.target
index 1de1ec4018..21ce997c1a 100644
--- a/units/http-daemon.target
+++ b/units/http-daemon.target
@@ -5,10 +5,9 @@
# the Free Software Foundation; either version 2.1 of the License, or
# (at your option) any later version.
-# See systemd.special(7) for details
-
# This exists mostly for compatibility with SysV/LSB units, and
# implementations lacking socket/bus activation.
[Unit]
Description=Web Server
+Documentation=man:systemd.special(7)
diff --git a/units/kexec.target b/units/kexec.target
index 4941f51c91..be8eafcf1f 100644
--- a/units/kexec.target
+++ b/units/kexec.target
@@ -5,10 +5,9 @@
# the Free Software Foundation; either version 2.1 of the License, or
# (at your option) any later version.
-# See systemd.special(7) for details
-
[Unit]
Description=Reboot via kexec
+Documentation=man:systemd.special(7)
DefaultDependencies=no
Requires=kexec.service
After=kexec.service
diff --git a/units/local-fs-pre.target b/units/local-fs-pre.target
index a928c1d79e..f8760ec9df 100644
--- a/units/local-fs-pre.target
+++ b/units/local-fs-pre.target
@@ -5,7 +5,6 @@
# the Free Software Foundation; either version 2.1 of the License, or
# (at your option) any later version.
-# See systemd.special(7) for details
-
[Unit]
Description=Local File Systems (Pre)
+Documentation=man:systemd.special(7)
diff --git a/units/local-fs.target b/units/local-fs.target
index 2aa51fca8c..dd92b17b6a 100644
--- a/units/local-fs.target
+++ b/units/local-fs.target
@@ -5,9 +5,8 @@
# the Free Software Foundation; either version 2.1 of the License, or
# (at your option) any later version.
-# See systemd.special(7) for details
-
[Unit]
Description=Local File Systems
+Documentation=man:systemd.special(7)
OnFailure=emergency.target
OnFailureIsolate=yes
diff --git a/units/mail-transfer-agent.target b/units/mail-transfer-agent.target
index 94d134e345..d2f24d15b9 100644
--- a/units/mail-transfer-agent.target
+++ b/units/mail-transfer-agent.target
@@ -5,10 +5,9 @@
# the Free Software Foundation; either version 2.1 of the License, or
# (at your option) any later version.
-# See systemd.special(7) for details
-
# This exists mostly for compatibility with SysV/LSB units, and
# implementations lacking socket/bus activation.
[Unit]
Description=Mail Transfer Agent
+Documentation=man:systemd.special(7)
diff --git a/units/multi-user.target b/units/multi-user.target
index fe19cbcd0b..6e3f0b4f7a 100644
--- a/units/multi-user.target
+++ b/units/multi-user.target
@@ -5,10 +5,9 @@
# the Free Software Foundation; either version 2.1 of the License, or
# (at your option) any later version.
-# See systemd.special(7) for details
-
[Unit]
Description=Multi-User
+Documentation=man:systemd.special(7)
Requires=basic.target
Conflicts=rescue.service rescue.target
After=basic.target rescue.service rescue.target
diff --git a/units/network.target b/units/network.target
index da800da5b0..5406f4e5d9 100644
--- a/units/network.target
+++ b/units/network.target
@@ -5,7 +5,6 @@
# the Free Software Foundation; either version 2.1 of the License, or
# (at your option) any later version.
-# See systemd.special(7) for details
-
[Unit]
Description=Network
+Documentation=man:systemd.special(7)
diff --git a/units/nss-lookup.target b/units/nss-lookup.target
index c2d605c8a1..eea905a715 100644
--- a/units/nss-lookup.target
+++ b/units/nss-lookup.target
@@ -5,11 +5,10 @@
# the Free Software Foundation; either version 2.1 of the License, or
# (at your option) any later version.
-# See systemd.special(7) for details
-
# This exists mostly for compatibility with SysV/LSB units, and
# implementations lacking socket/bus activation.
[Unit]
Description=Host and Network Name Lookups
+Documentation=man:systemd.special(7)
After=network.target
diff --git a/units/nss-user-lookup.target b/units/nss-user-lookup.target
index 0053f0608c..3e0fced101 100644
--- a/units/nss-user-lookup.target
+++ b/units/nss-user-lookup.target
@@ -5,11 +5,10 @@
# the Free Software Foundation; either version 2.1 of the License, or
# (at your option) any later version.
-# See systemd.special(7) for details
-
# This exists mostly for implementations lacking socket/bus
# activation.
[Unit]
Description=User and Group Name Lookups
+Documentation=man:systemd.special(7)
After=network.target
diff --git a/units/poweroff.target b/units/poweroff.target
index b81d6ee0d4..bb60c33dd9 100644
--- a/units/poweroff.target
+++ b/units/poweroff.target
@@ -5,10 +5,9 @@
# the Free Software Foundation; either version 2.1 of the License, or
# (at your option) any later version.
-# See systemd.special(7) for details
-
[Unit]
Description=Power-Off
+Documentation=man:systemd.special(7)
DefaultDependencies=no
Requires=poweroff.service
After=poweroff.service
diff --git a/units/printer.target b/units/printer.target
index b8582da7ad..a6b86caa8d 100644
--- a/units/printer.target
+++ b/units/printer.target
@@ -5,8 +5,7 @@
# the Free Software Foundation; either version 2.1 of the License, or
# (at your option) any later version.
-# See systemd.special(7) for details
-
[Unit]
Description=Printer
+Documentation=man:systemd.special(7)
StopWhenUnneeded=yes
diff --git a/units/proc-sys-fs-binfmt_misc.mount b/units/proc-sys-fs-binfmt_misc.mount
index ff958ca01b..c64c84951e 100644
--- a/units/proc-sys-fs-binfmt_misc.mount
+++ b/units/proc-sys-fs-binfmt_misc.mount
@@ -7,6 +7,7 @@
[Unit]
Description=Arbitrary Executable File Formats File System
+Documentation=https://www.kernel.org/doc/Documentation/binfmt_misc.txt
DefaultDependencies=no
[Mount]
diff --git a/units/reboot.target b/units/reboot.target
index 6d02417eb5..9faeb1800f 100644
--- a/units/reboot.target
+++ b/units/reboot.target
@@ -5,10 +5,9 @@
# the Free Software Foundation; either version 2.1 of the License, or
# (at your option) any later version.
-# See systemd.special(7) for details
-
[Unit]
Description=Reboot
+Documentation=man:systemd.special(7)
DefaultDependencies=no
Requires=reboot.service
After=reboot.service
diff --git a/units/remote-fs-pre.target b/units/remote-fs-pre.target
index 8f688ad7af..2169533bd3 100644
--- a/units/remote-fs-pre.target
+++ b/units/remote-fs-pre.target
@@ -5,8 +5,7 @@
# the Free Software Foundation; either version 2.1 of the License, or
# (at your option) any later version.
-# See systemd.special(7) for details
-
[Unit]
Description=Remote File Systems (Pre)
+Documentation=man:systemd.special(7)
After=network.target nss-lookup.target
diff --git a/units/remote-fs.target b/units/remote-fs.target
index 87455a4a99..9e68878ad8 100644
--- a/units/remote-fs.target
+++ b/units/remote-fs.target
@@ -5,10 +5,9 @@
# the Free Software Foundation; either version 2.1 of the License, or
# (at your option) any later version.
-# See systemd.special(7) for details
-
[Unit]
Description=Remote File Systems
+Documentation=man:systemd.special(7)
[Install]
WantedBy=multi-user.target
diff --git a/units/rescue.service.m4.in b/units/rescue.service.m4.in
index 3adfcf45bd..75b9fde278 100644
--- a/units/rescue.service.m4.in
+++ b/units/rescue.service.m4.in
@@ -5,8 +5,6 @@
# the Free Software Foundation; either version 2.1 of the License, or
# (at your option) any later version.
-# See systemd.special(7) for details
-
[Unit]
Description=Rescue Shell
DefaultDependencies=no
diff --git a/units/rescue.target b/units/rescue.target
index 85099a1ee0..c17a4e12d0 100644
--- a/units/rescue.target
+++ b/units/rescue.target
@@ -5,10 +5,9 @@
# the Free Software Foundation; either version 2.1 of the License, or
# (at your option) any later version.
-# See systemd.special(7) for details
-
[Unit]
Description=Rescue Mode
+Documentation=man:systemd.special(7)
Requires=basic.target rescue.service
After=basic.target rescue.service
AllowIsolate=yes
diff --git a/units/rpcbind.target b/units/rpcbind.target
index 5a286ebe6a..eb06a6db26 100644
--- a/units/rpcbind.target
+++ b/units/rpcbind.target
@@ -5,10 +5,9 @@
# the Free Software Foundation; either version 2.1 of the License, or
# (at your option) any later version.
-# See systemd.special(7) for details
-
# This exists mostly for compatibility with SysV/LSB units, and
# implementations lacking socket/bus activation.
[Unit]
Description=RPC Port Mapper
+Documentation=man:systemd.special(7)
diff --git a/units/serial-getty@.service.m4 b/units/serial-getty@.service.m4
index 366b2d0710..d61f93cec3 100644
--- a/units/serial-getty@.service.m4
+++ b/units/serial-getty@.service.m4
@@ -7,6 +7,7 @@
[Unit]
Description=Serial Getty on %I
+Documentation=man:agetty(8)
BindTo=dev-%i.device
After=dev-%i.device systemd-user-sessions.service plymouth-quit-wait.service
m4_ifdef(`TARGET_FEDORA',
diff --git a/units/shutdown.target b/units/shutdown.target
index 1bbef68280..73e302b8b2 100644
--- a/units/shutdown.target
+++ b/units/shutdown.target
@@ -5,9 +5,8 @@
# the Free Software Foundation; either version 2.1 of the License, or
# (at your option) any later version.
-# See systemd.special(7) for details
-
[Unit]
Description=Shutdown
+Documentation=man:systemd.special(7)
DefaultDependencies=no
RefuseManualStart=yes
diff --git a/units/sigpwr.target b/units/sigpwr.target
index 18a9683fb8..a52e7cffc9 100644
--- a/units/sigpwr.target
+++ b/units/sigpwr.target
@@ -5,7 +5,6 @@
# the Free Software Foundation; either version 2.1 of the License, or
# (at your option) any later version.
-# See systemd.special(7) for details
-
[Unit]
Description=Power Failure
+Documentation=man:systemd.special(7)
diff --git a/units/sleep.target b/units/sleep.target
index 9f4b247eb5..d7ebd289c8 100644
--- a/units/sleep.target
+++ b/units/sleep.target
@@ -5,9 +5,8 @@
# the Free Software Foundation; either version 2.1 of the License, or
# (at your option) any later version.
-# See systemd.special(7) for details
-
[Unit]
Description=Sleep
+Documentation=man:systemd.special(7)
DefaultDependencies=no
RefuseManualStart=yes
diff --git a/units/smartcard.target b/units/smartcard.target
index 3e554a0303..5fefe84703 100644
--- a/units/smartcard.target
+++ b/units/smartcard.target
@@ -5,8 +5,7 @@
# the Free Software Foundation; either version 2.1 of the License, or
# (at your option) any later version.
-# See systemd.special(7) for details
-
[Unit]
Description=Smart Card
+Documentation=man:systemd.special(7)
StopWhenUnneeded=yes
diff --git a/units/sockets.target b/units/sockets.target
index ab1b786870..26ab065d02 100644
--- a/units/sockets.target
+++ b/units/sockets.target
@@ -5,7 +5,6 @@
# the Free Software Foundation; either version 2.1 of the License, or
# (at your option) any later version.
-# See systemd.special(7) for details
-
[Unit]
Description=Sockets
+Documentation=man:systemd.special(7)
diff --git a/units/sound.target b/units/sound.target
index 6a17360c10..6699adeceb 100644
--- a/units/sound.target
+++ b/units/sound.target
@@ -5,8 +5,7 @@
# the Free Software Foundation; either version 2.1 of the License, or
# (at your option) any later version.
-# See systemd.special(7) for details
-
[Unit]
Description=Sound Card
+Documentation=man:systemd.special(7)
StopWhenUnneeded=yes
diff --git a/units/suspend.target b/units/suspend.target
index 3ddb44975d..eaf79bed11 100644
--- a/units/suspend.target
+++ b/units/suspend.target
@@ -5,10 +5,9 @@
# the Free Software Foundation; either version 2.1 of the License, or
# (at your option) any later version.
-# See systemd.special(7) for details
-
[Unit]
Description=Suspend
+Documentation=man:systemd.special(7)
DefaultDependencies=no
BindTo=suspend.service
After=suspend.service
diff --git a/units/swap.target b/units/swap.target
index 4e165424b2..23a7d0dc9c 100644
--- a/units/swap.target
+++ b/units/swap.target
@@ -5,7 +5,6 @@
# the Free Software Foundation; either version 2.1 of the License, or
# (at your option) any later version.
-# See systemd.special(7) for details
-
[Unit]
Description=Swap
+Documentation=man:systemd.special(7)
diff --git a/units/sysinit.target b/units/sysinit.target
index 5bc568ff22..8f4fb8f5c1 100644
--- a/units/sysinit.target
+++ b/units/sysinit.target
@@ -5,10 +5,9 @@
# the Free Software Foundation; either version 2.1 of the License, or
# (at your option) any later version.
-# See systemd.special(7) for details
-
[Unit]
Description=System Initialization
+Documentation=man:systemd.special(7)
Conflicts=emergency.service emergency.target
Wants=local-fs.target swap.target
After=local-fs.target swap.target emergency.service emergency.target
diff --git a/units/syslog.socket b/units/syslog.socket
index f644f6e38b..a228e5b09d 100644
--- a/units/syslog.socket
+++ b/units/syslog.socket
@@ -5,10 +5,10 @@
# the Free Software Foundation; either version 2.1 of the License, or
# (at your option) any later version.
-# See systemd.special(7) for details
-
[Unit]
Description=Syslog Socket
+Documentation=man:systemd.special(7)
+Documentation=http://www.freedesktop.org/wiki/Software/systemd/syslog
DefaultDependencies=no
Before=sockets.target syslog.target
Conflicts=shutdown.target
diff --git a/units/syslog.target b/units/syslog.target
index 92d2576e95..87ac886df3 100644
--- a/units/syslog.target
+++ b/units/syslog.target
@@ -5,13 +5,13 @@
# the Free Software Foundation; either version 2.1 of the License, or
# (at your option) any later version.
-# See systemd.special(7) for details
-
# This exists mostly for compatibility with SysV/LSB units, and
# implementations lacking socket/bus activation.
[Unit]
Description=Syslog
+Documentation=man:systemd.special(7)
+Documentation=http://www.freedesktop.org/wiki/Software/systemd/syslog
# Avoid that we conflict with shutdown.target, so that we can stay
# until the very end and do not cancel shutdown.target if we should
diff --git a/units/systemd-ask-password-console.path b/units/systemd-ask-password-console.path
index dc8ab32bcb..a0a3631b2f 100644
--- a/units/systemd-ask-password-console.path
+++ b/units/systemd-ask-password-console.path
@@ -7,6 +7,7 @@
[Unit]
Description=Dispatch Password Requests to Console Directory Watch
+Documentation=http://www.freedesktop.org/wiki/Software/systemd/PasswordAgents
DefaultDependencies=no
Conflicts=shutdown.target
After=plymouth-start.service
diff --git a/units/systemd-ask-password-console.service.in b/units/systemd-ask-password-console.service.in
index 55e3d8648e..85e739fd80 100644
--- a/units/systemd-ask-password-console.service.in
+++ b/units/systemd-ask-password-console.service.in
@@ -7,6 +7,7 @@
[Unit]
Description=Dispatch Password Requests to Console
+Documentation=http://www.freedesktop.org/wiki/Software/systemd/PasswordAgents
DefaultDependencies=no
Conflicts=shutdown.target
After=plymouth-start.service
diff --git a/units/systemd-ask-password-plymouth.path b/units/systemd-ask-password-plymouth.path
index b938ae57cf..9320b4a4df 100644
--- a/units/systemd-ask-password-plymouth.path
+++ b/units/systemd-ask-password-plymouth.path
@@ -7,6 +7,7 @@
[Unit]
Description=Forward Password Requests to Plymouth Directory Watch
+Documentation=http://www.freedesktop.org/wiki/Software/systemd/PasswordAgents
DefaultDependencies=no
Conflicts=shutdown.target
After=plymouth-start.service
diff --git a/units/systemd-ask-password-plymouth.service.in b/units/systemd-ask-password-plymouth.service.in
index fcc2853642..ea80bbd931 100644
--- a/units/systemd-ask-password-plymouth.service.in
+++ b/units/systemd-ask-password-plymouth.service.in
@@ -7,6 +7,7 @@
[Unit]
Description=Forward Password Requests to Plymouth
+Documentation=http://www.freedesktop.org/wiki/Software/systemd/PasswordAgents
DefaultDependencies=no
Conflicts=shutdown.target
After=plymouth-start.service
diff --git a/units/systemd-ask-password-wall.path b/units/systemd-ask-password-wall.path
index 73e13616b6..3890a7412d 100644
--- a/units/systemd-ask-password-wall.path
+++ b/units/systemd-ask-password-wall.path
@@ -7,6 +7,7 @@
[Unit]
Description=Forward Password Requests to Wall Directory Watch
+Documentation=http://www.freedesktop.org/wiki/Software/systemd/PasswordAgents
DefaultDependencies=no
Conflicts=shutdown.target
Before=basic.target shutdown.target
diff --git a/units/systemd-ask-password-wall.service.in b/units/systemd-ask-password-wall.service.in
index 1db408e55b..9305fca6f7 100644
--- a/units/systemd-ask-password-wall.service.in
+++ b/units/systemd-ask-password-wall.service.in
@@ -7,6 +7,7 @@
[Unit]
Description=Forward Password Requests to Wall
+Documentation=http://www.freedesktop.org/wiki/Software/systemd/PasswordAgents
After=systemd-user-sessions.service
[Service]
diff --git a/units/systemd-binfmt.service.in b/units/systemd-binfmt.service.in
index 8d288066dc..a7cda979d4 100644
--- a/units/systemd-binfmt.service.in
+++ b/units/systemd-binfmt.service.in
@@ -7,6 +7,8 @@
[Unit]
Description=Set Up Additional Binary Formats
+Documentation=man:binfmt.d(5)
+Documentation=https://www.kernel.org/doc/Documentation/binfmt_misc.txt
DefaultDependencies=no
Conflicts=shutdown.target
After=systemd-readahead-collect.service systemd-readahead-replay.service proc-sys-fs-binfmt_misc.automount
diff --git a/units/systemd-hostnamed.service.in b/units/systemd-hostnamed.service.in
index a9a99136c0..d7fd1940f3 100644
--- a/units/systemd-hostnamed.service.in
+++ b/units/systemd-hostnamed.service.in
@@ -5,10 +5,11 @@
# the Free Software Foundation; either version 2.1 of the License, or
# (at your option) any later version.
-# See systemd.special(7) for details
-
[Unit]
Description=Hostname Service
+Documentation=man:hostname(5)
+Documentation=man:machine-info(5)
+Documentation=http://www.freedesktop.org/wiki/Software/systemd/hostnamed
[Service]
ExecStart=@rootlibexecdir@/systemd-hostnamed
diff --git a/units/systemd-initctl.service.in b/units/systemd-initctl.service.in
index bcadcc8d1a..11e2286035 100644
--- a/units/systemd-initctl.service.in
+++ b/units/systemd-initctl.service.in
@@ -5,8 +5,6 @@
# the Free Software Foundation; either version 2.1 of the License, or
# (at your option) any later version.
-# See systemd.special(7) for details
-
[Unit]
Description=/dev/initctl Compatibility Daemon
DefaultDependencies=no
diff --git a/units/systemd-initctl.socket b/units/systemd-initctl.socket
index 66597ee107..abafc525d7 100644
--- a/units/systemd-initctl.socket
+++ b/units/systemd-initctl.socket
@@ -5,8 +5,6 @@
# the Free Software Foundation; either version 2.1 of the License, or
# (at your option) any later version.
-# See systemd.special(7) for details
-
[Unit]
Description=/dev/initctl Compatibility Named Pipe
DefaultDependencies=no
diff --git a/units/systemd-journald.service.in b/units/systemd-journald.service.in
index a3c22c8ffa..da07cb9ce6 100644
--- a/units/systemd-journald.service.in
+++ b/units/systemd-journald.service.in
@@ -5,10 +5,9 @@
# the Free Software Foundation; either version 2.1 of the License, or
# (at your option) any later version.
-# See systemd.special(7) for details
-
[Unit]
Description=Journal Service
+Documentation=man:journald.conf(5)
DefaultDependencies=no
Requires=systemd-journald.socket
After=systemd-journald.socket
diff --git a/units/systemd-journald.socket b/units/systemd-journald.socket
index d613e2288f..0454e3e340 100644
--- a/units/systemd-journald.socket
+++ b/units/systemd-journald.socket
@@ -5,10 +5,9 @@
# the Free Software Foundation; either version 2.1 of the License, or
# (at your option) any later version.
-# See systemd.special(7) for details
-
[Unit]
Description=Journal Socket
+Documentation=man:journald.conf(5)
DefaultDependencies=no
Before=sockets.target syslog.target
diff --git a/units/systemd-localed.service.in b/units/systemd-localed.service.in
index 763d2900fc..f973fa4585 100644
--- a/units/systemd-localed.service.in
+++ b/units/systemd-localed.service.in
@@ -5,10 +5,11 @@
# the Free Software Foundation; either version 2.1 of the License, or
# (at your option) any later version.
-# See systemd.special(7) for details
-
[Unit]
Description=Locale Service
+Documentation=http://www.freedesktop.org/wiki/Software/systemd/localed
+Documentation=man:locale.conf(5)
+Documentation=man:vconsole.conf(5)
[Service]
ExecStart=@rootlibexecdir@/systemd-localed
diff --git a/units/systemd-logind.service.in b/units/systemd-logind.service.in
index f244761606..d890713fdd 100644
--- a/units/systemd-logind.service.in
+++ b/units/systemd-logind.service.in
@@ -5,10 +5,10 @@
# the Free Software Foundation; either version 2.1 of the License, or
# (at your option) any later version.
-# See systemd.special(7) for details
-
[Unit]
Description=Login Service
+Documentation=http://www.freedesktop.org/wiki/Software/systemd/multiseat
+Documentation=man:logind.conf(5)
After=nss-user-lookup.target
[Service]
diff --git a/units/systemd-modules-load.service.in b/units/systemd-modules-load.service.in
index 243afadc83..8f25091986 100644
--- a/units/systemd-modules-load.service.in
+++ b/units/systemd-modules-load.service.in
@@ -7,6 +7,7 @@
[Unit]
Description=Load Kernel Modules
+Documentation=man:modules-load.d(5)
DefaultDependencies=no
Conflicts=shutdown.target
After=systemd-readahead-collect.service systemd-readahead-replay.service
diff --git a/units/systemd-shutdownd.service.in b/units/systemd-shutdownd.service.in
index ec88b23fde..b9e271f0f6 100644
--- a/units/systemd-shutdownd.service.in
+++ b/units/systemd-shutdownd.service.in
@@ -5,8 +5,6 @@
# the Free Software Foundation; either version 2.1 of the License, or
# (at your option) any later version.
-# See systemd.special(7) for details
-
[Unit]
Description=Delayed Shutdown Service
DefaultDependencies=no
diff --git a/units/systemd-shutdownd.socket b/units/systemd-shutdownd.socket
index c97e01a337..ed6225a098 100644
--- a/units/systemd-shutdownd.socket
+++ b/units/systemd-shutdownd.socket
@@ -5,8 +5,6 @@
# the Free Software Foundation; either version 2.1 of the License, or
# (at your option) any later version.
-# See systemd.special(7) for details
-
[Unit]
Description=Delayed Shutdown Socket
DefaultDependencies=no
diff --git a/units/systemd-sysctl.service.in b/units/systemd-sysctl.service.in
index d38f026142..d8849e7929 100644
--- a/units/systemd-sysctl.service.in
+++ b/units/systemd-sysctl.service.in
@@ -7,6 +7,7 @@
[Unit]
Description=Apply Kernel Variables
+Documentation=man:sysctl.d(5)
DefaultDependencies=no
Conflicts=shutdown.target
After=systemd-readahead-collect.service systemd-readahead-replay.service
diff --git a/units/systemd-timedated-ntp.target b/units/systemd-timedated-ntp.target
index 128424857d..0837004128 100644
--- a/units/systemd-timedated-ntp.target
+++ b/units/systemd-timedated-ntp.target
@@ -12,6 +12,7 @@
[Unit]
Description=Network Time Protocol
+Documentation=http://www.freedesktop.org/wiki/Software/systemd/timedated
[Install]
WantedBy=multi-user.target
diff --git a/units/systemd-timedated.service.in b/units/systemd-timedated.service.in
index 01222833d1..fbdf9e1746 100644
--- a/units/systemd-timedated.service.in
+++ b/units/systemd-timedated.service.in
@@ -5,10 +5,10 @@
# the Free Software Foundation; either version 2.1 of the License, or
# (at your option) any later version.
-# See systemd.special(7) for details
-
[Unit]
Description=Time & Date Service
+Documentation=http://www.freedesktop.org/wiki/Software/systemd/timedated
+Documentation=man:timezone(5)
[Service]
ExecStart=@rootlibexecdir@/systemd-timedated
diff --git a/units/systemd-tmpfiles-clean.service.in b/units/systemd-tmpfiles-clean.service.in
index 0a8707e138..a288232e12 100644
--- a/units/systemd-tmpfiles-clean.service.in
+++ b/units/systemd-tmpfiles-clean.service.in
@@ -7,6 +7,7 @@
[Unit]
Description=Cleanup of Temporary Directories
+Documentation=man:tmpfiles.d(5)
DefaultDependencies=no
Wants=local-fs.target
After=systemd-readahead-collect.service systemd-readahead-replay.service local-fs.target
diff --git a/units/systemd-tmpfiles-clean.timer b/units/systemd-tmpfiles-clean.timer
index c9f89e803d..fac4ee3da8 100644
--- a/units/systemd-tmpfiles-clean.timer
+++ b/units/systemd-tmpfiles-clean.timer
@@ -7,6 +7,7 @@
[Unit]
Description=Daily Cleanup of Temporary Directories
+Documentation=man:tmpfiles.d(5)
[Timer]
OnBootSec=15min
diff --git a/units/systemd-tmpfiles-setup.service.in b/units/systemd-tmpfiles-setup.service.in
index 58c3415b1e..dbd6bfb6d5 100644
--- a/units/systemd-tmpfiles-setup.service.in
+++ b/units/systemd-tmpfiles-setup.service.in
@@ -7,6 +7,7 @@
[Unit]
Description=Recreate Volatile Files and Directories
+Documentation=man:tmpfiles.d(5)
DefaultDependencies=no
Wants=local-fs.target
After=systemd-readahead-collect.service systemd-readahead-replay.service local-fs.target
diff --git a/units/systemd-udev-control.socket b/units/systemd-udev-control.socket
index 1cf0683911..dc5e1da174 100644
--- a/units/systemd-udev-control.socket
+++ b/units/systemd-udev-control.socket
@@ -1,5 +1,14 @@
+# This file is part of systemd.
+#
+# systemd is free software; you can redistribute it and/or modify it
+# 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.
+
[Unit]
Description=udev Control Socket
+Documentation=man:udev(7)
+Documentation=man:udevd(8)
DefaultDependencies=no
ConditionCapability=CAP_MKNOD
diff --git a/units/systemd-udev-kernel.socket b/units/systemd-udev-kernel.socket
index 8f2690f3fe..3270fe8ced 100644
--- a/units/systemd-udev-kernel.socket
+++ b/units/systemd-udev-kernel.socket
@@ -1,5 +1,14 @@
+# This file is part of systemd.
+#
+# systemd is free software; you can redistribute it and/or modify it
+# 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.
+
[Unit]
Description=udev Kernel Socket
+Documentation=man:udev(7)
+Documentation=man:udevd(8)
DefaultDependencies=no
ConditionCapability=CAP_MKNOD
diff --git a/units/systemd-udev-settle.service.in b/units/systemd-udev-settle.service.in
index e8c9223162..b782d73ad0 100644
--- a/units/systemd-udev-settle.service.in
+++ b/units/systemd-udev-settle.service.in
@@ -1,3 +1,10 @@
+# This file is part of systemd.
+#
+# systemd is free software; you can redistribute it and/or modify it
+# 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.
+
# This service is usually not enabled by default. If enabled, it
# acts as a barrier for basic.target -- so all later services will
# wait for udev completely finishing its coldplug run.
@@ -10,6 +17,8 @@
[Unit]
Description=udev Wait for Complete Device Initialization
+Documentation=man:udev(7)
+Documentation=man:udevd(8)
DefaultDependencies=no
Wants=systemd-udev.service
After=udev-trigger.service
diff --git a/units/systemd-udev-trigger.service.in b/units/systemd-udev-trigger.service.in
index 523dd47abc..61d188e489 100644
--- a/units/systemd-udev-trigger.service.in
+++ b/units/systemd-udev-trigger.service.in
@@ -1,5 +1,14 @@
+# This file is part of systemd.
+#
+# systemd is free software; you can redistribute it and/or modify it
+# 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.
+
[Unit]
Description=udev Coldplug all Devices
+Documentation=man:udev(7)
+Documentation=man:udevd(8)
Wants=systemd-udev.service
After=systemd-udev-kernel.socket systemd-udev-control.socket
DefaultDependencies=no
diff --git a/units/systemd-udev.service.in b/units/systemd-udev.service.in
index 8a1793339b..7bd8e3c210 100644
--- a/units/systemd-udev.service.in
+++ b/units/systemd-udev.service.in
@@ -1,5 +1,14 @@
+# This file is part of systemd.
+#
+# systemd is free software; you can redistribute it and/or modify it
+# 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.
+
[Unit]
Description=udev Kernel Device Manager
+Documentation=man:udev(7)
+Documentation=man:udevd(8)
Wants=systemd-udev-control.socket systemd-udev-kernel.socket
After=systemd-udev-control.socket systemd-udev-kernel.socket
Before=basic.target
diff --git a/units/systemd-update-utmp-runlevel.service.in b/units/systemd-update-utmp-runlevel.service.in
index 2a0751e896..6666dbd790 100644
--- a/units/systemd-update-utmp-runlevel.service.in
+++ b/units/systemd-update-utmp-runlevel.service.in
@@ -7,6 +7,7 @@
[Unit]
Description=Update UTMP about System Runlevel Changes
+Documentation=man:utmp(5)
DefaultDependencies=no
After=local-fs.target sysinit.target auditd.service runlevel1.target runlevel2.target runlevel3.target runlevel4.target runlevel5.target systemd-tmpfiles-setup.service
Before=poweroff.service reboot.service halt.service
diff --git a/units/systemd-update-utmp-shutdown.service.in b/units/systemd-update-utmp-shutdown.service.in
index e86c770548..5b726c3688 100644
--- a/units/systemd-update-utmp-shutdown.service.in
+++ b/units/systemd-update-utmp-shutdown.service.in
@@ -7,6 +7,7 @@
[Unit]
Description=Update UTMP about System Shutdown
+Documentation=man:utmp(5)
DefaultDependencies=no
After=local-fs.target sysinit.target auditd.service systemd-update-utmp-runlevel.service
Before=poweroff.service reboot.service halt.service
diff --git a/units/systemd-vconsole-setup.service.in b/units/systemd-vconsole-setup.service.in
index 1420ce8f62..51fc0b5124 100644
--- a/units/systemd-vconsole-setup.service.in
+++ b/units/systemd-vconsole-setup.service.in
@@ -7,6 +7,7 @@
[Unit]
Description=Setup Virtual Console
+Documentation=man:vconsole.conf(5)
DefaultDependencies=no
Conflicts=shutdown.target
After=systemd-readahead-collect.service systemd-readahead-replay.service
diff --git a/units/time-sync.target b/units/time-sync.target
index 36b9e7aeea..ec00ecbbf4 100644
--- a/units/time-sync.target
+++ b/units/time-sync.target
@@ -5,10 +5,9 @@
# the Free Software Foundation; either version 2.1 of the License, or
# (at your option) any later version.
-# See systemd.special(7) for details
-
# This exists mostly for compatibility with SysV/LSB units, and
# implementations lacking socket/bus activation.
[Unit]
Description=System Time Synchronized
+Documentation=man:systemd.special(7)
diff --git a/units/umount.target b/units/umount.target
index c583062911..39668d85d2 100644
--- a/units/umount.target
+++ b/units/umount.target
@@ -5,9 +5,8 @@
# the Free Software Foundation; either version 2.1 of the License, or
# (at your option) any later version.
-# See systemd.special(7) for details
-
[Unit]
Description=Unmount All Filesystems
+Documentation=man:systemd.special(7)
DefaultDependencies=no
RefuseManualStart=yes
diff --git a/units/user/default.target b/units/user/default.target
index 4f9379ea5e..56cf4dcb9c 100644
--- a/units/user/default.target
+++ b/units/user/default.target
@@ -5,7 +5,6 @@
# the Free Software Foundation; either version 2.1 of the License, or
# (at your option) any later version.
-# See systemd.special(7) for details
-
[Unit]
Description=Default
+Documentation=man:systemd.special(7)
diff --git a/units/user/exit.service.in b/units/user/exit.service.in
index c785fbd64a..a114f6c1be 100644
--- a/units/user/exit.service.in
+++ b/units/user/exit.service.in
@@ -5,10 +5,9 @@
# the Free Software Foundation; either version 2.1 of the License, or
# (at your option) any later version.
-# See systemd.special(7) for details
-
[Unit]
Description=Exit the Session
+Documentation=man:systemd.special(7)
DefaultDependencies=no
Requires=shutdown.target
After=shutdown.target
diff --git a/units/user/exit.target b/units/user/exit.target
index ffc8fad019..539e03a9aa 100644
--- a/units/user/exit.target
+++ b/units/user/exit.target
@@ -5,10 +5,9 @@
# the Free Software Foundation; either version 2.1 of the License, or
# (at your option) any later version.
-# See systemd.special(7) for details
-
[Unit]
Description=Exit the Session
+Documentation=man:systemd.special(7)
DefaultDependencies=no
Requires=exit.service
After=exit.service